diff --git a/.github/workflows/fulltest.yaml b/.github/workflows/fulltest.yaml index 32eb3da00e..2236dc6d51 100644 --- a/.github/workflows/fulltest.yaml +++ b/.github/workflows/fulltest.yaml @@ -70,7 +70,7 @@ jobs: exit 1 fi - name: Upload pytest test results - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pytest-results-${{ matrix.python-version }} path: | diff --git a/.github/workflows/unittest.yaml b/.github/workflows/unittest.yaml index 15cb83df3a..914ffab3be 100644 --- a/.github/workflows/unittest.yaml +++ b/.github/workflows/unittest.yaml @@ -48,7 +48,7 @@ jobs: exit 1 fi - name: Upload pytest test results - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pytest-results-${{ matrix.python-version }} path: | diff --git a/README.md b/README.md index fefdd8aed7..1bfa1a19dd 100644 --- a/README.md +++ b/README.md @@ -105,12 +105,14 @@ You can also use [Data Interpreter](https://github.com/geekan/MetaGPT/tree/main/ ```python import asyncio -from metagpt.roles.di.data_interpreter import DataInterpreter +from metagpt.roles.data_interpreter import DataInterpreter + async def main(): di = DataInterpreter() await di.run("Run data analysis on sklearn Iris dataset, include a plot") + asyncio.run(main()) # or await main() in a jupyter notebook setting ``` diff --git a/docs/README_FR.md b/docs/README_FR.md index 17ffc043e3..b8e93d270d 100644 --- a/docs/README_FR.md +++ b/docs/README_FR.md @@ -109,12 +109,14 @@ Vous pouvez aussi utiliser [Data Interpreter](https://github.com/geekan/MetaGPT/ ```python import asyncio -from metagpt.roles.di.data_interpreter import DataInterpreter +from metagpt.roles.data_interpreter import DataInterpreter + async def main(): di = DataInterpreter() await di.run("Exécuter une analyse de données sur le jeu de données sklearn Iris et y inclure un graphique") + asyncio.run(main()) # ou attendre main() dans une configuration de notebook jupyter ``` diff --git a/examples/aflow/README.md b/examples/aflow/README.md deleted file mode 100644 index 332cc4b3d6..0000000000 --- a/examples/aflow/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# AFlow: Automating Agentic Workflow Generation - -AFlow is a framework for automatically generating and optimizing Agentic Workflows. It uses Monte Carlo tree search in a code-represented workflow space to find effective workflows, replacing manual development with machine effort. Our approach shows potential to outperform handcrafted workflows on various tasks. - -[Read our paper on arXiv](https://arxiv.org/abs/2410.10762) - -

-Performance Of AFlow -

- -## Framework Components - -- **Node**: Basic unit of LLM invocation. See `metagpt/actions/action_node.py` for a flexible interface to control LLM, temperature, format, and prompt. -- **Operator**: Predefined combinations of Nodes to enhance search efficiency. Encapsulates common operations like Generate, Format, Review, Revise, Ensemble, Test, and Programmer. See `metagpt/ext/aflow/operator.py` for details. You can customize your own Operator by referencing the implementations in this code. -- **Workflow**: A sequence of LLM-invoking nodes connected by edges. Can be represented as graphs, neural networks, or code to express various execution structures. See `metagpt/ext/aflow/workflow.py` for our implementation. -- **Optimizer**: Uses LLMs within a Monte Carlo Tree Search variant to explore and refine workflows. Iteratively selects, expands, evaluates, and updates workflows based on performance. See `metagpt/ext/aflow/scripts/optimizer.py` for details. -- **Evaluator**: Assesses workflow performance on given tasks. Provides feedback to guide the optimization process towards more effective workflows. See `metagpt/ext/aflow/scripts/evaluator.py` for details. - -

-Framework of AFlow -

- -## Datasets - -### Experimental Datasets -We conducted experiments on six datasets (HumanEval, MBPP, GSM8K, MATH, HotpotQA, DROP) and provide their evaluation code. The data can be found in this [datasets](https://drive.google.com/uc?export=download&id=1DNoegtZiUhWtvkd2xoIuElmIi4ah7k8e) link, or you can download them using `metagpt/ext/aflow/data/download_data.py` - -

-Performance Of AFlow -

- -### Custom Datasets -For custom tasks, you can reference the code in the `metagpt/ext/aflow/benchmark` folder. Inherit the `BaseBenchmark` class and implement `evaluate_problem`, `calculate_score`, and `get_result_columns` to add your custom dataset benchmark. Then, add your benchmark name in `metagpt/ext/aflow/scripts/evaluator.py` and `metagpt/ext/aflow/scripts/optimizer.py` to find effective workflows for your custom dataset. - -## Quick Start - -1. Configure optimization parameters: - - Use command line arguments or modify default parameters in `examples/aflow/optimize.py`: - ```python - --dataset # (Required) Dataset type (HumanEval/MBPP/GSM8K/MATH/HotpotQA/DROP) - --sample 4 # Sample count - number of workflows to be resampled - --optimized_path PATH # Optimized result save path - --initial_round 1 # Initial round - --max_rounds 20 # Max iteration rounds for AFLOW - --check_convergence # Whether to enable early stop - --validation_rounds 5 # Validation rounds for AFLOW - --if_first_optimize # Set True for first optimization, False afterwards - ``` - -2. Configure LLM parameters in `config/config2.yaml` (see `examples/aflow/config2.example.yaml` for reference) - -3. Set up operators in `optimize.py` and in `optimized_path/template/operator.py`, `optimized_path/template/operator.json`. You can reference our implementation to add operators for specific datasets - -4. For first-time use, download datasets and initial rounds by setting `download(["datasets", "initial_rounds"])` in `examples/aflow/optimize.py` - -5. (Optional) Add your custom dataset and corresponding evaluation function following the [Custom Datasets](#custom-datasets) section - -6. (Optional) If you want to use a portion of the validation data, you can set `va_list` in `examples/aflow/evaluator.py` - -7. Run the optimization: - ```bash - # Using default parameters - python -m examples.aflow.optimize --dataset MATH - - # Or with custom parameters - python -m examples.aflow.optimize --dataset MATH --sample n --optimized_path xxx ... - ``` - -## Reproduce the Results in the Paper -1. We provide the raw data obtained from our experiments in this [link](https://drive.google.com/uc?export=download&id=1Sr5wjgKf3bN8OC7G6cO3ynzJqD4w6_Dv), including the workflows and prompts generated in each iteration, as well as their trajectories on the validation dataset. We also provide the optimal workflow for each dataset and the corresponding data on the test dataset. You can download these data using `metagpt/ext/aflow/data/download_data.py`. -2. You can directly reproduce our experimental results by use different `ExperimentConfig` of `examples/aflow/optimize.py`. - - -## Citation - -If you use AFlow in your research, please cite our paper: - -``` -@misc{zhang2024aflow, - title={AFlow: Automating Agentic Workflow Generation}, - author={Jiayi Zhang and Jinyu Xiang and Zhaoyang Yu and Fengwei Teng and Xionghui Chen and Jiaqi Chen and Mingchen Zhuge and Xin Cheng and Sirui Hong and Jinlin Wang and Bingnan Zheng and Bang Liu and Yuyu Luo and Chenglin Wu}, - year={2024}, - eprint={2410.10762}, - archivePrefix={arXiv}, - primaryClass={cs.AI}, - url={https://arxiv.org/abs/2410.10762}, -} -``` \ No newline at end of file diff --git a/examples/aflow/config2.example.yaml b/examples/aflow/config2.example.yaml deleted file mode 100644 index ebaef33e2e..0000000000 --- a/examples/aflow/config2.example.yaml +++ /dev/null @@ -1,12 +0,0 @@ -models: - "": # model: "gpt-4-turbo" # or gpt-3.5-turbo - api_type: "openai" # or azure / ollama / groq etc. - base_url: "" - api_key: "" - temperature: 0 - "": - api_type: "openai" - base_url: "" - api_key: "" - temperature: 0 -CALC_USAGE: True diff --git a/examples/aflow/optimize.py b/examples/aflow/optimize.py deleted file mode 100644 index 8f13cfad2d..0000000000 --- a/examples/aflow/optimize.py +++ /dev/null @@ -1,136 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 8/23/2024 20:00 PM -# @Author : didi -# @Desc : Entrance of AFlow. - -import argparse -from typing import Dict, List - -from metagpt.configs.models_config import ModelsConfig -from metagpt.ext.aflow.data.download_data import download -from metagpt.ext.aflow.scripts.optimizer import Optimizer - - -class ExperimentConfig: - def __init__(self, dataset: str, question_type: str, operators: List[str]): - self.dataset = dataset - self.question_type = question_type - self.operators = operators - - -EXPERIMENT_CONFIGS: Dict[str, ExperimentConfig] = { - "DROP": ExperimentConfig( - dataset="DROP", - question_type="qa", - operators=["Custom", "AnswerGenerate", "ScEnsemble"], - ), - "HotpotQA": ExperimentConfig( - dataset="HotpotQA", - question_type="qa", - operators=["Custom", "AnswerGenerate", "ScEnsemble"], - ), - "MATH": ExperimentConfig( - dataset="MATH", - question_type="math", - operators=["Custom", "ScEnsemble", "Programmer"], - ), - "GSM8K": ExperimentConfig( - dataset="GSM8K", - question_type="math", - operators=["Custom", "ScEnsemble", "Programmer"], - ), - "MBPP": ExperimentConfig( - dataset="MBPP", - question_type="code", - operators=["Custom", "CustomCodeGenerate", "ScEnsemble", "Test"], - ), - "HumanEval": ExperimentConfig( - dataset="HumanEval", - question_type="code", - operators=["Custom", "CustomCodeGenerate", "ScEnsemble", "Test"], - ), -} - - -def parse_args(): - parser = argparse.ArgumentParser(description="AFlow Optimizer") - parser.add_argument( - "--dataset", - type=str, - choices=list(EXPERIMENT_CONFIGS.keys()), - required=True, - help="Dataset type", - ) - parser.add_argument("--sample", type=int, default=4, help="Sample count") - parser.add_argument( - "--optimized_path", - type=str, - default="metagpt/ext/aflow/scripts/optimized", - help="Optimized result save path", - ) - parser.add_argument("--initial_round", type=int, default=1, help="Initial round") - parser.add_argument("--max_rounds", type=int, default=20, help="Max iteration rounds") - parser.add_argument("--check_convergence", type=bool, default=True, help="Whether to enable early stop") - parser.add_argument("--validation_rounds", type=int, default=5, help="Validation rounds") - parser.add_argument( - "--if_first_optimize", - type=lambda x: x.lower() == "true", - default=True, - help="Whether to download dataset for the first time", - ) - parser.add_argument( - "--opt_model_name", - type=str, - default="claude-3-5-sonnet-20240620", - help="Specifies the name of the model used for optimization tasks.", - ) - parser.add_argument( - "--exec_model_name", - type=str, - default="gpt-4o-mini", - help="Specifies the name of the model used for execution tasks.", - ) - return parser.parse_args() - - -if __name__ == "__main__": - args = parse_args() - - config = EXPERIMENT_CONFIGS[args.dataset] - - models_config = ModelsConfig.default() - opt_llm_config = models_config.get(args.opt_model_name) - if opt_llm_config is None: - raise ValueError( - f"The optimization model '{args.opt_model_name}' was not found in the 'models' section of the configuration file. " - "Please add it to the configuration file or specify a valid model using the --opt_model_name flag. " - ) - - exec_llm_config = models_config.get(args.exec_model_name) - if exec_llm_config is None: - raise ValueError( - f"The execution model '{args.exec_model_name}' was not found in the 'models' section of the configuration file. " - "Please add it to the configuration file or specify a valid model using the --exec_model_name flag. " - ) - - download(["datasets", "initial_rounds"], if_first_download=args.if_first_optimize) - - optimizer = Optimizer( - dataset=config.dataset, - question_type=config.question_type, - opt_llm_config=opt_llm_config, - exec_llm_config=exec_llm_config, - check_convergence=args.check_convergence, - operators=config.operators, - optimized_path=args.optimized_path, - sample=args.sample, - initial_round=args.initial_round, - max_rounds=args.max_rounds, - validation_rounds=args.validation_rounds, - ) - - # Optimize workflow via setting the optimizer's mode to 'Graph' - optimizer.optimize("Graph") - - # Test workflow via setting the optimizer's mode to 'Test' - # optimizer.optimize("Test") diff --git a/examples/agent_creator.py b/examples/agent_creator.py index bd58840ce9..c969cbd14b 100644 --- a/examples/agent_creator.py +++ b/examples/agent_creator.py @@ -6,11 +6,11 @@ import re from metagpt.actions import Action -from metagpt.config2 import config -from metagpt.const import METAGPT_ROOT -from metagpt.logs import logger +from metagpt.core.config2 import config +from metagpt.core.const import METAGPT_ROOT +from metagpt.core.logs import logger +from metagpt.core.schema import Message from metagpt.roles import Role -from metagpt.schema import Message EXAMPLE_CODE_FILE = METAGPT_ROOT / "examples/build_customized_agent.py" MULTI_ACTION_AGENT_CODE_EXAMPLE = EXAMPLE_CODE_FILE.read_text() diff --git a/examples/android_assistant/requirements.txt b/examples/android_assistant/requirements.txt deleted file mode 100644 index 155863613c..0000000000 --- a/examples/android_assistant/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 7d5d4d5c88..0000000000 --- a/examples/android_assistant/run_assistant.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/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/cr.py b/examples/cr.py deleted file mode 100644 index 295ed9fb8f..0000000000 --- a/examples/cr.py +++ /dev/null @@ -1,15 +0,0 @@ -import fire - -from metagpt.roles.di.engineer2 import Engineer2 -from metagpt.tools.libs.cr import CodeReview - - -async def main(msg): - role = Engineer2(tools=["Plan", "Editor:write,read", "RoleZero", "ValidateAndRewriteCode", "CodeReview"]) - cr = CodeReview() - role.tool_execution_map.update({"CodeReview.review": cr.review, "CodeReview.fix": cr.fix}) - await role.run(msg) - - -if __name__ == "__main__": - fire.Fire(main) diff --git a/examples/di/InfiAgent-DABench/DABench.py b/examples/di/InfiAgent-DABench/DABench.py deleted file mode 100644 index 50ec04b296..0000000000 --- a/examples/di/InfiAgent-DABench/DABench.py +++ /dev/null @@ -1,487 +0,0 @@ -import asyncio -import json -import re -from pathlib import Path -from typing import Any, Dict, List, Tuple, Union - -import nest_asyncio - -from examples.di.requirements_prompt import DABENCH -from metagpt.const import DABENCH_PATH -from metagpt.logs import logger -from metagpt.utils.exceptions import handle_exception - - -def evaluate_accuracy_by_question(results: dict) -> float: - """ - Calculate the accuracy of results based on complete correctness of each question. - This function is referenced from https://github.com/InfiAgent/InfiAgent/blob/main/examples/DA-Agent/eval_closed_form.py - This function checks whether each result is entirely correct, meaning all sub-questions - within that result are answered correctly. It computes the proportion of correct results - by dividing the number of fully correct results by the total number of results. - - Args: - results (dict): A collection of results where each result may contain a 'correctness' field. - - Returns: - float: The proportion of correct results, rounded to four decimal places. - Returns 0 if there are no results. - """ - correct = sum("correctness" in result and all(result["correctness"].values()) for result in results) - total = len(results) - return round(correct / total, 4) if total > 0 else 0 - - -def evaluate_accuracy_by_sub_question(results: dict) -> float: - """ - Evaluate the correctness of all sub-questions across the results. - This function is referenced from https://github.com/InfiAgent/InfiAgent/blob/main/examples/DA-Agent/eval_closed_form.py - This function calculates the total number of correct sub-questions and the overall - number of sub-questions present in all results. It returns the ratio of correct - sub-questions to the total number of sub-questions. - - Args: - results (dict): A collection of results where each result may contain a 'correctness' field. - - Returns: - float: The ratio of correct sub-questions, rounded to four decimal places. - Returns 0 if there are no sub-questions. - """ - correct = sum(sum(result["correctness"].values()) for result in results if "correctness" in result) - total = sum(len(result["correctness"]) for result in results if "correctness" in result) - return round(correct / total, 4) if total > 0 else 0 - - -def evaluate_accuracy_proportional_by_sub_question_adjusted(results: dict) -> float: - """ - Adjust the score based on the number of sub-questions in each result. - This function is referenced from https://github.com/InfiAgent/InfiAgent/blob/main/examples/DA-Agent/eval_closed_form.py - This function calculates a score for each result by considering the number of sub-questions - it contains. Each sub-question is assigned a score of 1 divided by the number of sub-questions. - The total score for each result is computed as the sum of all correct sub-questions multiplied - by the score per sub-question. Finally, it returns the average score across all results. - - Args: - results (dict): A collection of results where each result may contain a 'correctness' field. - - Returns: - float: The average score across all results, rounded to four decimal places. - Returns 0 if there are no results. - """ - total_score = 0 - for result in results: - if "correctness" in result: - sub_question_count = len(result["correctness"]) - score_per_sub_question = 1 / sub_question_count if sub_question_count > 0 else 0 - question_score = sum(result["correctness"].values()) * score_per_sub_question - total_score += question_score - return round(total_score / len(results), 4) if results else 0 - - -async def reformat(question: str, format: str, response: str) -> str: - """ - Asynchronously reformats a given response based on specified formatting requirements. - This function is referenced from https://github.com/InfiAgent/InfiAgent/blob/main/examples/DA-Agent/reformat.py - This function constructs a prompt for the LLM (Large Language Model) to reformat - the provided response according to the specified format. It includes a system prompt - to guide the LLM's behavior and a template that outlines the expected output structure. - - Args: - question (str): The original question posed by the user. - format (str): The specific formatting requirements that the response must adhere to. - response (str): The initial response from the LLM that needs to be reformatted. - - Returns: - str: The reformatted response generated by the LLM based on the provided question - and formatting requirements. - """ - system_prompt = "You are a helpful assistant." - demons = """\Format{{ - @shapiro_wilk_statistic[test_statistic] - @shapiro_wilk_p_value[p_value] - where "test_statistic" is a number between 0 and 1 representing the Shapiro-Wilk test statistic. Rounding off the answer to two decimal places. - where "p_value" is a number between 0 and 1 representing the p-value from the Shapiro-Wilk test. Rounding off the answer to four decimal places. - }} - \Answer{{ - @shapiro_wilk_statistic[0.56] - @shapiro_wilk_p_value[0.0002] - }} - - \Format{{ - @total_votes_outliers_num[outlier_num] - where "outlier_num" is an integer representing the number of values considered outliers in the 'total_votes' column. - }} - \Answer{{ - @total_votes_outliers[10] - }} - """ - reformat_template = """You should strictly follow the output requirements in the Format part. Here're some examples: {demons}. - Your answer should contain all the \"@answer_name[answer]\" in the order mentioned, each \"answer\" should be in the range of value as required. You need to keep the original numbers and text, just reformat without making any changes. - The format requirements of this question is: - {format}. You need to keep the original numbers and text, just reformat without making any changes. Please give your answer:""" - messages = [ - {"role": "user", "content": question}, - {"role": "assistant", "content": response}, - {"role": "user", "content": reformat_template.format(demons=demons, format=format)}, - ] - rsp = await ask(messages, system_prompt) - return rsp - - -def load_jsonl(file_path: Union[Path, str]) -> List[Dict[str, Any]]: - """ - Load data from a JSONL file into a list of dictionaries. - - Args: - file_path (Union[Path, str]): The path to the JSONL file to be loaded. - - Returns: - List[Dict[str, Any]]: A list of dictionaries containing the data from the JSONL file. - """ - # Convert file_path to Path if it's a string - if isinstance(file_path, str): - file_path = Path(file_path) - - data = [] - with open(file_path, "r", encoding="utf-8") as file: - for line in file: - data.append(json.loads(line)) - return data - - -def compare_predictions(pred_dict: dict, true_label: list) -> bool: - """ - Compares each prediction against the corresponding true label. - - This function checks whether the predicted values match the true values for each - metric. It sorts the true labels to ensure the comparison is made in the correct - order. The function returns True if all predictions are accurate within a small - tolerance for numerical values, or if string values match case-insensitively. - - Args: - pred_dict (dict): A dictionary of predicted metrics and their values. - true_label (list): A list of tuples containing true metrics and their values. - - Returns: - bool: True if all predictions match the true labels, False otherwise. - """ - sorted_true_label = sorted(true_label, key=lambda x: x[0]) # Sort true labels by metric name - - for metric, true_value in sorted_true_label: - try: - true_value = float(true_value) # Attempt to convert the true value to float - except ValueError: - true_value = true_value.replace(",", "") # Clean the true value if conversion fails - - # Check if the true value is numeric and compare with the prediction - if isinstance(true_value, (int, float)) and ( - metric not in pred_dict or abs(pred_dict[metric] - true_value) > 1e-6 - ): - return False # Return False if the prediction is inaccurate - - # Check if the true value is a string and compare with the prediction - if isinstance(true_value, str) and ( - metric not in pred_dict or str(pred_dict[metric]).lower() != str(true_value).lower() - ): - return False # Return False if the string prediction does not match - - return True # Return True if all predictions are accurate - - -async def ask(question: str, system_prompt: str) -> str: - """ - Asynchronously sends a question to the LLM (Large Language Model) and retrieves the response. - - This function initializes an instance of the LLM and uses it to ask a question - along with a system prompt. The response from the LLM is awaited and returned. - - Args: - question (str): The question to be asked to the LLM. - system_prompt (str): A prompt that provides context or instructions to the LLM. - - Returns: - str: The response from the LLM based on the provided question and system prompt. - """ - from metagpt.llm import LLM # Importing the LLM class from the metagpt module - - llm = LLM() # Create an instance of the LLM - rsp = await llm.aask(question, system_msgs=[system_prompt]) # Await the response from the LLM - return rsp # Return the response - - -def parse_prediction(prediction: str) -> dict: - """ - Parses a prediction string into a dictionary of metric-value pairs. - - This function takes a formatted string containing metrics and their corresponding - values, separated by the "@" symbol. Each metric may be enclosed in brackets and - may include commas. The function processes the input to extract and clean the - metrics and their values, returning them in a structured dictionary format. - - Args: - prediction (str): A string representation of metrics and their values. - - Returns: - dict: A dictionary where each key is a metric name and each value is the - corresponding value, either as a float or a string. - """ - pred_dict = {} - for pred in prediction.split("@"): - if pred == "": - continue # Skip any empty segments resulting from the split - temp = re.split(r"[\[\]]", pred.strip()) # Split the string by brackets - temp = [s.replace(",", "") for s in temp] # Remove commas from the segments - parts = [s for s in temp if s] # Filter out any empty strings - metric = parts[0].strip().replace(",", "") # Extract and clean the metric name - value = parts[-1].replace(",", "").replace(":", "") # Extract and clean the value - - try: - value = float(value) # Attempt to convert the value to a float - except ValueError: - pass # If conversion fails, retain the value as a string - - pred_dict[metric] = value # Store the metric-value pair in the dictionary - return pred_dict - - -class DABench: - def __init__( - self, - questions_file: Path = Path(DABENCH_PATH) / "da-dev-questions.jsonl", - answers_file: Path = Path(DABENCH_PATH) / "da-dev-labels.jsonl", - template: str = "", - ): - """ - Initializes the DABench instance with questions and answers. - - This constructor loads questions and answers from specified JSONL files. - It also sets a template for formatting prompts. If no template is provided, - a default template is used. - - Args: - questions_file (Path): The path to the JSONL file containing questions. - answers_file (Path): The path to the JSONL file containing answers. - template (str): A string template for formatting prompts. - """ - - self.questions = { - int(line["id"]): line for line in load_jsonl(questions_file) - } # Load questions from the specified file - self.answers = { - int(line["id"]): line for line in load_jsonl(answers_file) - } # Load answers from the specified file - self.template = template if template else DABENCH # Set the template, defaulting if necessary - - def get_question(self, question_id: str) -> dict: - """ - Retrieve the question associated with the given ID. - - This method looks up a question by its unique identifier. If the question - is found, it returns the question data; otherwise, it returns a message - indicating that the question was not found. - - Args: - question_id (str): The unique identifier for the question. - - Returns: - dict: The question data if found, otherwise a "Question not found." message. - """ - return self.questions.get(question_id, "Question not found.") # Return the question or an error message - - def generate_formatted_prompt(self, question_id: str) -> str: - """ - Generate a formatted prompt for the specified question ID. - - This method retrieves the question data and formats it using the specified - template. The formatted prompt includes the question, constraints, format, - file name, and level, allowing for a structured output. - - Args: - question_id (str): The unique identifier for the question. - - Returns: - str: A formatted prompt string based on the question data. - """ - temp = self.get_question(question_id) # Retrieve the question data - return self.template.format( - question=temp["question"], - constraints=temp["constraints"], - format=temp["format"], - file_name=str(DABENCH_PATH) + "/da-dev-tables/" + temp["file_name"], - level=temp["level"], - ) # Format and return the prompt - - def get_answer(self, answer_id: str) -> list: - """ - Retrieve the answer list associated with the given ID. - - This method looks up an answer by its unique identifier. If the answer - is found, it returns the answer data; otherwise, it returns a message - indicating that the answer was not found. - - Args: - answer_id (str): The unique identifier for the answer. - - Returns: - list: The answer data if found, otherwise an "Answer not found." message. - """ - return self.answers.get(answer_id, "Answer not found.") # Return the answer or an error message - - @handle_exception(exception_msg="Error parsing cleaned prediction", default_return=(None, False)) - def parse_cleaned_prediction(self, cleaned_prediction: str, true_label: Any) -> Tuple[str, bool]: - """ - Parse the cleaned prediction and compare it with the true label. - - Args: - cleaned_prediction (str): The cleaned prediction string. - true_label (Any): The true label to compare against. - - Returns: - Tuple[str, bool]: A tuple containing the cleaned prediction and a boolean indicating - whether it matches the true label. - """ - if cleaned_prediction: # Ensure the cleaned prediction is not empty - pred_dict = parse_prediction(cleaned_prediction) # Parse the prediction - if pred_dict is not None and compare_predictions(pred_dict, true_label): - return cleaned_prediction, True # Return if the prediction matches the true label - return cleaned_prediction, False # Return the cleaned prediction with a False match - - @handle_exception(exception_msg="Error during async reformat", default_return=(None, False)) - def async_reformat_prediction(self, id: str, result: str) -> str: - """ - Reformat the prediction asynchronously and extract the answer. - - Args: - id (str): The identifier for the question. - result (str): The original prediction result. - - Returns: - str: The reformatted prediction or the original prediction if extraction fails. - """ - question = self.get_question(id)["question"] # Retrieve the question based on the ID - question_format = self.get_question(id)["format"] # Get the format of the question - prediction = asyncio.run(reformat(question, question_format, result)) # Asynchronously reformat the prediction - - # Attempt to extract the answer from the reformatted prediction - answer_part = prediction.split("Answer{{") if "Answer{{" in prediction else [] - if len(answer_part) > 1: - return answer_part[1].split("}}")[0].strip() # Return the extracted answer - - return prediction # If extraction fails, return the original prediction - - def eval(self, id: str, result: str) -> Tuple[str, bool]: - """ - Evaluate the prediction against the true label. - - Args: - id (str): The identifier for the question. - result (str): The original prediction result. - - Returns: - Tuple[str, bool]: A tuple containing the final prediction and a boolean indicating - whether it matches the true label. - """ - true_label = self.get_answer(id)["common_answers"] # Retrieve the true label for comparison - nest_asyncio.apply() # Apply nested asyncio to allow for async calls - result = json.loads(str(result).split("Current Plan")[1].split("## Current Task")[0])[-1]["result"].strip() - cleaned_prediction = result.replace("{", "").replace("}", "").replace("'", "") # Clean the prediction string - - # Use the decorated function to handle exceptions while parsing the cleaned prediction - parsed_result = self.parse_cleaned_prediction(cleaned_prediction, true_label) - if parsed_result[1]: # If the parsed prediction is valid - return parsed_result # Return the valid prediction - - # If the cleaned prediction is not valid, attempt to asynchronously reformat it - prediction = self.async_reformat_prediction(id, result) - - pred_dict = parse_prediction(prediction) # Parse the reformatted prediction - if pred_dict is not None and compare_predictions(pred_dict, true_label): - return prediction, True # Return if the reformatted prediction matches the true label - - return prediction, False # Return the final prediction with a False match - - @handle_exception(exception_msg="Error evaluating single prediction", default_return={}) - def single_eval(self, id: str, prediction: str) -> dict: - """ - Evaluate the prediction against the true label for a single question. - just using in eval_all - - Args: - id (str): The identifier for the question. - prediction (str): The prediction string to evaluate. - - Returns: - dict: A dictionary indicating the correctness of each metric. - """ - true_label = self.get_answer(id)["common_answers"] # Retrieve the true label for the question - prediction = prediction.replace("{", "").replace("}", "").replace("'", "") # Clean the prediction string - pred_dict = parse_prediction(prediction) # Parse the prediction into a dictionary - - # Initialize the correctness dictionary with False values for each metric - correctness = {metric: False for metric, _ in true_label} - - # Check each metric's prediction against the true label - for metric, true_value in true_label: - try: - true_value = float(true_value) # Attempt to convert the true value to float - except ValueError: - true_value = true_value.replace(",", "") # Handle non-numeric values - - if metric in pred_dict: - # Consider the prediction correct if it's within a small tolerance - if ( - isinstance(true_value, (int, float)) - and isinstance(pred_dict[metric], (int, float)) - and abs(pred_dict[metric] - true_value) < 1e-6 - ): - correctness[metric] = True # Mark as correct if within tolerance - - if isinstance(true_value, str) and ( - metric not in pred_dict or str(pred_dict[metric]).lower() != str(true_value).lower() - ): - correctness[metric] = True # Mark as correct for string comparison - - return correctness # Return the correctness dictionary - - def eval_all(self, id_list: list, predictions: list) -> dict: - """ - Evaluate all predictions and calculate accuracy rates. - - Args: - id_list (list): A list of question identifiers. - predictions (list): A list of prediction strings corresponding to the questions. - - Returns: - dict: A dictionary containing accuracy rates by question and sub-question. - """ - results = [] # Initialize a list to store results for each question - - # Evaluate each prediction against its corresponding question ID - for id, prediction in zip(id_list, predictions): - correct = self.single_eval(id, prediction) # Evaluate the single prediction - results.append({"id": id, "correctness": correct}) # Append the result to the list - - # Calculate the three accuracy rates based on the results - accuracy_by_question = evaluate_accuracy_by_question(results) - accuracy_by_sub_question = evaluate_accuracy_by_sub_question(results) - proportional_accuracy_by_sub_question = evaluate_accuracy_proportional_by_sub_question_adjusted(results) - - return { - "accuracy_by_question": accuracy_by_question, - "accuracy_by_sub_question": accuracy_by_sub_question, - "proportional_accuracy_by_sub_question": proportional_accuracy_by_sub_question, - } - - -if __name__ == "__main__": - bench = DABench() - id = 0 - prediction = "@mean_fare[34.65]" - logger.info(bench.eval(id, prediction)) - ids = [0, 5, 6] - predictions = [ - "@mean_fare[34.89]", - "@correlation_coefficient[0.21]", - "@mean_fare_child[31.09], @mean_fare_teenager[31.98], @mean_fare_adult[35.17], @mean_fare_elderly[43.47]", - ] - logger.info(bench.eval_all(ids, predictions)) diff --git a/examples/di/InfiAgent-DABench/README.md b/examples/di/InfiAgent-DABench/README.md deleted file mode 100644 index 74783c9d1e..0000000000 --- a/examples/di/InfiAgent-DABench/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# InfiAgent-DABench -This example is used to solve the InfiAgent-DABench using Data Interpreter (DI), and obtains 94.93% accuracy using gpt-4o. - -## Dataset download -``` -cd /examples/di/InfiAgent-DABench -git clone https://github.com/InfiAgent/InfiAgent.git -mv InfiAgent/examples/DA-Agent/data ./ -``` -## Special note: -When doing DABench testing, you need to set the ExecuteNbCode() init to: -``` -class ExecuteNbCode(Action): - """execute notebook code block, return result to llm, and display it.""" - - nb: NotebookNode - nb_client: NotebookClient - console: Console - interaction: str - timeout: int = 600 - - def __init__( - self, - nb=nbformat.v4.new_notebook(), - timeout=600, - ): - super().__init__( - nb=nbformat.v4.new_notebook(),#nb, - nb_client=NotebookClient(nb, timeout=timeout), - timeout=timeout, - console=Console(), - interaction=("ipython" if self.is_ipython() else "terminal"), - ) -``` -The path of ExecuteNbCode() is: -``` -metagpt.actions.di.execute_nb_code -``` -Instead of using the original nb initialization by default. -## How to run -``` -python run_InfiAgent-DABench_single.py --id x # run a task, x represents the id of the question you want to test -python run_InfiAgent-DABench_all.py # Run all tasks serially -python run_InfiAgent-DABench.py --k x # Run all tasks in parallel, x represents the number of parallel tasks at a time -``` \ No newline at end of file diff --git a/examples/di/InfiAgent-DABench/run_InfiAgent-DABench.py b/examples/di/InfiAgent-DABench/run_InfiAgent-DABench.py deleted file mode 100644 index 7e1fbad8b9..0000000000 --- a/examples/di/InfiAgent-DABench/run_InfiAgent-DABench.py +++ /dev/null @@ -1,77 +0,0 @@ -import asyncio -import json - -from DABench import DABench - -from metagpt.logs import logger -from metagpt.roles.di.data_interpreter import DataInterpreter - - -async def get_prediction(agent, requirement): - """Helper function to obtain a prediction from a new instance of the agent. - - This function runs the agent with the provided requirement and extracts the prediction - from the result. If an error occurs during processing, it logs the error and returns None. - - Args: - agent: The agent instance used to generate predictions. - requirement: The input requirement for which the prediction is to be made. - - Returns: - The predicted result if successful, otherwise None. - """ - try: - # Run the agent with the given requirement and await the result - result = await agent.run(requirement) - - # Parse the result to extract the prediction from the JSON response - prediction_json = json.loads(str(result).split("Current Plan")[1].split("## Current Task")[0]) - prediction = prediction_json[-1]["result"] # Extract the last result from the parsed JSON - - return prediction # Return the extracted prediction - except Exception as e: - # Log an error message if an exception occurs during processing - logger.info(f"Error processing requirement: {requirement}. Error: {e}") - return None # Return None in case of an error - - -async def evaluate_all(agent, k): - """Evaluate all tasks in DABench using the specified baseline agent. - - Tasks are divided into groups of size k and processed in parallel. - - Args: - agent: The baseline agent used for making predictions. - k (int): The number of tasks to process in each group concurrently. - """ - bench = DABench() # Create an instance of DABench to access its methods and data - id_list, predictions = [], [] # Initialize lists to store IDs and predictions - tasks = [] # Initialize a list to hold the tasks - - # Iterate over the answers in DABench to generate tasks - for key, value in bench.answers.items(): - requirement = bench.generate_formatted_prompt(key) # Generate a formatted prompt for the current key - tasks.append(get_prediction(agent, requirement)) # Append the prediction task to the tasks list - id_list.append(key) # Append the current key to the ID list - - # Process tasks in groups of size k and execute them concurrently - for i in range(0, len(tasks), k): - # Get the current group of tasks - current_group = tasks[i : i + k] - # Execute the current group of tasks in parallel - group_predictions = await asyncio.gather(*current_group) - # Filter out any None values from the predictions and extend the predictions list - predictions.extend(pred for pred in group_predictions if pred is not None) - - # Evaluate the results using all valid predictions and logger.info the evaluation - logger.info(bench.eval_all(id_list, predictions)) - - -def main(k=5): - """Main function to run the evaluation process.""" - agent = DataInterpreter() # Create an instance of the DataInterpreter agent - asyncio.run(evaluate_all(agent, k)) # Run the evaluate_all function asynchronously - - -if __name__ == "__main__": - main() diff --git a/examples/di/InfiAgent-DABench/run_InfiAgent-DABench_all.py b/examples/di/InfiAgent-DABench/run_InfiAgent-DABench_all.py deleted file mode 100644 index 5cd1ef4b01..0000000000 --- a/examples/di/InfiAgent-DABench/run_InfiAgent-DABench_all.py +++ /dev/null @@ -1,35 +0,0 @@ -import fire -import pandas as pd -from DABench import DABench - -from metagpt.logs import logger -from metagpt.roles.di.data_interpreter import DataInterpreter -from metagpt.utils.recovery_util import save_history - - -async def main(): - """Evaluate all""" - bench = DABench() - id_list, predictions, labels, is_true = [], [], [], [] - for key, value in bench.answers.items(): - id_list.append(key) - labels.append(str(bench.get_answer(key))) - try: - requirement = bench.generate_formatted_prompt(key) - di = DataInterpreter() - result = await di.run(requirement) - logger.info(result) - save_history(role=di) - temp_prediction, temp_istrue = bench.eval(key, str(result)) - is_true.append(str(temp_istrue)) - predictions.append(str(temp_prediction)) - except: - is_true.append(str(bench.eval(key, ""))) - predictions.append(str("")) - df = pd.DataFrame({"Label": labels, "Prediction": predictions, "T/F": is_true}) - df.to_excel("DABench_output.xlsx", index=False) - logger.info(bench.eval_all(id_list, predictions)) - - -if __name__ == "__main__": - fire.Fire(main) diff --git a/examples/di/InfiAgent-DABench/run_InfiAgent-DABench_single.py b/examples/di/InfiAgent-DABench/run_InfiAgent-DABench_single.py deleted file mode 100644 index 470f12fc8e..0000000000 --- a/examples/di/InfiAgent-DABench/run_InfiAgent-DABench_single.py +++ /dev/null @@ -1,22 +0,0 @@ -import fire -from DABench import DABench - -from metagpt.logs import logger -from metagpt.roles.di.data_interpreter import DataInterpreter -from metagpt.utils.recovery_util import save_history - - -async def main(id=0): - """Evaluate one task""" - bench = DABench() - requirement = bench.generate_formatted_prompt(id) - di = DataInterpreter() - result = await di.run(requirement) - logger.info(result) - save_history(role=di) - _, is_correct = bench.eval(id, str(result)) - logger.info(f"Prediction is {'correct' if is_correct else 'incorrect'}.") - - -if __name__ == "__main__": - fire.Fire(main) diff --git a/examples/di/README.md b/examples/di/README.md deleted file mode 100644 index 3dc9b7b1ba..0000000000 --- a/examples/di/README.md +++ /dev/null @@ -1,108 +0,0 @@ -# Data Interpreter (DI) - -## What is Data Interpreter -Data Interpreter is an agent who solves data-related problems through codes. It understands user requirements, makes plans, writes codes for execution, and uses tools if necessary. These capabilities enable it to tackle a wide range of scenarios, please check out the examples below. For overall design and technical details, please see our [paper](https://arxiv.org/abs/2402.18679). - -## Example List -- Data visualization -- Machine learning modeling -- Image background removal -- Solve math problems -- Receipt OCR -- Tool usage: web page imitation -- Tool usage: web crawling -- Tool usage: text2image -- 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. - -## 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/arxiv_reader.py b/examples/di/arxiv_reader.py deleted file mode 100644 index 206b2aa983..0000000000 --- a/examples/di/arxiv_reader.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -from metagpt.roles.di.data_interpreter import DataInterpreter -from metagpt.tools.libs.web_scraping import view_page_element_to_scrape - - -async def main(): - template = "https://arxiv.org/list/{tag}/pastweek?skip=0&show=300" - tags = ["cs.ai", "cs.cl", "cs.lg", "cs.se"] - urls = [template.format(tag=tag) for tag in tags] - prompt = f"""This is a collection of arxiv urls: '{urls}' . -Record each article, remove duplicates by title (they may have multiple tags), filter out papers related to -large language model / agent / llm, print top 100 and visualize the word count of the titles""" - di = DataInterpreter(react_mode="react", tools=[view_page_element_to_scrape.__name__]) - - await di.run(prompt) - - -if __name__ == "__main__": - import asyncio - - asyncio.run(main()) diff --git a/examples/di/atomization_capacity_plan.py b/examples/di/atomization_capacity_plan.py deleted file mode 100644 index eb86f9bd25..0000000000 --- a/examples/di/atomization_capacity_plan.py +++ /dev/null @@ -1,65 +0,0 @@ -import fire - -from metagpt.logs import logger -from metagpt.roles.di.team_leader import TeamLeader - - -async def main(): - tl = TeamLeader() - logger.info("\n=== Adding Initial Tasks ===") - tl.planner.plan.append_task( - task_id="T1", dependent_task_ids=[], instruction="Create Product Requirements Document (PRD)", assignee="Alice" - ) - tl.planner.plan.append_task( - task_id="T2", dependent_task_ids=["T1"], instruction="Design System Architecture", assignee="Bob" - ) - - # 1. Add Development Tasks - logger.info("\n=== Adding Development Tasks ===") - tl.planner.plan.append_task( - task_id="T3", dependent_task_ids=["T2"], instruction="Implement Core Function Modules", assignee="Alex" - ) - - tl.planner.plan.append_task( - task_id="T4", dependent_task_ids=["T2"], instruction="Implement User Interface", assignee="Alex" - ) - - # 2. Complete Some Tasks - logger.info("\n=== Execute and Complete Tasks ===") - logger.info(f"Current Task: {tl.planner.plan.current_task.instruction}") - tl.planner.plan.finish_current_task() # Complete T1 - - logger.info(f"Current Task: {tl.planner.plan.current_task.instruction}") - tl.planner.plan.finish_current_task() # Complete T2 - - # 3. Replace Tasks - logger.info("\n=== Replace Task ===") - tl.planner.plan.replace_task( - task_id="T3", - new_dependent_task_ids=["T2"], - new_instruction="Implement Core Function Modules (Add New Features)", - new_assignee="Senior_Developer", - ) - - # 4. Add Testing Tasks - logger.info("\n=== Add Testing Tasks ===") - tl.planner.plan.append_task( - task_id="T5", dependent_task_ids=["T3", "T4"], instruction="Execute Integration Tests", assignee="Edward" - ) - - # 5. Reset Task Demonstration - logger.info("\n=== Reset Task ===") - logger.info("Reset Task T3 (This will also reset T5 which depends on it)") - tl.planner.plan.reset_task("T3") - - # Display Final Status - logger.info("\n=== Final Status ===") - logger.info(f"Completed Tasks: {len([t for t in tl.planner.plan.tasks if t.is_finished])}") - logger.info(f"Current Task: {tl.planner.plan.current_task.instruction}") - logger.info("All Tasks:") - for task in tl.planner.plan.tasks: - logger.info(f"- {task.task_id}: {task.instruction} (Completed: {task.is_finished})") - - -if __name__ == "__main__": - fire.Fire(main) diff --git a/examples/di/automated_planning_of_tasks.py b/examples/di/automated_planning_of_tasks.py deleted file mode 100644 index d3b04ec1fe..0000000000 --- a/examples/di/automated_planning_of_tasks.py +++ /dev/null @@ -1,22 +0,0 @@ -import fire - -from metagpt.logs import logger -from metagpt.roles.di.team_leader import TeamLeader - - -async def main(): - # Create an instance of TeamLeader - tl = TeamLeader() - - # Update the plan with the goal to create a 2048 game - # This will auto generate tasks needed to accomplish the goal - await tl.planner.update_plan(goal="create a 2048 game.") - - # Iterate through all tasks in the plan - # Log each task's ID, instruction and completion status - for task in tl.planner.plan.tasks: - logger.info(f"- {task.task_id}: {task.instruction} (Completed: {task.is_finished})") - - -if __name__ == "__main__": - fire.Fire(main) diff --git a/examples/di/crawl_webpage.py b/examples/di/crawl_webpage.py deleted file mode 100644 index c4e1b6599c..0000000000 --- a/examples/di/crawl_webpage.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -@Date : 2024/01/24 15:11:27 -@Author : orange-crow -@File : crawl_webpage.py -""" - -from metagpt.roles.di.data_interpreter import DataInterpreter -from metagpt.tools.libs.web_scraping import view_page_element_to_scrape - -PAPER_LIST_REQ = """" -Get data from `paperlist` table in https://papercopilot.com/statistics/iclr-statistics/iclr-2024-statistics/, -and save it to a csv file. paper title must include `multiagent` or `large language model`. -**Notice: view the page element before writing scraping code** -""" - -ECOMMERCE_REQ = """ -Get products data from website https://scrapeme.live/shop/ and save it as a csv file. -The first page product name, price, product URL, and image URL must be saved in the csv. -**Notice: view the page element before writing scraping code** -""" - -NEWS_36KR_REQ = """从36kr创投平台https://pitchhub.36kr.com/financing-flash 所有初创企业融资的信息, **注意: 这是一个中文网站**; -下面是一个大致流程, 你会根据每一步的运行结果对当前计划中的任务做出适当调整: -1. 爬取并本地保存html结构; -2. 直接打印第7个*`快讯`*关键词后2000个字符的html内容, 作为*快讯的html内容示例*; -3. 反思*快讯的html内容示例*中的规律, 设计正则匹配表达式来获取*`快讯`*的标题、链接、时间; -4. 筛选最近3天的初创企业融资*`快讯`*, 以list[dict]形式打印前5个。 -5. 将全部结果存在本地csv中 -**Notice: view the page element before writing scraping code** -""" - - -async def main(): - di = DataInterpreter(tools=[view_page_element_to_scrape.__name__]) - - await di.run(ECOMMERCE_REQ) - - -if __name__ == "__main__": - import asyncio - - asyncio.run(main()) diff --git a/examples/di/custom_tool.py b/examples/di/custom_tool.py deleted file mode 100644 index cbe7380c71..0000000000 --- a/examples/di/custom_tool.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/3/22 10:54 -@Author : alexanderwu -@File : custom_tool.py -""" - -from metagpt.roles.di.data_interpreter import DataInterpreter -from metagpt.tools.tool_registry import register_tool - - -@register_tool() -def magic_function(arg1: str, arg2: int) -> dict: - """ - The magic function that does something. - - Args: - arg1 (str): ... - arg2 (int): ... - - Returns: - dict: ... - """ - return {"arg1": arg1 * 3, "arg2": arg2 * 5} - - -async def main(): - di = DataInterpreter(tools=["magic_function"]) - await di.run("Just call the magic function with arg1 'A' and arg2 2. Tell me the result.") - - -if __name__ == "__main__": - import asyncio - - asyncio.run(main()) diff --git a/examples/di/data_analyst_write_code.py b/examples/di/data_analyst_write_code.py deleted file mode 100644 index 30afa410cb..0000000000 --- a/examples/di/data_analyst_write_code.py +++ /dev/null @@ -1,40 +0,0 @@ -import fire - -from metagpt.logs import logger -from metagpt.roles.di.data_analyst import DataAnalyst - - -async def main(): - # Create an instance of DataAnalyst role - analyst = DataAnalyst() - - # Set the main goal for the planner - constructing a 2D array - analyst.planner.plan.goal = "construct a two-dimensional array" - - # Add a specific task to the planner with detailed parameters: - # - task_id: Unique identifier for the task - # - dependent_task_ids: List of tasks that need to be completed before this one (empty in this case) - # - instruction: Description of what needs to be done - # - assignee: Who will execute the task (David) - # - task_type: Category of the task (DATA_ANALYSIS) - analyst.planner.plan.append_task( - task_id="1", - dependent_task_ids=[], - instruction="construct a two-dimensional array", - assignee="David", - task_type="DATA_ANALYSIS", - ) - - # Execute the code generation and execution for creating a 2D array - # The write_and_exec_code method will: - # 1. Generate the necessary code for creating a 2D array - # 2. Execute the generated code - # 3. Return the result - result = await analyst.write_and_exec_code("construct a two-dimensional array") - - # Log the result of the code execution - logger.info(result) - - -if __name__ == "__main__": - fire.Fire(main) diff --git a/examples/di/data_visualization.py b/examples/di/data_visualization.py deleted file mode 100644 index 184e04f266..0000000000 --- a/examples/di/data_visualization.py +++ /dev/null @@ -1,17 +0,0 @@ -import asyncio - -from metagpt.logs import logger -from metagpt.roles.di.data_interpreter import DataInterpreter -from metagpt.utils.recovery_util import save_history - - -async def main(requirement: str = ""): - di = DataInterpreter() - rsp = await di.run(requirement) - logger.info(rsp) - save_history(role=di) - - -if __name__ == "__main__": - requirement = "Run data analysis on sklearn Iris dataset, include a plot" - asyncio.run(main(requirement)) diff --git a/examples/di/email_summary.py b/examples/di/email_summary.py deleted file mode 100644 index 7c112767c6..0000000000 --- a/examples/di/email_summary.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- encoding: utf-8 -*- -""" -@Date : 2024/02/07 -@Author : Tuo Zhou -@File : email_summary.py -""" -import os - -from metagpt.roles.di.data_interpreter import DataInterpreter - - -async def main(): - email_account = "your_email_account" - # your password will stay only on your device and not go to LLM api - os.environ["email_password"] = "your_email_password" - - ### Prompt for automatic email reply, uncomment to try this too ### - # prompt = f"""I will give you your Outlook email account ({email_account}) and password (email_password item in the environment variable). You need to find the latest email in my inbox with the sender's suffix @gmail.com and reply "Thank you! I have received your email~""""" - - ### Prompt for automatic email summary ### - prompt = f"""I will give you your Outlook email account ({email_account}) and password (email_password item in the environment variable). - Firstly, Please help me fetch the latest 5 senders and full letter contents. - Then, summarize each of the 5 emails into one sentence (you can do this by yourself, no need to import other models to do this) and output them in a markdown format.""" - - di = DataInterpreter() - - await di.run(prompt) - - -if __name__ == "__main__": - import asyncio - - asyncio.run(main()) diff --git a/examples/di/fix_github_issue.py b/examples/di/fix_github_issue.py deleted file mode 100644 index 4e26a375d8..0000000000 --- a/examples/di/fix_github_issue.py +++ /dev/null @@ -1,32 +0,0 @@ -"""This example is from a real issue from MetaGPT: https://github.com/geekan/MetaGPT/issues/1067 with corresponding bugfix as https://github.com/geekan/MetaGPT/pull/1069 -We demonstrate that DataInterpreter has the capability to fix such issues. -Prerequisite: You need to manually add the bug back to your local file metagpt/utils/repair_llm_raw_output.py to test DataInterpreter's debugging ability. For detail, please check the issue and PR link above. -""" - -import asyncio - -from metagpt.roles.di.data_interpreter import DataInterpreter - -REQ = """ -# Requirement -Below is a github issue, solve it. Use Editor to search for the function, understand it, and modify the relevant code. -Write a new test file test.py with Editor and use Terminal to python the test file to ensure you have fixed the issue. -When writing test.py, you should import the function from the file you modified and test it with the given input. -Notice: Don't write all codes in one response, each time, just write code for one step. - -# Issue ->> s = "-1" ->> print(extract_state_value_from_output(s)) ->> 1 -The extract_state_value_from_output function will process -1 into 1, -resulted in an infinite loop for the react mode. -""" - - -async def main(): - di = DataInterpreter(tools=["Terminal", "Editor"], react_mode="react") - await di.run(REQ) - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/examples/di/imitate_webpage.py b/examples/di/imitate_webpage.py deleted file mode 100644 index d181e0dfc5..0000000000 --- a/examples/di/imitate_webpage.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/01/15 -@Author : mannaandpoem -@File : imitate_webpage.py -""" -from metagpt.roles.di.data_interpreter import DataInterpreter - - -async def main(): - web_url = "https://pytorch.org/" - prompt = f"""This is a URL of webpage: '{web_url}' . -Firstly, open the page and take a screenshot of the page. -Secondly, convert the image to a webpage including HTML, CSS and JS in one go. -Note: All required dependencies and environments have been fully installed and configured.""" - di = DataInterpreter(tools=["GPTvGenerator", "Browser"]) - - await di.run(prompt) - - -if __name__ == "__main__": - import asyncio - - asyncio.run(main()) diff --git a/examples/di/interacting_with_human.py b/examples/di/interacting_with_human.py deleted file mode 100644 index a02f7c3bc2..0000000000 --- a/examples/di/interacting_with_human.py +++ /dev/null @@ -1,38 +0,0 @@ -import fire - -from metagpt.environment.mgx.mgx_env import MGXEnv -from metagpt.logs import logger -from metagpt.roles.di.team_leader import TeamLeader -from metagpt.schema import Message - - -async def main(): - # Initialize the MetaGPT environment - env = MGXEnv() - # Add a TeamLeader role to the environment - env.add_roles([TeamLeader()]) - - # Get input from human user about what they want to do - human_rsp = await env.ask_human("What do you want to do?") - - # Log the human response for tracking - logger.info(human_rsp) - # Create and publish a message with the human response in the environment - env.publish_message(Message(content=human_rsp, role="user")) - - # Get the TeamLeader role instance named 'Mike' - tl = env.get_role("Mike") - # Execute the TeamLeader's tasks - await tl.run() - - # Log information about each task in the TeamLeader's plan - for task in tl.planner.plan.tasks: - logger.info(f"- {task.task_id}: {task.instruction} (Completed: {task.is_finished})") - - # Send an empty response back to the human and log it - resp = await env.reply_to_human("") - logger.info(resp) - - -if __name__ == "__main__": - fire.Fire(main) diff --git a/examples/di/machine_learning.py b/examples/di/machine_learning.py deleted file mode 100644 index c674e66e87..0000000000 --- a/examples/di/machine_learning.py +++ /dev/null @@ -1,23 +0,0 @@ -import fire - -from metagpt.roles.di.data_interpreter import DataInterpreter - -WINE_REQ = "Run 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." - -DATA_DIR = "path/to/your/data" -# sales_forecast data from https://www.kaggle.com/datasets/aslanahmedov/walmart-sales-forecast/data -SALES_FORECAST_REQ = f"""Train a model to predict sales for each department in every store (split the last 40 weeks records as validation dataset, the others is train dataset), include plot total sales trends, print metric and plot scatter plots of -groud truth and predictions on validation data. Dataset is {DATA_DIR}/train.csv, the metric is weighted mean absolute error (WMAE) for test data. Notice: *print* key variables to get more information for next task step. -""" - -REQUIREMENTS = {"wine": WINE_REQ, "sales_forecast": SALES_FORECAST_REQ} - - -async def main(use_case: str = "wine"): - mi = DataInterpreter() - requirement = REQUIREMENTS[use_case] - await mi.run(requirement) - - -if __name__ == "__main__": - fire.Fire(main) diff --git a/examples/di/machine_learning_with_tools.py b/examples/di/machine_learning_with_tools.py deleted file mode 100644 index 291e734c89..0000000000 --- a/examples/di/machine_learning_with_tools.py +++ /dev/null @@ -1,16 +0,0 @@ -import asyncio - -from metagpt.roles.di.data_interpreter import DataInterpreter - - -async def main(requirement: str): - role = DataInterpreter(use_reflection=True, tools=[""]) - await role.run(requirement) - - -if __name__ == "__main__": - data_path = "your/path/to/titanic" - train_path = f"{data_path}/split_train.csv" - eval_path = f"{data_path}/split_eval.csv" - requirement = f"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: '{train_path}', eval data path: '{eval_path}'." - asyncio.run(main(requirement)) diff --git a/examples/di/ocr_receipt.py b/examples/di/ocr_receipt.py deleted file mode 100644 index bf32f5722c..0000000000 --- a/examples/di/ocr_receipt.py +++ /dev/null @@ -1,21 +0,0 @@ -from metagpt.const import EXAMPLE_DATA_PATH -from metagpt.roles.di.data_interpreter import DataInterpreter - - -async def main(): - # Notice: pip install metagpt[ocr] before using this example - image_path = EXAMPLE_DATA_PATH / "di/receipt_shopping.jpg" - language = "English" - requirement = f"""This is a {language} receipt image. - Your goal is to perform OCR on images using PaddleOCR, output text content from the OCR results and discard - coordinates and confidence levels, then recognize the total amount from ocr text content, and finally save as csv table. - Image path: {image_path}. - NOTE: The environments for Paddle and PaddleOCR are all ready and has been fully installed.""" - di = DataInterpreter(react_mode="react") - await di.run(requirement) - - -if __name__ == "__main__": - import asyncio - - asyncio.run(main()) diff --git a/examples/di/requirements_prompt.py b/examples/di/requirements_prompt.py deleted file mode 100644 index 34102c134d..0000000000 --- a/examples/di/requirements_prompt.py +++ /dev/null @@ -1,67 +0,0 @@ -# InfiAgent-DABench requirements -DABENCH = "You are required to {question} from a CSV file named {file_name}. **Constraints**: Ensure that {constraints}, which must be strictly followed throughout the task. The output format should be {format}. This task is categorized as {level}." -# 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/rm_image_background.py b/examples/di/rm_image_background.py deleted file mode 100644 index e287782417..0000000000 --- a/examples/di/rm_image_background.py +++ /dev/null @@ -1,16 +0,0 @@ -import asyncio - -from metagpt.const import DEFAULT_WORKSPACE_ROOT, EXAMPLE_DATA_PATH -from metagpt.roles.di.data_interpreter import DataInterpreter - - -async def main(requirement: str = ""): - di = DataInterpreter() - await di.run(requirement) - - -if __name__ == "__main__": - image_path = EXAMPLE_DATA_PATH / "di/dog.jpg" - save_path = DEFAULT_WORKSPACE_ROOT / "image_rm_bg.png" - requirement = f"This is a image, you need to use python toolkit rembg to remove the background of the image and save the result. image path:{image_path}; save path:{save_path}." - asyncio.run(main(requirement)) diff --git a/examples/di/run_flask.py b/examples/di/run_flask.py deleted file mode 100644 index b57f763f3a..0000000000 --- a/examples/di/run_flask.py +++ /dev/null @@ -1,19 +0,0 @@ -import asyncio - -from metagpt.roles.di.data_interpreter import DataInterpreter - -USE_GOT_REPO_REQ = """ -Write a service using Flask, create a conda environment and run it, and call the service's interface for validation. -Notice: Don't write all codes in one response, each time, just write code for one step. -""" -# If you have created a conda environment, you can say: -# I have created the conda environment '{env_name}', please use this environment to execute. - - -async def main(): - di = DataInterpreter(tools=["Terminal", "Editor"]) - await di.run(USE_GOT_REPO_REQ) - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/examples/di/run_ml_benchmark.py b/examples/di/run_ml_benchmark.py deleted file mode 100644 index 327ab986ec..0000000000 --- a/examples/di/run_ml_benchmark.py +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index abe10015e2..0000000000 --- a/examples/di/run_open_ended_tasks.py +++ /dev/null @@ -1,22 +0,0 @@ -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/di/sd_tool_usage.py b/examples/di/sd_tool_usage.py deleted file mode 100644 index b373a6251d..0000000000 --- a/examples/di/sd_tool_usage.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 1/11/2024 7:06 PM -# @Author : stellahong (stellahong@fuzhi.ai) -# @Desc : -import asyncio - -from metagpt.roles.di.data_interpreter import DataInterpreter - - -async def main(requirement: str = ""): - di = DataInterpreter(tools=["SDEngine"]) - await di.run(requirement) - - -if __name__ == "__main__": - sd_url = "http://your.sd.service.ip:port" - requirement = ( - f"I want to generate an image of a beautiful girl using the stable diffusion text2image tool, sd_url={sd_url}" - ) - - asyncio.run(main(requirement)) diff --git a/examples/di/software_company.py b/examples/di/software_company.py deleted file mode 100644 index bdb4d76d4e..0000000000 --- a/examples/di/software_company.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import fire - -from metagpt.roles.di.data_interpreter import DataInterpreter - - -async def main(): - prompt = """ -This is a software requirement: -```text -write a snake game -``` ---- -1. Writes a PRD based on software requirements. -2. Writes a design to the project repository, based on the PRD of the project. -3. Writes a project plan to the project repository, based on the design of the project. -4. Writes codes to the project repository, based on the project plan of the project. -5. Run QA test on the project repository. -6. Stage and commit changes for the project repository using Git. -Note: All required dependencies and environments have been fully installed and configured. -""" - di = DataInterpreter( - tools=[ - "WritePRD", - "WriteDesign", - "WritePlan", - "WriteCode", - "RunCode", - "DebugError", - # "git_archive", - ] - ) - - await di.run(prompt) - - -if __name__ == "__main__": - fire.Fire(main) diff --git a/examples/di/solve_math_problems.py b/examples/di/solve_math_problems.py deleted file mode 100644 index f7fd3d4e39..0000000000 --- a/examples/di/solve_math_problems.py +++ /dev/null @@ -1,14 +0,0 @@ -import asyncio - -from metagpt.roles.di.data_interpreter import DataInterpreter - - -async def main(requirement: str = ""): - di = DataInterpreter() - await di.run(requirement) - - -if __name__ == "__main__": - requirement = "Solve this math problem: The greatest common divisor of positive integers m and n is 6. The least common multiple of m and n is 126. What is the least possible value of m + n?" - # answer: 60 (m = 18, n = 42) - asyncio.run(main(requirement)) diff --git a/examples/di/use_browser.py b/examples/di/use_browser.py deleted file mode 100644 index a3a079ccc6..0000000000 --- a/examples/di/use_browser.py +++ /dev/null @@ -1,29 +0,0 @@ -import asyncio - -from metagpt.roles.di.data_interpreter import DataInterpreter - -MG_LLM_CONFIG_REQ = """ -This is a link to the doc site of MetaGPT project: https://docs.deepwisdom.ai/main/en/ -Check where you can go to on the site and try to find out the list of LLM APIs supported by MetaGPT. -Don't write all codes in one response, each time, just write code for one step. -""" - -PAPER_LIST_REQ = """" -At https://papercopilot.com/statistics/iclr-statistics/iclr-2024-statistics/, -find the first paper whose title includes `multiagent`, open it and summarize its abstract. -Don't write all codes in one response, each time, just write code for one step. -""" - -DESCRIBE_GITHUB_ISSUE_REQ = """ -Visit https://github.com/geekan/MetaGPT, navigate to Issues page, open the first issue related to DataInterpreter, then summarize what the issue is in one sentence. -Don't write all codes in one response, each time, just write code for one step. -""" - - -async def main(): - di = DataInterpreter(tools=["Browser"], react_mode="react") - await di.run(MG_LLM_CONFIG_REQ) - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/examples/di/use_github_repo.py b/examples/di/use_github_repo.py deleted file mode 100644 index 7327f4597b..0000000000 --- a/examples/di/use_github_repo.py +++ /dev/null @@ -1,19 +0,0 @@ -import asyncio - -from metagpt.roles.di.data_interpreter import DataInterpreter - -USE_GOT_REPO_REQ = """ -This is a link to the GOT github repo: https://github.com/spcl/graph-of-thoughts.git. -Clone it, read the README to understand the usage, install it, and finally run the quick start example. -**Note the config for LLM is at `config/config_got.json`, it's outside the repo path, before using it, you need to copy it into graph-of-thoughts. -** Don't write all codes in one response, each time, just write code for one step. -""" - - -async def main(): - di = DataInterpreter(tools=["Terminal"]) - await di.run(USE_GOT_REPO_REQ) - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/examples/mgx_write_project_framework.py b/examples/mgx_write_project_framework.py index b43d97b850..e8b8a1187d 100644 --- a/examples/mgx_write_project_framework.py +++ b/examples/mgx_write_project_framework.py @@ -23,7 +23,7 @@ from metagpt.environment.mgx.mgx_env import MGXEnv from metagpt.logs import logger from metagpt.roles import Architect -from metagpt.roles.di.team_leader import TeamLeader +from metagpt.roles.team_leader import TeamLeader from metagpt.schema import AIMessage, UserMessage from metagpt.strategy.experience_retriever import TRDToolExpRetriever from metagpt.utils.common import aread diff --git a/examples/sela/README.md b/examples/sela/README.md deleted file mode 100644 index 6d16b9dd73..0000000000 --- a/examples/sela/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# SELA: Tree-Search Enhanced LLM Agents for Automated Machine Learning - - -Official implementation for paper [SELA: Tree-Search Enhanced LLM Agents for Automated Machine Learning](https://arxiv.org/abs/2410.17238). - - -SELA is an innovative system that enhances Automated Machine Learning (AutoML) by integrating Monte Carlo Tree Search (MCTS) with LLM-based agents. Traditional AutoML methods often generate low-diversity and suboptimal code, limiting their effectiveness in model selection and ensembling. SELA addresses these challenges by representing pipeline configurations as trees, enabling agents to intelligently explore the solution space and iteratively refine their strategies based on experimental feedback. - -For more details, please visit the [SELA path](../../metagpt/ext/sela/README.md). diff --git a/examples/spo/README.md b/examples/spo/README.md deleted file mode 100644 index ac7e6bdb86..0000000000 --- a/examples/spo/README.md +++ /dev/null @@ -1,192 +0,0 @@ -# SPO | Self-Supervised Prompt Optimization - -[![Paper](https://img.shields.io/badge/Paper-arXiv-red)](https://arxiv.org/pdf/2502.06855) -[![Demo](https://img.shields.io/badge/Demo-Hugging%20Face-yellow)](https://huggingface.co/spaces/XiangJinYu/SPO) -[![ModelScope](https://img.shields.io/badge/Demo-ModelScope-blue)](https://modelscope.cn/studios/AI-ModelScope/SPO) - -An automated prompt engineering tool for Large Language Models (LLMs), designed for universal domain adaptation. - -A next-generation prompt engineering system implementing **Self-Supervised Prompt Optimization (SPO)**. Achieves state-of-the-art performance with 17.8-90.9× higher cost efficiency than conventional methods. 🚀 - -

-Framework of SPO -

- -## ✨ Core Advantages - -- 💸 **Ultra-Low Cost** - _$0.15 per task optimization_ -- 🏷️ **Zero Supervision** - _No ground truth/human feedback required_ -- ⚡ **Universal Adaptation** - _Closed & open-ended tasks supported_ -- 🔄 **Self-Evolving** - _Auto-optimization via LLM-as-judge mechanism_ - -## 🔗 Quick Links - -- [📝 Read our paper](https://arxiv.org/pdf/2502.06855) -- [🤗 Try our Hugging Face demo](https://huggingface.co/spaces/XiangJinYu/SPO) -- [🔮 Try our ModelScope demo](https://modelscope.cn/studios/AI-ModelScope/SPO) - - -## 📊 Experiment - -### Closed Tasks -

-SPO closed task table -SPO closed task figure -

- -*SPO demonstrates superior cost efficiency, requiring only 1.1% to 5.6% of the cost of state-of-the-art methods while maintaining competitive performance.* - -### Open-ended Tasks -

-Open-ended task figure -

- -*SPO significantly improves model performance across all model configurations in open-ended tasks.* - -## 🚀 Quick Start - -### 1. Configure Your API Key ⚙️ - -Configure LLM parameters in `config/config2.yaml` (see `examples/spo/config2.example.yaml` for reference) -### 2. Define Your Iteration template 📝 - -Create a Iteration template file `metagpt/ext/spo/settings/task_name.yaml`: -```yaml -prompt: | - Please solve the following problem. - -requirements: | - ... - -count: None - -qa: - - question: | - ... - answer: | - ... - - - question: | - ... - answer: | - ... -``` - -Notes: -- `prompt`: Initial prompt for iteration -- `requirements`: Desired effects/outcomes (e.g., generate more thinking, use more humorous language) -- `count`: Target word count for the generated prompt (e.g., 50). Set to None for no limit -- `faq`: QA pairs used for iteration, can include appropriate number of pairs (typically 3) - - `question`: Questions from the dataset used for iteration - - `answer`: Corresponding answers. Can contain desired thinking patterns or responses instead of actual answers, or can be left empty. See `metagpt/ext/spo/settings/Navigate.yaml` for reference - -### 3. Implement the PromptOptimizer 🔧 - -You have three ways to run the PromptOptimizer: - -#### Option 1: Python Script - -```python -from metagpt.ext.spo.components.optimizer import PromptOptimizer -from metagpt.ext.spo.utils.llm_client import SPO_LLM - -if __name__ == "__main__": - # Initialize LLM settings - SPO_LLM.initialize( - optimize_kwargs={"model": "claude-3-5-sonnet-20240620", "temperature": 0.7}, - evaluate_kwargs={"model": "gpt-4o-mini", "temperature": 0.3}, - execute_kwargs={"model": "gpt-4o-mini", "temperature": 0} - ) - - # Create and run optimizer - optimizer = PromptOptimizer( - optimized_path="workspace", # Output directory - initial_round=1, # Starting round - max_rounds=10, # Maximum optimization rounds - template="Poem.yaml", # Template file - name="Poem", # Project name - ) - - optimizer.optimize() -``` - -#### Option 2: Command Line Interface - -```bash -python -m examples.spo.optimize -``` - -Available command line options: -``` ---opt-model Model for optimization (default: claude-3-5-sonnet-20240620) ---opt-temp Temperature for optimization (default: 0.7) ---eval-model Model for evaluation (default: gpt-4o-mini) ---eval-temp Temperature for evaluation (default: 0.3) ---exec-model Model for execution (default: gpt-4o-mini) ---exec-temp Temperature for execution (default: 0) ---workspace Output directory path (default: workspace) ---initial-round Initial round number (default: 1) ---max-rounds Maximum number of rounds (default: 10) ---template Template file name (default: Poem.yaml) ---name Project name (default: Poem) -``` - -For help: -```bash -python -m examples.spo.optimize --help -``` - -#### Option 3: Streamlit Web Interface - -For a more user-friendly experience, you can use the Streamlit web interface to configure and run the optimizer. - -First, install Streamlit: -```bash -pip install "streamlit~=1.42.0" -``` - -Then run the web interface: -```bash -python -m streamlit run metagpt/ext/spo/app.py -``` - -### 4. View Results -``` -workspace - └── Project_name - └── prompts - ├── results.json - ├── round_1 - │ ├── answers.txt - │ └── prompt.txt - ├── round_2 - │ ├── answers.txt - │ └── prompt.txt - ├── round_3 - │ ├── answers.txt - │ └── prompt.txt - ├── ... - └── round_n - ├── answers.txt - └── prompt.txt -``` - -- `results.json`: Stores whether each iteration round was judged successful and other related information -- `prompt.txt`: The optimized prompt for the corresponding round -- `answers.txt`: The output results generated using the prompt for the corresponding round - -## Citation - -If you use SPO in your research, please cite our paper: - -``` -@misc{xiang2025spo, - title={Self-Supervised Prompt Optimization}, - author={Jinyu Xiang and Jiayi Zhang and Zhaoyang Yu and Fengwei Teng and Jinhao Tu and Xinbing Liang and Sirui Hong and Chenglin Wu and Yuyu Luo}, - year={2025}, - eprint={2502.06855}, - archivePrefix={arXiv}, - primaryClass={cs.CL}, - url={https://arxiv.org/abs/2502.06855}, -} -``` \ No newline at end of file diff --git a/examples/spo/config2.example.yaml b/examples/spo/config2.example.yaml deleted file mode 100644 index a19d6e815b..0000000000 --- a/examples/spo/config2.example.yaml +++ /dev/null @@ -1,25 +0,0 @@ -llm: - api_type: "openai" - model: "gpt-4o-mini" - base_url: "" - api_key: "" - temperature: 0 -models: - "gpt-4o": # model: "gpt-4-turbo" # or gpt-3.5-turbo - api_type: "openai" # or azure / ollama / groq etc. - base_url: "" - api_key: "" - temperature: 0 - "deepseek-chat": # api_type: "openai" # or azure / ollama / groq etc. - api_type: "openai" # or azure / ollama / groq etc. - base_url: "" - api_key: "" - temperature: 0 - "gpt-4o-mini": # api_type: "openai" # or azure / ollama / groq etc. - api_type: "openai" # or azure / ollama / groq etc. - base_url: "" - api_key: "" - temperature: 0 - -# Other models - diff --git a/examples/spo/optimize.py b/examples/spo/optimize.py deleted file mode 100644 index 0f11f043ab..0000000000 --- a/examples/spo/optimize.py +++ /dev/null @@ -1,49 +0,0 @@ -import argparse - -from metagpt.ext.spo.components.optimizer import PromptOptimizer -from metagpt.ext.spo.utils.llm_client import SPO_LLM - - -def parse_args(): - parser = argparse.ArgumentParser(description="SPO PromptOptimizer CLI") - - # LLM parameter - parser.add_argument("--opt-model", type=str, default="claude-3-5-sonnet-20240620", help="Model for optimization") - parser.add_argument("--opt-temp", type=float, default=0.7, help="Temperature for optimization") - parser.add_argument("--eval-model", type=str, default="gpt-4o-mini", help="Model for evaluation") - parser.add_argument("--eval-temp", type=float, default=0.3, help="Temperature for evaluation") - parser.add_argument("--exec-model", type=str, default="gpt-4o-mini", help="Model for execution") - parser.add_argument("--exec-temp", type=float, default=0, help="Temperature for execution") - - # PromptOptimizer parameter - parser.add_argument("--workspace", type=str, default="workspace", help="Path for optimized output") - parser.add_argument("--initial-round", type=int, default=1, help="Initial round number") - parser.add_argument("--max-rounds", type=int, default=10, help="Maximum number of rounds") - parser.add_argument("--template", type=str, default="Poem.yaml", help="Template file name") - parser.add_argument("--name", type=str, default="Poem", help="Project name") - - return parser.parse_args() - - -def main(): - args = parse_args() - - SPO_LLM.initialize( - optimize_kwargs={"model": args.opt_model, "temperature": args.opt_temp}, - evaluate_kwargs={"model": args.eval_model, "temperature": args.eval_temp}, - execute_kwargs={"model": args.exec_model, "temperature": args.exec_temp}, - ) - - optimizer = PromptOptimizer( - optimized_path=args.workspace, - initial_round=args.initial_round, - max_rounds=args.max_rounds, - template=args.template, - name=args.name, - ) - - optimizer.optimize() - - -if __name__ == "__main__": - main() diff --git a/examples/stanford_town/requirements.txt b/examples/stanford_town/requirements.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/examples/stanford_town/run_st_game.py b/examples/stanford_town/run_st_game.py deleted file mode 100644 index 1a2d50f21e..0000000000 --- a/examples/stanford_town/run_st_game.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/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 deleted file mode 100644 index 9628208614..0000000000 --- a/examples/stanford_town/storage/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# 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 deleted file mode 100644 index 6eaa46c510..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/environment/0.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "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 deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/embeddings.json +++ /dev/null @@ -1 +0,0 @@ -{} \ 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 deleted file mode 100644 index 6dc73c1c85..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/kw_strength.json +++ /dev/null @@ -1,2 +0,0 @@ -{"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 deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/associative_memory/nodes.json +++ /dev/null @@ -1 +0,0 @@ -{} \ 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 deleted file mode 100644 index dbed4b705e..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/scratch.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "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 deleted file mode 100644 index f881579508..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Isabella Rodriguez/bootstrap_memory/spatial_memory.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "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 deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/embeddings.json +++ /dev/null @@ -1 +0,0 @@ -{} \ 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 deleted file mode 100644 index 6dc73c1c85..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/kw_strength.json +++ /dev/null @@ -1,2 +0,0 @@ -{"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 deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/associative_memory/nodes.json +++ /dev/null @@ -1 +0,0 @@ -{} \ 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 deleted file mode 100644 index 7b0ce7d722..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/scratch.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "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 deleted file mode 100644 index 4f41686772..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Klaus Mueller/bootstrap_memory/spatial_memory.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "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 deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/embeddings.json +++ /dev/null @@ -1 +0,0 @@ -{} \ 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 deleted file mode 100644 index 6dc73c1c85..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/kw_strength.json +++ /dev/null @@ -1,2 +0,0 @@ -{"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 deleted file mode 100644 index 9e26dfeeb6..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/associative_memory/nodes.json +++ /dev/null @@ -1 +0,0 @@ -{} \ 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 deleted file mode 100644 index c3a304952d..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/scratch.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "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 deleted file mode 100644 index 0a58212bda..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/personas/Maria Lopez/bootstrap_memory/spatial_memory.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "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 deleted file mode 100644 index 1e81ec12d2..0000000000 --- a/examples/stanford_town/storage/base_the_ville_isabella_maria_klaus/reverie/meta.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "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/use_off_the_shelf_agent.py b/examples/use_off_the_shelf_agent.py index 34d605f1a1..52e78d19a0 100644 --- a/examples/use_off_the_shelf_agent.py +++ b/examples/use_off_the_shelf_agent.py @@ -7,8 +7,8 @@ from metagpt.environment.mgx.mgx_env import MGXEnv from metagpt.logs import logger -from metagpt.roles.di.team_leader import TeamLeader from metagpt.roles.product_manager import ProductManager +from metagpt.roles.team_leader import TeamLeader from metagpt.schema import Message diff --git a/examples/werewolf_game/evals/eval.py b/examples/werewolf_game/evals/eval.py deleted file mode 100644 index c890773de0..0000000000 --- a/examples/werewolf_game/evals/eval.py +++ /dev/null @@ -1,218 +0,0 @@ -""" -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 deleted file mode 100644 index 490e7126fa..0000000000 --- a/examples/werewolf_game/evals/utils.py +++ /dev/null @@ -1,134 +0,0 @@ -""" -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 deleted file mode 100644 index fe31c6c559..0000000000 --- a/examples/werewolf_game/start_game.py +++ /dev/null @@ -1,68 +0,0 @@ -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/examples/write_design.py b/examples/write_design.py index fbbe9e1f05..c356029acd 100644 --- a/examples/write_design.py +++ b/examples/write_design.py @@ -3,7 +3,7 @@ from metagpt.environment.mgx.mgx_env import MGXEnv from metagpt.logs import logger from metagpt.roles.architect import Architect -from metagpt.roles.di.team_leader import TeamLeader +from metagpt.roles.team_leader import TeamLeader from metagpt.schema import Message diff --git a/examples/write_game_code.py b/examples/write_game_code.py index 86412a0931..c629a5df2e 100644 --- a/examples/write_game_code.py +++ b/examples/write_game_code.py @@ -2,8 +2,8 @@ import time from metagpt.environment.mgx.mgx_env import MGXEnv -from metagpt.roles.di.engineer2 import Engineer2 -from metagpt.roles.di.team_leader import TeamLeader +from metagpt.roles.engineer2 import Engineer2 +from metagpt.roles.team_leader import TeamLeader from metagpt.schema import Message diff --git a/metagpt/__init__.py b/metagpt/__init__.py index 71ddd1affc..f3ec434620 100644 --- a/metagpt/__init__.py +++ b/metagpt/__init__.py @@ -5,3 +5,7 @@ # @File : __init__.py from metagpt import _compat as _ # noqa: F401 +from metagpt import provider # noqa: F401 + +# Import all providers to ensure they are registered +from metagpt.provider import * # noqa: F403 diff --git a/metagpt/actions/__init__.py b/metagpt/actions/__init__.py index 495ed40313..beb82e040d 100644 --- a/metagpt/actions/__init__.py +++ b/metagpt/actions/__init__.py @@ -7,24 +7,20 @@ """ from enum import Enum -from metagpt.actions.action import Action -from metagpt.actions.action_output import ActionOutput -from metagpt.actions.add_requirement import UserRequirement from metagpt.actions.debug_error import DebugError from metagpt.actions.design_api import WriteDesign -from metagpt.actions.design_api_review import DesignReview +from metagpt.actions.execute_nb_code import ExecuteNbCode +from metagpt.actions.write_analysis_code import WriteAnalysisCode +from metagpt.actions.write_plan import WritePlan from metagpt.actions.project_management import WriteTasks -from metagpt.actions.research import CollectLinks, WebBrowseAndSummarize, ConductResearch +from metagpt.actions.research import CollectLinks, ConductResearch, WebBrowseAndSummarize from metagpt.actions.run_code import RunCode -from metagpt.actions.search_and_summarize import SearchAndSummarize from metagpt.actions.write_code import WriteCode from metagpt.actions.write_code_review import WriteCodeReview from metagpt.actions.write_prd import WritePRD from metagpt.actions.write_prd_review import WritePRDReview from metagpt.actions.write_test import WriteTest -from metagpt.actions.di.execute_nb_code import ExecuteNbCode -from metagpt.actions.di.write_analysis_code import WriteAnalysisCode -from metagpt.actions.di.write_plan import WritePlan +from metagpt.core.actions.add_requirement import UserRequirement class ActionType(Enum): @@ -34,14 +30,12 @@ class ActionType(Enum): WRITE_PRD = WritePRD WRITE_PRD_REVIEW = WritePRDReview WRITE_DESIGN = WriteDesign - DESIGN_REVIEW = DesignReview WRTIE_CODE = WriteCode WRITE_CODE_REVIEW = WriteCodeReview WRITE_TEST = WriteTest RUN_CODE = RunCode DEBUG_ERROR = DebugError WRITE_TASKS = WriteTasks - SEARCH_AND_SUMMARIZE = SearchAndSummarize COLLECT_LINKS = CollectLinks WEB_BROWSE_AND_SUMMARIZE = WebBrowseAndSummarize CONDUCT_RESEARCH = ConductResearch @@ -50,8 +44,4 @@ class ActionType(Enum): WRITE_PLAN = WritePlan -__all__ = [ - "ActionType", - "Action", - "ActionOutput", -] +__all__ = ["ActionType"] diff --git a/metagpt/actions/analyze_requirements.py b/metagpt/actions/analyze_requirements.py deleted file mode 100644 index 86088d824e..0000000000 --- a/metagpt/actions/analyze_requirements.py +++ /dev/null @@ -1,76 +0,0 @@ -from metagpt.actions import Action - -ANALYZE_REQUIREMENTS = """ -# Example -{examples} - ----------------- - -# Requirements -{requirements} - -# Instructions -{instructions} - -# Output Format -{output_format} - -Follow the instructions and output format. Do not include any additional content. -""" - -EXAMPLES = """ -Example 1 -Requirements: -创建一个贪吃蛇,只需要给出设计文档和代码 -Outputs: -[User Restrictions] : 只需要给出设计文档和代码. -[Language Restrictions] : The response, message and instruction must be in Chinese. -[Programming Language] : HTML (*.html), CSS (*.css), and JavaScript (*.js) - -Example 2 -Requirements: -Create 2048 game using Python. Do not write PRD. -Outputs: -[User Restrictions] : Do not write PRD. -[Language Restrictions] : The response, message and instruction must be in English. -[Programming Language] : Python - -Example 3 -Requirements: -You must ignore create PRD and TRD. Help me write a schedule display program for the Paris Olympics. -Outputs: -[User Restrictions] : You must ignore create PRD and TRD. -[Language Restrictions] : The response, message and instruction must be in English. -[Programming Language] : HTML (*.html), CSS (*.css), and JavaScript (*.js) -""" - -INSTRUCTIONS = """ -You must output in the same language as the Requirements. -First, This language should be consistent with the language used in the requirement description. determine the natural language you must respond in. If the requirements specify a special language, follow those instructions. The default language for responses is English. -Second, extract the restrictions in the requirements, specifically the steps. Do not include detailed demand descriptions; focus only on the restrictions. -Third, if the requirements is a software development, extract the program language. If no specific programming language is required, Use HTML (*.html), CSS (*.css), and JavaScript (*.js) - -Note: -1. if there is not restrictions, requirements_restrictions must be "" -2. if the requirements is a not software development, programming language must be "" -""" - -OUTPUT_FORMAT = """ -[User Restrictions] : the restrictions in the requirements -[Language Restrictions] : The response, message and instruction must be in {{language}} -[Programming Language] : Your program must use ... -""" - - -class AnalyzeRequirementsRestrictions(Action): - """Write a review for the given context.""" - - name: str = "AnalyzeRequirementsRestrictions" - - async def run(self, requirements, isinstance=INSTRUCTIONS, output_format=OUTPUT_FORMAT): - """Analyze the constraints and the language used in the requirements.""" - prompt = ANALYZE_REQUIREMENTS.format( - examples=EXAMPLES, requirements=requirements, instructions=isinstance, output_format=output_format - ) - rsp = await self.llm.aask(prompt) - return rsp diff --git a/metagpt/actions/di/ask_review.py b/metagpt/actions/ask_review.py similarity index 94% rename from metagpt/actions/di/ask_review.py rename to metagpt/actions/ask_review.py index ecbbd992ea..8d30159526 100644 --- a/metagpt/actions/di/ask_review.py +++ b/metagpt/actions/ask_review.py @@ -2,9 +2,9 @@ from typing import Tuple -from metagpt.actions import Action -from metagpt.logs import get_human_input, logger -from metagpt.schema import Message, Plan +from metagpt.core.actions import Action +from metagpt.core.logs import get_human_input, logger +from metagpt.core.schema import Message, Plan class ReviewConst: diff --git a/metagpt/ext/cr/actions/code_review.py b/metagpt/actions/code_review.py similarity index 97% rename from metagpt/ext/cr/actions/code_review.py rename to metagpt/actions/code_review.py index 0235dc2c60..9d40bafa69 100644 --- a/metagpt/ext/cr/actions/code_review.py +++ b/metagpt/actions/code_review.py @@ -9,16 +9,16 @@ import aiofiles from unidiff import PatchSet -from metagpt.actions.action import Action -from metagpt.ext.cr.utils.cleaner import ( +from metagpt.core.actions.action import Action +from metagpt.core.logs import logger +from metagpt.core.schema import Point +from metagpt.core.utils.common import parse_json_code_block +from metagpt.core.utils.report import EditorReporter +from metagpt.utils.cleaner import ( add_line_num_on_patch, get_code_block_from_patch, rm_patch_useless_part, ) -from metagpt.ext.cr.utils.schema import Point -from metagpt.logs import logger -from metagpt.utils.common import parse_json_code_block -from metagpt.utils.report import EditorReporter CODE_REVIEW_PROMPT_TEMPLATE = """ NOTICE diff --git a/metagpt/actions/debug_error.py b/metagpt/actions/debug_error.py index 8f0f52266f..5a00e0ff9d 100644 --- a/metagpt/actions/debug_error.py +++ b/metagpt/actions/debug_error.py @@ -13,10 +13,10 @@ from pydantic import BaseModel, Field -from metagpt.actions.action import Action -from metagpt.logs import logger -from metagpt.schema import RunCodeContext, RunCodeResult -from metagpt.utils.common import CodeParser +from metagpt.core.actions.action import Action +from metagpt.core.logs import logger +from metagpt.core.schema import RunCodeContext, RunCodeResult +from metagpt.core.utils.common import CodeParser from metagpt.utils.project_repo import ProjectRepo PROMPT_TEMPLATE = """ diff --git a/metagpt/actions/design_api.py b/metagpt/actions/design_api.py index 68a66d5a49..7de784fab8 100644 --- a/metagpt/actions/design_api.py +++ b/metagpt/actions/design_api.py @@ -16,7 +16,6 @@ from pydantic import BaseModel, Field -from metagpt.actions import Action from metagpt.actions.design_api_an import ( DATA_STRUCTURES_AND_INTERFACES, DESIGN_API_NODE, @@ -25,20 +24,21 @@ REFINED_DESIGN_NODE, REFINED_PROGRAM_CALL_FLOW, ) -from metagpt.const import DATA_API_DESIGN_FILE_REPO, SEQ_FLOW_FILE_REPO -from metagpt.logs import logger -from metagpt.schema import AIMessage, Document, Documents, Message -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import ( +from metagpt.core.actions import Action +from metagpt.core.const import DATA_API_DESIGN_FILE_REPO, SEQ_FLOW_FILE_REPO +from metagpt.core.logs import logger +from metagpt.core.schema import AIMessage, Document, Documents, Message +from metagpt.core.tools.tool_registry import register_tool +from metagpt.core.utils.common import ( aread, awrite, rectify_pathname, save_json_to_markdown, to_markdown_code_block, ) +from metagpt.core.utils.report import DocsReporter, GalleryReporter from metagpt.utils.mermaid import mermaid_to_file from metagpt.utils.project_repo import ProjectRepo -from metagpt.utils.report import DocsReporter, GalleryReporter NEW_REQ_TEMPLATE = """ ### Legacy Content diff --git a/metagpt/actions/design_api_an.py b/metagpt/actions/design_api_an.py index 4707b53536..0327debf65 100644 --- a/metagpt/actions/design_api_an.py +++ b/metagpt/actions/design_api_an.py @@ -7,7 +7,7 @@ """ from typing import List, Optional -from metagpt.actions.action_node import ActionNode +from metagpt.core.actions.action_node import ActionNode from metagpt.utils.mermaid import MMC1, MMC2 IMPLEMENTATION_APPROACH = ActionNode( diff --git a/metagpt/actions/design_api_review.py b/metagpt/actions/design_api_review.py deleted file mode 100644 index ccd01a4c32..0000000000 --- a/metagpt/actions/design_api_review.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/5/11 19:31 -@Author : alexanderwu -@File : design_api_review.py -""" - -from typing import Optional - -from metagpt.actions.action import Action - - -class DesignReview(Action): - name: str = "DesignReview" - i_context: Optional[str] = None - - async def run(self, prd, api_design): - prompt = ( - f"Here is the Product Requirement Document (PRD):\n\n{prd}\n\nHere is the list of APIs designed " - f"based on this PRD:\n\n{api_design}\n\nPlease review whether this API design meets the requirements" - f" of the PRD, and whether it complies with good design practices." - ) - - api_review = await self._aask(prompt) - return api_review diff --git a/metagpt/actions/di/__init__.py b/metagpt/actions/di/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/metagpt/actions/di/execute_nb_code.py b/metagpt/actions/execute_nb_code.py similarity index 98% rename from metagpt/actions/di/execute_nb_code.py rename to metagpt/actions/execute_nb_code.py index 01019b4931..1369b69910 100644 --- a/metagpt/actions/di/execute_nb_code.py +++ b/metagpt/actions/execute_nb_code.py @@ -24,9 +24,9 @@ from rich.panel import Panel from rich.syntax import Syntax -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.utils.report import NotebookReporter +from metagpt.core.actions import Action +from metagpt.core.logs import logger +from metagpt.core.utils.report import NotebookReporter INSTALL_KEEPLEN = 500 INI_CODE = """import warnings diff --git a/metagpt/actions/execute_task.py b/metagpt/actions/execute_task.py deleted file mode 100644 index 1cc3bd699a..0000000000 --- a/metagpt/actions/execute_task.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/9/13 12:26 -@Author : femto Zheng -@File : execute_task.py -""" - - -from metagpt.actions import Action -from metagpt.schema import Message - - -class ExecuteTask(Action): - name: str = "ExecuteTask" - i_context: list[Message] = [] - - async def run(self, *args, **kwargs): - pass diff --git a/metagpt/actions/extract_readme.py b/metagpt/actions/extract_readme.py index 69f5503a9a..8e55809db5 100644 --- a/metagpt/actions/extract_readme.py +++ b/metagpt/actions/extract_readme.py @@ -11,10 +11,10 @@ from pydantic import Field -from metagpt.actions import Action -from metagpt.const import GRAPH_REPO_FILE_REPO -from metagpt.schema import Message -from metagpt.utils.common import aread +from metagpt.core.actions import Action +from metagpt.core.const import GRAPH_REPO_FILE_REPO +from metagpt.core.schema import Message +from metagpt.core.utils.common import aread from metagpt.utils.di_graph_repository import DiGraphRepository from metagpt.utils.graph_repository import GraphKeyword, GraphRepository diff --git a/metagpt/actions/fix_bug.py b/metagpt/actions/fix_bug.py index 0c5df6dc60..27a2ce433f 100644 --- a/metagpt/actions/fix_bug.py +++ b/metagpt/actions/fix_bug.py @@ -4,7 +4,7 @@ @Author : mashenquan @File : fix_bug.py """ -from metagpt.actions import Action +from metagpt.core.actions import Action class FixBug(Action): diff --git a/metagpt/actions/generate_questions.py b/metagpt/actions/generate_questions.py deleted file mode 100644 index bf0ba62773..0000000000 --- a/metagpt/actions/generate_questions.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@File : generate_questions.py -""" -from metagpt.actions import Action -from metagpt.actions.action_node import ActionNode - -QUESTIONS = ActionNode( - key="Questions", - expected_type=list[str], - instruction="Task: Refer to the context to further inquire about the details that interest you, within a word limit" - " of 150 words. Please provide the specific details you would like to inquire about here", - example=["1. What ...", "2. How ...", "3. ..."], -) - - -class GenerateQuestions(Action): - """This class allows LLM to further mine noteworthy details based on specific "##TOPIC"(discussion topic) and - "##RECORD" (discussion records), thereby deepening the discussion.""" - - name: str = "GenerateQuestions" - - async def run(self, context) -> ActionNode: - return await QUESTIONS.fill(req=context, llm=self.llm) diff --git a/metagpt/actions/import_repo.py b/metagpt/actions/import_repo.py index 82aa916f46..2d539eba6e 100644 --- a/metagpt/actions/import_repo.py +++ b/metagpt/actions/import_repo.py @@ -16,21 +16,21 @@ from pydantic import BaseModel -from metagpt.actions import Action from metagpt.actions.extract_readme import ExtractReadMe from metagpt.actions.rebuild_class_view import RebuildClassView from metagpt.actions.rebuild_sequence_view import RebuildSequenceView -from metagpt.const import GRAPH_REPO_FILE_REPO -from metagpt.logs import logger -from metagpt.schema import Message -from metagpt.tools.libs.git import git_clone -from metagpt.utils.common import ( +from metagpt.core.actions import Action +from metagpt.core.const import GRAPH_REPO_FILE_REPO +from metagpt.core.logs import logger +from metagpt.core.schema import Message +from metagpt.core.utils.common import ( aread, awrite, list_files, parse_json_code_block, split_namespace, ) +from metagpt.tools.libs.git import git_clone from metagpt.utils.di_graph_repository import DiGraphRepository from metagpt.utils.file_repository import FileRepository from metagpt.utils.git_repository import GitRepository diff --git a/metagpt/actions/invoice_ocr.py b/metagpt/actions/invoice_ocr.py deleted file mode 100644 index 7cf71a8ff9..0000000000 --- a/metagpt/actions/invoice_ocr.py +++ /dev/null @@ -1,189 +0,0 @@ -#!/usr/bin/env python3 -# _*_ coding: utf-8 _*_ - -""" -@Time : 2023/9/21 18:10:20 -@Author : Stitch-z -@File : invoice_ocr.py -@Describe : Actions of the invoice ocr assistant. -""" - -import os -import zipfile -from datetime import datetime -from pathlib import Path -from typing import Optional - -import pandas as pd -from paddleocr import PaddleOCR - -from metagpt.actions import Action -from metagpt.const import INVOICE_OCR_TABLE_PATH -from metagpt.logs import logger -from metagpt.prompts.invoice_ocr import ( - EXTRACT_OCR_MAIN_INFO_PROMPT, - REPLY_OCR_QUESTION_PROMPT, -) -from metagpt.utils.common import OutputParser -from metagpt.utils.file import File - - -class InvoiceOCR(Action): - """Action class for performing OCR on invoice files, including zip, PDF, png, and jpg files. - - Args: - name: The name of the action. Defaults to an empty string. - language: The language for OCR output. Defaults to "ch" (Chinese). - - """ - - name: str = "InvoiceOCR" - i_context: Optional[str] = None - - @staticmethod - async def _check_file_type(file_path: Path) -> str: - """Check the file type of the given filename. - - Args: - file_path: The path of the file. - - Returns: - The file type based on FileExtensionType enum. - - Raises: - Exception: If the file format is not zip, pdf, png, or jpg. - """ - ext = file_path.suffix - if ext not in [".zip", ".pdf", ".png", ".jpg"]: - raise Exception("The invoice format is not zip, pdf, png, or jpg") - - return ext - - @staticmethod - async def _unzip(file_path: Path) -> Path: - """Unzip a file and return the path to the unzipped directory. - - Args: - file_path: The path to the zip file. - - Returns: - The path to the unzipped directory. - """ - file_directory = file_path.parent / "unzip_invoices" / datetime.now().strftime("%Y%m%d%H%M%S") - with zipfile.ZipFile(file_path, "r") as zip_ref: - for zip_info in zip_ref.infolist(): - # Use CP437 to encode the file name, and then use GBK decoding to prevent Chinese garbled code - relative_name = Path(zip_info.filename.encode("cp437").decode("gbk")) - if relative_name.suffix: - full_filename = file_directory / relative_name - await File.write(full_filename.parent, relative_name.name, zip_ref.read(zip_info.filename)) - - logger.info(f"unzip_path: {file_directory}") - return file_directory - - @staticmethod - async def _ocr(invoice_file_path: Path): - ocr = PaddleOCR(use_angle_cls=True, lang="ch", page_num=1) - ocr_result = ocr.ocr(str(invoice_file_path), cls=True) - for result in ocr_result[0]: - result[1] = (result[1][0], round(result[1][1], 2)) # round long confidence scores to reduce token costs - return ocr_result - - async def run(self, file_path: Path, *args, **kwargs) -> list: - """Execute the action to identify invoice files through OCR. - - Args: - file_path: The path to the input file. - - Returns: - A list of OCR results. - """ - file_ext = await self._check_file_type(file_path) - - if file_ext == ".zip": - # OCR recognizes zip batch files - unzip_path = await self._unzip(file_path) - ocr_list = [] - for root, _, files in os.walk(unzip_path): - for filename in files: - invoice_file_path = Path(root) / Path(filename) - # Identify files that match the type - if Path(filename).suffix in [".zip", ".pdf", ".png", ".jpg"]: - ocr_result = await self._ocr(str(invoice_file_path)) - ocr_list.append(ocr_result) - return ocr_list - - else: - # OCR identifies single file - ocr_result = await self._ocr(file_path) - return [ocr_result] - - -class GenerateTable(Action): - """Action class for generating tables from OCR results. - - Args: - name: The name of the action. Defaults to an empty string. - language: The language used for the generated table. Defaults to "ch" (Chinese). - - """ - - name: str = "GenerateTable" - i_context: Optional[str] = None - language: str = "ch" - - async def run(self, ocr_results: list, filename: str, *args, **kwargs) -> dict[str, str]: - """Processes OCR results, extracts invoice information, generates a table, and saves it as an Excel file. - - Args: - ocr_results: A list of OCR results obtained from invoice processing. - filename: The name of the output Excel file. - - Returns: - A dictionary containing the invoice information. - - """ - table_data = [] - pathname = INVOICE_OCR_TABLE_PATH - pathname.mkdir(parents=True, exist_ok=True) - - for ocr_result in ocr_results: - # Extract invoice OCR main information - prompt = EXTRACT_OCR_MAIN_INFO_PROMPT.format(ocr_result=ocr_result, language=self.language) - ocr_info = await self._aask(prompt=prompt) - invoice_data = OutputParser.extract_struct(ocr_info, dict) - if invoice_data: - table_data.append(invoice_data) - - # Generate Excel file - filename = f"{filename.split('.')[0]}.xlsx" - full_filename = f"{pathname}/{filename}" - df = pd.DataFrame(table_data) - df.to_excel(full_filename, index=False) - return table_data - - -class ReplyQuestion(Action): - """Action class for generating replies to questions based on OCR results. - - Args: - name: The name of the action. Defaults to an empty string. - language: The language used for generating the reply. Defaults to "ch" (Chinese). - - """ - - language: str = "ch" - - async def run(self, query: str, ocr_result: list, *args, **kwargs) -> str: - """Reply to questions based on ocr results. - - Args: - query: The question for which a reply is generated. - ocr_result: A list of OCR results. - - Returns: - A reply result of string type. - """ - prompt = REPLY_OCR_QUESTION_PROMPT.format(query=query, ocr_result=ocr_result, language=self.language) - resp = await self._aask(prompt=prompt) - return resp diff --git a/metagpt/ext/cr/actions/modify_code.py b/metagpt/actions/modify_code.py similarity index 96% rename from metagpt/ext/cr/actions/modify_code.py rename to metagpt/actions/modify_code.py index 820bdae4a1..ec15d3aa3f 100644 --- a/metagpt/ext/cr/actions/modify_code.py +++ b/metagpt/actions/modify_code.py @@ -6,14 +6,14 @@ from unidiff import PatchSet -from metagpt.actions.action import Action -from metagpt.ext.cr.utils.cleaner import ( +from metagpt.core.actions.action import Action +from metagpt.core.utils.common import CodeParser +from metagpt.core.utils.report import EditorReporter +from metagpt.utils.cleaner import ( add_line_num_on_patch, get_code_block_from_patch, rm_patch_useless_part, ) -from metagpt.utils.common import CodeParser -from metagpt.utils.report import EditorReporter SYSTEM_MSGS_PROMPT = """ You're an adaptive software developer who excels at refining code based on user inputs. You're proficient in creating Git patches to represent code modifications. diff --git a/metagpt/ext/cr/points.json b/metagpt/actions/points.json similarity index 100% rename from metagpt/ext/cr/points.json rename to metagpt/actions/points.json diff --git a/metagpt/ext/cr/points_cn.json b/metagpt/actions/points_cn.json similarity index 100% rename from metagpt/ext/cr/points_cn.json rename to metagpt/actions/points_cn.json diff --git a/metagpt/actions/prepare_documents.py b/metagpt/actions/prepare_documents.py index 393c483cc5..0a02de48e5 100644 --- a/metagpt/actions/prepare_documents.py +++ b/metagpt/actions/prepare_documents.py @@ -11,11 +11,12 @@ from pathlib import Path from typing import Dict, Optional -from metagpt.actions import Action, UserRequirement -from metagpt.const import REQUIREMENT_FILENAME -from metagpt.logs import logger -from metagpt.schema import AIMessage -from metagpt.utils.common import any_to_str +from metagpt.core.actions import Action +from metagpt.core.actions.add_requirement import UserRequirement +from metagpt.core.const import REQUIREMENT_FILENAME +from metagpt.core.logs import logger +from metagpt.core.schema import AIMessage +from metagpt.core.utils.common import any_to_str from metagpt.utils.file_repository import FileRepository from metagpt.utils.project_repo import ProjectRepo diff --git a/metagpt/actions/prepare_interview.py b/metagpt/actions/prepare_interview.py deleted file mode 100644 index 0a7eb6581e..0000000000 --- a/metagpt/actions/prepare_interview.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/9/19 15:02 -@Author : DevXiaolan -@File : prepare_interview.py -""" -from metagpt.actions import Action -from metagpt.actions.action_node import ActionNode - -QUESTIONS = ActionNode( - key="Questions", - expected_type=list[str], - instruction="""Role: You are an interviewer of our company who is well-knonwn in frontend or backend develop; -Requirement: Provide a list of questions for the interviewer to ask the interviewee, by reading the resume of the interviewee in the context. -Attention: Provide as markdown block as the format above, at least 10 questions.""", - example=["1. What ...", "2. How ..."], -) - - -class PrepareInterview(Action): - name: str = "PrepareInterview" - - async def run(self, context): - return await QUESTIONS.fill(req=context, llm=self.llm) diff --git a/metagpt/actions/project_management.py b/metagpt/actions/project_management.py index 2bfe0da3a2..828f7e74be 100644 --- a/metagpt/actions/project_management.py +++ b/metagpt/actions/project_management.py @@ -17,21 +17,21 @@ from pydantic import BaseModel, Field -from metagpt.actions.action import Action from metagpt.actions.project_management_an import PM_NODE, REFINED_PM_NODE -from metagpt.const import PACKAGE_REQUIREMENTS_FILENAME -from metagpt.logs import logger -from metagpt.schema import AIMessage, Document, Documents, Message -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import ( +from metagpt.core.actions import Action +from metagpt.core.const import PACKAGE_REQUIREMENTS_FILENAME +from metagpt.core.logs import logger +from metagpt.core.schema import AIMessage, Document, Documents, Message +from metagpt.core.tools.tool_registry import register_tool +from metagpt.core.utils.common import ( aread, awrite, rectify_pathname, save_json_to_markdown, to_markdown_code_block, ) +from metagpt.core.utils.report import DocsReporter from metagpt.utils.project_repo import ProjectRepo -from metagpt.utils.report import DocsReporter NEW_REQ_TEMPLATE = """ ### Legacy Content diff --git a/metagpt/actions/project_management_an.py b/metagpt/actions/project_management_an.py index a953feb4cb..899b0d9d3e 100644 --- a/metagpt/actions/project_management_an.py +++ b/metagpt/actions/project_management_an.py @@ -7,7 +7,7 @@ """ from typing import List, Optional -from metagpt.actions.action_node import ActionNode +from metagpt.core.actions.action_node import ActionNode REQUIRED_PACKAGES = ActionNode( key="Required packages", diff --git a/metagpt/actions/rebuild_class_view.py b/metagpt/actions/rebuild_class_view.py index 64f003f919..fea5ef6298 100644 --- a/metagpt/actions/rebuild_class_view.py +++ b/metagpt/actions/rebuild_class_view.py @@ -13,18 +13,18 @@ import aiofiles -from metagpt.actions import Action -from metagpt.const import ( +from metagpt.core.actions import Action +from metagpt.core.const import ( AGGREGATION, COMPOSITION, DATA_API_DESIGN_FILE_REPO, GENERALIZATION, GRAPH_REPO_FILE_REPO, ) -from metagpt.logs import logger +from metagpt.core.logs import logger +from metagpt.core.utils.common import concat_namespace, split_namespace from metagpt.repo_parser import DotClassInfo, RepoParser -from metagpt.schema import UMLClassView -from metagpt.utils.common import concat_namespace, split_namespace +from metagpt.uml_schema import UMLClassView from metagpt.utils.di_graph_repository import DiGraphRepository from metagpt.utils.graph_repository import GraphKeyword, GraphRepository diff --git a/metagpt/actions/rebuild_sequence_view.py b/metagpt/actions/rebuild_sequence_view.py index 627cbd151b..bd02bf84e1 100644 --- a/metagpt/actions/rebuild_sequence_view.py +++ b/metagpt/actions/rebuild_sequence_view.py @@ -17,12 +17,10 @@ from pydantic import BaseModel from tenacity import retry, stop_after_attempt, wait_random_exponential -from metagpt.actions import Action -from metagpt.const import GRAPH_REPO_FILE_REPO -from metagpt.logs import logger -from metagpt.repo_parser import CodeBlockInfo, DotClassInfo -from metagpt.schema import UMLClassView -from metagpt.utils.common import ( +from metagpt.core.actions import Action +from metagpt.core.const import GRAPH_REPO_FILE_REPO +from metagpt.core.logs import logger +from metagpt.core.utils.common import ( add_affix, aread, auto_namespace, @@ -33,6 +31,8 @@ read_file_block, split_namespace, ) +from metagpt.repo_parser import CodeBlockInfo, DotClassInfo +from metagpt.uml_schema import UMLClassView from metagpt.utils.di_graph_repository import DiGraphRepository from metagpt.utils.graph_repository import SPO, GraphKeyword, GraphRepository diff --git a/metagpt/actions/requirement_analysis/__init__.py b/metagpt/actions/requirement_analysis/__init__.py deleted file mode 100644 index d196bafeeb..0000000000 --- a/metagpt/actions/requirement_analysis/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : __init__.py -@Desc : The implementation of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" -from metagpt.actions.requirement_analysis.evaluate_action import EvaluationData, EvaluateAction - -__all__ = [EvaluationData, EvaluateAction] diff --git a/metagpt/actions/requirement_analysis/evaluate_action.py b/metagpt/actions/requirement_analysis/evaluate_action.py deleted file mode 100644 index 376c73f2c9..0000000000 --- a/metagpt/actions/requirement_analysis/evaluate_action.py +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : evaluate_action.py -@Desc : The implementation of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" -from typing import Optional - -from pydantic import BaseModel -from tenacity import retry, stop_after_attempt, wait_random_exponential - -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.utils.common import CodeParser, general_after_log, to_markdown_code_block - - -class EvaluationData(BaseModel): - """Model to represent evaluation data. - - Attributes: - is_pass (bool): Indicates if the evaluation passed or failed. - conclusion (Optional[str]): Conclusion or remarks about the evaluation. - """ - - is_pass: bool - conclusion: Optional[str] = None - - -class EvaluateAction(Action): - """The base class for an evaluation action. - - This class provides methods to evaluate prompts using a specified language model. - """ - - @retry( - wait=wait_random_exponential(min=1, max=20), - stop=stop_after_attempt(6), - after=general_after_log(logger), - ) - async def _evaluate(self, prompt: str) -> (bool, str): - """Evaluates a given prompt. - - Args: - prompt (str): The prompt to be evaluated. - - Returns: - tuple: A tuple containing: - - bool: Indicates if the evaluation passed. - - str: The JSON string containing the evaluation data. - """ - rsp = await self.llm.aask(prompt) - json_data = CodeParser.parse_code(text=rsp, lang="json") - data = EvaluationData.model_validate_json(json_data) - return data.is_pass, to_markdown_code_block(val=json_data, type_="json") - - async def _vote(self, prompt: str) -> EvaluationData: - """Evaluates a prompt multiple times and returns the consensus. - - Args: - prompt (str): The prompt to be evaluated. - - Returns: - EvaluationData: An object containing the evaluation result and a summary of evaluations. - """ - evaluations = {} - for i in range(3): - vote, evaluation = await self._evaluate(prompt) - val = evaluations.get(vote, []) - val.append(evaluation) - if len(val) > 1: - return EvaluationData(is_pass=vote, conclusion="\n".join(val)) - evaluations[vote] = val diff --git a/metagpt/actions/requirement_analysis/framework/__init__.py b/metagpt/actions/requirement_analysis/framework/__init__.py deleted file mode 100644 index 968effd862..0000000000 --- a/metagpt/actions/requirement_analysis/framework/__init__.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : __init__.py -@Desc : The implementation of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" -import json -import uuid -from datetime import datetime -from pathlib import Path -from typing import Optional, Union, List - -from pydantic import BaseModel - -from metagpt.actions.requirement_analysis.framework.evaluate_framework import EvaluateFramework -from metagpt.actions.requirement_analysis.framework.write_framework import WriteFramework -from metagpt.config2 import config -from metagpt.utils.common import awrite - - -async def save_framework( - dir_data: str, trd: Optional[str] = None, output_dir: Optional[Union[str, Path]] = None -) -> List[str]: - """ - Saves framework data to files based on input JSON data and optionally saves a TRD (technical requirements document). - - Args: - dir_data (str): JSON data in string format enclosed in triple backticks ("```json" "...data..." "```"). - trd (str, optional): Technical requirements document content to be saved. Defaults to None. - output_dir (Union[str, Path], optional): Output directory path where files will be saved. If not provided, - a default directory is created based on the current timestamp and a random UUID suffix. - - Returns: - List[str]: List of file paths where data was saved. - - Raises: - Any exceptions raised during file writing operations. - - Notes: - - JSON data should be provided in the format "```json ...data... ```". - - The function ensures that paths and filenames are correctly formatted and creates necessary directories. - - Example: - ```python - dir_data = "```json\n[{\"path\": \"/folder\", \"filename\": \"file1.txt\", \"content\": \"Some content\"}]\n```" - trd = "Technical requirements document content." - output_dir = '/path/to/output/dir' - saved_files = await save_framework(dir_data, trd, output_dir) - print(saved_files) - ``` - """ - output_dir = ( - Path(output_dir) - if output_dir - else config.workspace.path / (datetime.now().strftime("%Y%m%d%H%M%ST") + uuid.uuid4().hex[0:8]) - ) - output_dir.mkdir(parents=True, exist_ok=True) - - json_data = dir_data.removeprefix("```json").removesuffix("```") - items = json.loads(json_data) - - class Data(BaseModel): - path: str - filename: str - content: str - - if trd: - pathname = output_dir / "TRD.md" - await awrite(filename=pathname, data=trd) - - files = [] - for i in items: - v = Data.model_validate(i) - if v.path and v.path[0] == "/": - v.path = "." + v.path - pathname = output_dir / v.path - pathname.mkdir(parents=True, exist_ok=True) - pathname = pathname / v.filename - await awrite(filename=pathname, data=v.content) - files.append(str(pathname)) - return files - - -__all__ = [WriteFramework, EvaluateFramework] diff --git a/metagpt/actions/requirement_analysis/framework/evaluate_framework.py b/metagpt/actions/requirement_analysis/framework/evaluate_framework.py deleted file mode 100644 index 2f92396583..0000000000 --- a/metagpt/actions/requirement_analysis/framework/evaluate_framework.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : evaluate_framework.py -@Desc : The implementation of Chapter 2.1.8 of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" - -from metagpt.actions.requirement_analysis import EvaluateAction, EvaluationData -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import to_markdown_code_block - - -@register_tool(include_functions=["run"]) -class EvaluateFramework(EvaluateAction): - """WriteFramework deal with the following situations: - 1. Given a TRD and the software framework based on the TRD, evaluate the quality of the software framework. - """ - - async def run( - self, - *, - use_case_actors: str, - trd: str, - acknowledge: str, - legacy_output: str, - additional_technical_requirements: str, - ) -> EvaluationData: - """ - Run the evaluation of the software framework based on the provided TRD and related parameters. - - Args: - use_case_actors (str): A description of the actors involved in the use case. - trd (str): The Technical Requirements Document (TRD) that outlines the requirements for the software framework. - acknowledge (str): External acknowledgments or acknowledgments information related to the framework. - legacy_output (str): The previous versions of software framework returned by `WriteFramework`. - additional_technical_requirements (str): Additional technical requirements that need to be considered during evaluation. - - Returns: - EvaluationData: An object containing the results of the evaluation. - - Example: - >>> evaluate_framework = EvaluateFramework() - >>> use_case_actors = "- Actor: game player;\\n- System: snake game; \\n- External System: game center;" - >>> trd = "## TRD\\n..." - >>> acknowledge = "## Interfaces\\n..." - >>> framework = '{"path":"balabala", "filename":"...", ...' - >>> constraint = "Using Java language, ..." - >>> evaluation = await evaluate_framework.run( - >>> use_case_actors=use_case_actors, - >>> trd=trd, - >>> acknowledge=acknowledge, - >>> legacy_output=framework, - >>> additional_technical_requirements=constraint, - >>> ) - >>> is_pass = evaluation.is_pass - >>> print(is_pass) - True - >>> evaluation_conclusion = evaluation.conclusion - >>> print(evaluation_conclusion) - Balabala... - """ - prompt = PROMPT.format( - use_case_actors=use_case_actors, - trd=to_markdown_code_block(val=trd), - acknowledge=to_markdown_code_block(val=acknowledge), - legacy_output=to_markdown_code_block(val=legacy_output), - additional_technical_requirements=to_markdown_code_block(val=additional_technical_requirements), - ) - return await self._vote(prompt) - - -PROMPT = """ -## Actor, System, External System -{use_case_actors} - -## Legacy TRD -{trd} - -## Acknowledge -{acknowledge} - -## Legacy Outputs -{legacy_output} - -## Additional Technical Requirements -{additional_technical_requirements} - ---- -You are a tool that evaluates the quality of framework code based on the TRD content; -You need to refer to the content of the "Legacy TRD" section to check for any errors or omissions in the framework code found in "Legacy Outputs"; -The content of "Actor, System, External System" provides an explanation of actors and systems that appear in UML Use Case diagram; -Information about the external system missing from the "Legacy TRD" can be found in the "Acknowledge" section; -Which interfaces defined in "Acknowledge" are used in the "Legacy TRD"? -Do not implement the interface in "Acknowledge" section until it is used in "Legacy TRD", you can check whether they are the same interface by looking at its ID or url; -Parts not mentioned in the "Legacy TRD" will be handled by other TRDs, therefore, processes not present in the "Legacy TRD" are considered ready; -"Additional Technical Requirements" specifies the additional technical requirements that the generated software framework code must meet; -Do the parameters of the interface of the external system used in the code comply with it's specifications in 'Acknowledge'? -Is there a lack of necessary configuration files? -Return a markdown JSON object with: -- an "issues" key containing a string list of natural text about the issues that need to addressed, found in the "Legacy Outputs" if any exits, each issue found must provide a detailed description and include reasons; -- a "conclusion" key containing the evaluation conclusion; -- a "misalignment" key containing the judgement detail of the natural text string list about the misalignment with "Legacy TRD"; -- a "is_pass" key containing a true boolean value if there is not any issue in the "Legacy Outputs"; -""" diff --git a/metagpt/actions/requirement_analysis/framework/write_framework.py b/metagpt/actions/requirement_analysis/framework/write_framework.py deleted file mode 100644 index 2aa03f4473..0000000000 --- a/metagpt/actions/requirement_analysis/framework/write_framework.py +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : write_framework.py -@Desc : The implementation of Chapter 2.1.8 of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" -import json - -from tenacity import retry, stop_after_attempt, wait_random_exponential - -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import general_after_log, to_markdown_code_block - - -@register_tool(include_functions=["run"]) -class WriteFramework(Action): - """WriteFramework deal with the following situations: - 1. Given a TRD, write out the software framework. - """ - - async def run( - self, - *, - use_case_actors: str, - trd: str, - acknowledge: str, - legacy_output: str, - evaluation_conclusion: str, - additional_technical_requirements: str, - ) -> str: - """ - Run the action to generate a software framework based on the provided TRD and related information. - - Args: - use_case_actors (str): Description of the use case actors involved. - trd (str): Technical Requirements Document detailing the requirements. - acknowledge (str): External acknowledgements or acknowledgements required. - legacy_output (str): Previous version of the software framework returned by `WriteFramework.run`. - evaluation_conclusion (str): Conclusion from the evaluation of the requirements. - additional_technical_requirements (str): Any additional technical requirements. - - Returns: - str: The generated software framework as a string. - - Example: - >>> write_framework = WriteFramework() - >>> use_case_actors = "- Actor: game player;\\n- System: snake game; \\n- External System: game center;" - >>> trd = "## TRD\\n..." - >>> acknowledge = "## Interfaces\\n..." - >>> legacy_output = '{"path":"balabala", "filename":"...", ...' - >>> evaluation_conclusion = "Balabala..." - >>> constraint = "Using Java language, ..." - >>> framework = await write_framework.run( - >>> use_case_actors=use_case_actors, - >>> trd=trd, - >>> acknowledge=acknowledge, - >>> legacy_output=framework, - >>> evaluation_conclusion=evaluation_conclusion, - >>> additional_technical_requirements=constraint, - >>> ) - >>> print(framework) - {"path":"balabala", "filename":"...", ... - - """ - acknowledge = await self._extract_external_interfaces(trd=trd, knowledge=acknowledge) - prompt = PROMPT.format( - use_case_actors=use_case_actors, - trd=to_markdown_code_block(val=trd), - acknowledge=to_markdown_code_block(val=acknowledge), - legacy_output=to_markdown_code_block(val=legacy_output), - evaluation_conclusion=evaluation_conclusion, - additional_technical_requirements=to_markdown_code_block(val=additional_technical_requirements), - ) - return await self._write(prompt) - - @retry( - wait=wait_random_exponential(min=1, max=20), - stop=stop_after_attempt(6), - after=general_after_log(logger), - ) - async def _write(self, prompt: str) -> str: - rsp = await self.llm.aask(prompt) - # Do not use `CodeParser` here. - tags = ["```json", "```"] - bix = rsp.find(tags[0]) - eix = rsp.rfind(tags[1]) - if bix >= 0: - rsp = rsp[bix : eix + len(tags[1])] - json_data = rsp.removeprefix("```json").removesuffix("```") - json.loads(json_data) # validate - return json_data - - @retry( - wait=wait_random_exponential(min=1, max=20), - stop=stop_after_attempt(6), - after=general_after_log(logger), - ) - async def _extract_external_interfaces(self, trd: str, knowledge: str) -> str: - prompt = f"## TRD\n{to_markdown_code_block(val=trd)}\n\n## Knowledge\n{to_markdown_code_block(val=knowledge)}\n" - rsp = await self.llm.aask( - prompt, - system_msgs=[ - "You are a tool that removes impurities from articles; you can remove irrelevant content from articles.", - 'Identify which interfaces are used in "TRD"? Remove the relevant content of the interfaces NOT used in "TRD" from "Knowledge" and return the simplified content of "Knowledge".', - ], - ) - return rsp - - -PROMPT = """ -## Actor, System, External System -{use_case_actors} - -## TRD -{trd} - -## Acknowledge -{acknowledge} - -## Legacy Outputs -{legacy_output} - -## Evaluation Conclusion -{evaluation_conclusion} - -## Additional Technical Requirements -{additional_technical_requirements} - ---- -You are a tool that generates software framework code based on TRD. -The content of "Actor, System, External System" provides an explanation of actors and systems that appear in UML Use Case diagram; -The descriptions of the interfaces of the external system used in the "TRD" can be found in the "Acknowledge" section; Do not implement the interface of the external system in "Acknowledge" section until it is used in "TRD"; -"Legacy Outputs" contains the software framework code generated by you last time, which you can improve by addressing the issues raised in "Evaluation Conclusion"; -"Additional Technical Requirements" specifies the additional technical requirements that the generated software framework code must meet; -Develop the software framework based on the "TRD", the output files should include: -- The `README.md` file should include: - - The folder structure diagram of the entire project; - - Correspondence between classes, interfaces, and functions with the content in the "TRD" section; - - Prerequisites if necessary; - - Installation if necessary; - - Configuration if necessary; - - Usage if necessary; -- The `CLASS.md` file should include the class diagram in PlantUML format based on the "TRD"; -- The `SEQUENCE.md` file should include the sequence diagram in PlantUML format based on the "TRD"; -- The source code files that implement the "TRD" and "Additional Technical Requirements"; do not add comments to source code files; -- The configuration files that required by the source code files, "TRD" and "Additional Technical Requirements"; - -Return a markdown JSON object list, each object containing: -- a "path" key with a value specifying its path; -- a "filename" key with a value specifying its file name; -- a "content" key with a value containing its file content; -""" diff --git a/metagpt/actions/requirement_analysis/requirement/__init__.py b/metagpt/actions/requirement_analysis/requirement/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/metagpt/actions/requirement_analysis/requirement/pic2txt.py b/metagpt/actions/requirement_analysis/requirement/pic2txt.py deleted file mode 100644 index b8f236dacb..0000000000 --- a/metagpt/actions/requirement_analysis/requirement/pic2txt.py +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/27 -@Author : mashenquan -@File : pic2txt.py -""" -import json -from pathlib import Path -from typing import List - -from tenacity import retry, stop_after_attempt, wait_random_exponential - -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import encode_image, general_after_log, to_markdown_code_block - - -@register_tool(include_functions=["run"]) -class Pic2Txt(Action): - """Pic2Txt deal with the following situations: - Given some pictures depicting user requirements alongside contextual description, write out the intact textual user requirements. - """ - - async def run( - self, - *, - image_paths: List[str], - textual_user_requirement: str = "", - legacy_output: str = "", - evaluation_conclusion: str = "", - additional_technical_requirements: str = "", - ) -> str: - """ - Given some pictures depicting user requirements alongside contextual description, write out the intact textual user requirements - - Args: - image_paths (List[str]): A list of file paths to the input image(s) depicting user requirements. - textual_user_requirement (str, optional): Textual user requirement that alongside the given images, if any. - legacy_output (str, optional): The intact textual user requirements generated by you last time, if any. - evaluation_conclusion (str, optional): Conclusion or evaluation based on the processed requirements. - additional_technical_requirements (str, optional): Any supplementary technical details relevant to the process. - - Returns: - str: Textual representation of user requirements extracted from the provided image(s). - - Raises: - ValueError: If image_paths list is empty. - OSError: If there is an issue accessing or reading the image files. - - Example: - >>> images = ["requirements/pic/1.png", "requirements/pic/2.png", "requirements/pic/3.png"] - >>> textual_user_requirements = "User requirement paragraph 1 ..., ![](1.png). paragraph 2...![](2.png)..." - >>> action = Pic2Txt() - >>> intact_textual_user_requirements = await action.run(image_paths=images, textual_user_requirement=textual_user_requirements) - >>> print(intact_textual_user_requirements) - "User requirement paragraph 1 ..., ![...](1.png) This picture describes... paragraph 2...![...](2.png)..." - - """ - descriptions = {} - for i in image_paths: - filename = Path(i) - base64_image = encode_image(filename) - rsp = await self._pic2txt( - "Generate a paragraph of text based on the content of the image, the language of the text is consistent with the language in the image.", - base64_image=base64_image, - ) - descriptions[filename.name] = rsp - - prompt = PROMPT.format( - textual_user_requirement=textual_user_requirement, - acknowledge=to_markdown_code_block(val=json.dumps(descriptions), type_="json"), - legacy_output=to_markdown_code_block(val=legacy_output), - evaluation_conclusion=evaluation_conclusion, - additional_technical_requirements=to_markdown_code_block(val=additional_technical_requirements), - ) - return await self._write(prompt) - - @retry( - wait=wait_random_exponential(min=1, max=20), - stop=stop_after_attempt(6), - after=general_after_log(logger), - ) - async def _write(self, prompt: str) -> str: - rsp = await self.llm.aask(prompt) - return rsp - - @retry( - wait=wait_random_exponential(min=1, max=20), - stop=stop_after_attempt(6), - after=general_after_log(logger), - ) - async def _pic2txt(self, prompt: str, base64_image: str) -> str: - rsp = await self.llm.aask(prompt, images=base64_image) - return rsp - - -PROMPT = """ -## Textual User Requirements -{textual_user_requirement} - -## Acknowledge -{acknowledge} - -## Legacy Outputs -{legacy_output} - -## Evaluation Conclusion -{evaluation_conclusion} - -## Additional Technical Requirements -{additional_technical_requirements} - ---- -You are a tool that generates an intact textual user requirements given a few of textual fragments of user requirements and some fragments of UI pictures. -The content of "Textual User Requirements" provides a few of textual fragments of user requirements; -The content of "Acknowledge" provides the descriptions of pictures used in "Textual User Requirements"; -"Legacy Outputs" contains the intact textual user requirements generated by you last time, which you can improve by addressing the issues raised in "Evaluation Conclusion"; -"Additional Technical Requirements" specifies the additional technical requirements that the generated textual user requirements must meet; -You need to merge the text content of the corresponding image in the "Acknowledge" into the "Textual User Requirements" to generate a complete, natural and coherent description of the user requirements; -Return the intact textual user requirements according to the given fragments of the user requirement of "Textual User Requirements" and the UI pictures; -""" diff --git a/metagpt/actions/requirement_analysis/trd/__init__.py b/metagpt/actions/requirement_analysis/trd/__init__.py deleted file mode 100644 index 4603532c42..0000000000 --- a/metagpt/actions/requirement_analysis/trd/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : __init__.py -@Desc : The implementation of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" - - -from metagpt.actions.requirement_analysis.trd.detect_interaction import DetectInteraction -from metagpt.actions.requirement_analysis.trd.evaluate_trd import EvaluateTRD -from metagpt.actions.requirement_analysis.trd.write_trd import WriteTRD -from metagpt.actions.requirement_analysis.trd.compress_external_interfaces import CompressExternalInterfaces - -__all__ = [CompressExternalInterfaces, DetectInteraction, WriteTRD, EvaluateTRD] diff --git a/metagpt/actions/requirement_analysis/trd/compress_external_interfaces.py b/metagpt/actions/requirement_analysis/trd/compress_external_interfaces.py deleted file mode 100644 index abaf6fc307..0000000000 --- a/metagpt/actions/requirement_analysis/trd/compress_external_interfaces.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : compress_external_interfaces.py -@Desc : The implementation of Chapter 2.1.5 of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" -from tenacity import retry, stop_after_attempt, wait_random_exponential - -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import general_after_log - - -@register_tool(include_functions=["run"]) -class CompressExternalInterfaces(Action): - """CompressExternalInterfaces deal with the following situations: - 1. Given a natural text of acknowledgement, it extracts and compresses the information about external system interfaces. - """ - - @retry( - wait=wait_random_exponential(min=1, max=20), - stop=stop_after_attempt(6), - after=general_after_log(logger), - ) - async def run( - self, - *, - acknowledge: str, - ) -> str: - """ - Extracts and compresses information about external system interfaces from a given acknowledgement text. - - Args: - acknowledge (str): A natural text of acknowledgement containing details about external system interfaces. - - Returns: - str: A compressed version of the information about external system interfaces. - - Example: - >>> compress_acknowledge = CompressExternalInterfaces() - >>> acknowledge = "## Interfaces\\n..." - >>> available_external_interfaces = await compress_acknowledge.run(acknowledge=acknowledge) - >>> print(available_external_interfaces) - ```json\n[\n{\n"id": 1,\n"inputs": {... - """ - return await self.llm.aask( - msg=acknowledge, - system_msgs=[ - "Extracts and compresses the information about external system interfaces.", - "Return a markdown JSON list of objects, each object containing:\n" - '- an "id" key containing the interface id;\n' - '- an "inputs" key containing a dict of input parameters that consist of name and description pairs;\n' - '- an "outputs" key containing a dict of returns that consist of name and description pairs;\n', - ], - ) diff --git a/metagpt/actions/requirement_analysis/trd/detect_interaction.py b/metagpt/actions/requirement_analysis/trd/detect_interaction.py deleted file mode 100644 index b771931941..0000000000 --- a/metagpt/actions/requirement_analysis/trd/detect_interaction.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : detect_interaction.py -@Desc : The implementation of Chapter 2.1.6 of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" -from tenacity import retry, stop_after_attempt, wait_random_exponential - -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import general_after_log, to_markdown_code_block - - -@register_tool(include_functions=["run"]) -class DetectInteraction(Action): - """DetectInteraction deal with the following situations: - 1. Given a natural text of user requirements, it identifies the interaction events and the participants of those interactions from the original text. - """ - - @retry( - wait=wait_random_exponential(min=1, max=20), - stop=stop_after_attempt(6), - after=general_after_log(logger), - ) - async def run( - self, - *, - user_requirements: str, - use_case_actors: str, - legacy_interaction_events: str, - evaluation_conclusion: str, - ) -> str: - """ - Identifies interaction events and participants from the user requirements. - - Args: - user_requirements (str): A natural language text detailing the user's requirements. - use_case_actors (str): A description of the actors involved in the use case. - legacy_interaction_events (str): The previous version of the interaction events identified by you. - evaluation_conclusion (str): The external evaluation conclusions regarding the interactions events identified by you. - - Returns: - str: A string summarizing the identified interaction events and their participants. - - Example: - >>> detect_interaction = DetectInteraction() - >>> user_requirements = "User requirements 1. ..." - >>> use_case_actors = "- Actor: game player;\\n- System: snake game; \\n- External System: game center;" - >>> previous_version_interaction_events = "['interaction ...', ...]" - >>> evaluation_conclusion = "Issues: ..." - >>> interaction_events = await detect_interaction.run( - >>> user_requirements=user_requirements, - >>> use_case_actors=use_case_actors, - >>> legacy_interaction_events=previous_version_interaction_events, - >>> evaluation_conclusion=evaluation_conclusion, - >>> ) - >>> print(interaction_events) - "['interaction ...', ...]" - """ - msg = PROMPT.format( - use_case_actors=use_case_actors, - original_user_requirements=to_markdown_code_block(val=user_requirements), - previous_version_of_interaction_events=legacy_interaction_events, - the_evaluation_conclusion_of_previous_version_of_trd=evaluation_conclusion, - ) - return await self.llm.aask(msg=msg) - - -PROMPT = """ -## Actor, System, External System -{use_case_actors} - -## User Requirements -{original_user_requirements} - -## Legacy Interaction Events -{previous_version_of_interaction_events} - -## Evaluation Conclusion -{the_evaluation_conclusion_of_previous_version_of_trd} - ---- -You are a tool for capturing interaction events. -"Actor, System, External System" provides the possible participants of the interaction event; -"Legacy Interaction Events" is the contents of the interaction events that you output earlier; -Some descriptions in the "Evaluation Conclusion" relate to the content of "User Requirements", and these descriptions in the "Evaluation Conclusion" address some issues regarding the content of "Legacy Interaction Events"; -You need to capture the interaction events occurring in the description within the content of "User Requirements" word-for-word, including: -1. Who is interacting with whom. An interaction event has a maximum of 2 participants. If there are multiple participants, it indicates that multiple events are combined into one event and should be further split; -2. When an interaction event occurs, who is the initiator? What data did the initiator enter? -3. What data does the interaction event ultimately return according to the "User Requirements"? - -You can check the data flow described in the "User Requirements" to see if there are any missing interaction events; -Return a markdown JSON object list, each object of the list containing: -- a "name" key containing the name of the interaction event; -- a "participants" key containing a string list of the names of the two participants; -- a "initiator" key containing the name of the participant who initiate the interaction; -- a "input" key containing a natural text description about the input data; -""" diff --git a/metagpt/actions/requirement_analysis/trd/evaluate_trd.py b/metagpt/actions/requirement_analysis/trd/evaluate_trd.py deleted file mode 100644 index 5c256ed075..0000000000 --- a/metagpt/actions/requirement_analysis/trd/evaluate_trd.py +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : evaluate_trd.py -@Desc : The implementation of Chapter 2.1.6~2.1.7 of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" - -from metagpt.actions.requirement_analysis import EvaluateAction, EvaluationData -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import to_markdown_code_block - - -@register_tool(include_functions=["run"]) -class EvaluateTRD(EvaluateAction): - """EvaluateTRD deal with the following situations: - 1. Given a TRD, evaluates the quality and returns a conclusion. - """ - - async def run( - self, - *, - user_requirements: str, - use_case_actors: str, - trd: str, - interaction_events: str, - legacy_user_requirements_interaction_events: str = "", - ) -> EvaluationData: - """ - Evaluates the given TRD based on user requirements, use case actors, interaction events, and optionally external legacy interaction events. - - Args: - user_requirements (str): The requirements provided by the user. - use_case_actors (str): The actors involved in the use case. - trd (str): The TRD (Technical Requirements Document) to be evaluated. - interaction_events (str): The interaction events related to the user requirements and the TRD. - legacy_user_requirements_interaction_events (str, optional): External legacy interaction events tied to the user requirements. Defaults to an empty string. - - Returns: - EvaluationData: The conclusion of the TRD evaluation. - - Example: - >>> evaluate_trd = EvaluateTRD() - >>> user_requirements = "User requirements 1. ..." - >>> use_case_actors = "- Actor: game player;\\n- System: snake game; \\n- External System: game center;" - >>> trd = "## TRD\\n..." - >>> interaction_events = "['interaction ...', ...]" - >>> evaluation_conclusion = "Issues: ..." - >>> legacy_user_requirements_interaction_events = ["user requirements 1. ...", ...] - >>> evaluation = await evaluate_trd.run( - >>> user_requirements=user_requirements, - >>> use_case_actors=use_case_actors, - >>> trd=trd, - >>> interaction_events=interaction_events, - >>> legacy_user_requirements_interaction_events=str(legacy_user_requirements_interaction_events), - >>> ) - >>> is_pass = evaluation.is_pass - >>> print(is_pass) - True - >>> evaluation_conclusion = evaluation.conclusion - >>> print(evaluation_conclusion) - ## Conclustion\n balabalabala... - - """ - prompt = PROMPT.format( - use_case_actors=use_case_actors, - user_requirements=to_markdown_code_block(val=user_requirements), - trd=to_markdown_code_block(val=trd), - legacy_user_requirements_interaction_events=legacy_user_requirements_interaction_events, - interaction_events=interaction_events, - ) - return await self._vote(prompt) - - -PROMPT = """ -## Actor, System, External System -{use_case_actors} - -## User Requirements -{user_requirements} - -## TRD Design -{trd} - -## External Interaction Events -{legacy_user_requirements_interaction_events} - -## Interaction Events -{legacy_user_requirements_interaction_events} -{interaction_events} - ---- -You are a tool to evaluate the TRD design. -"Actor, System, External System" provides the all possible participants in interaction events; -"User Requirements" provides the original requirements description, any parts not mentioned in this description will be handled by other modules, so do not fabricate requirements; -"External Interaction Events" is provided by an external module for your use, its content is also referred to "Interaction Events" section; The content in "External Interaction Events" can be determined to be problem-free; -"External Interaction Events" provides some identified interaction events and the interacting participants based on the part of the content of the "User Requirements"; -"Interaction Events" provides some identified interaction events and the interacting participants based on the content of the "User Requirements"; -"TRD Design" provides a comprehensive design of the implementation steps for the original requirements, incorporating the interaction events from "Interaction Events" and adding additional steps to connect the complete upstream and downstream data flows; -In order to integrate the full upstream and downstream data flow, the "TRD Design" allows for the inclusion of steps that do not appear in the original requirements description, but do not conflict with those explicitly described in the "User Requirements"; -Which interactions from "Interaction Events" correspond to which steps in "TRD Design"? Please provide reasons. -Which aspects of "TRD Design" and "Interaction Events" do not align with the descriptions in "User Requirements"? Please provide detailed descriptions and reasons. -If the descriptions in "User Requirements" are divided into multiple steps in "TRD Design" and "Interaction Events," it can be considered compliant with the descriptions in "User Requirements" as long as it does not conflict with them; -There is a possibility of missing details in the descriptions of "User Requirements". Any additional steps in "TRD Design" and "Interaction Events" are considered compliant with "User Requirements" as long as they do not conflict with the descriptions provided in "User Requirements"; -If there are interaction events with external systems in "TRD Design", you must explicitly specify the ID of the external interface to use for the interaction events, the input and output parameters of the used external interface must explictly match the input and output of the interaction event; -Does the sequence of steps in "Interaction Events" cause performance or cost issues? Please provide detailed descriptions and reasons; -If each step of "TRD Design" has input data, its input data is provided either by the output of the previous steps or by participants of "Actor, System, External System", and there should be no passive data; -Return a markdown JSON object with: -- an "issues" key containing a string list of natural text about the issues that need to be addressed, found in the "TRD Design" if any exist, each issue found must provide a detailed description and include reasons; -- a "conclusion" key containing the evaluation conclusion; -- a "correspondence_between" key containing the judgement detail of the natural text string list about the correspondence between "Interaction Events" and "TRD Design" steps; -- a "misalignment" key containing the judgement detail of the natural text string list about the misalignment with "User Requirements"; -- a "is_pass" key containing a true boolean value if there is not any issue in the "TRD Design"; -""" diff --git a/metagpt/actions/requirement_analysis/trd/write_trd.py b/metagpt/actions/requirement_analysis/trd/write_trd.py deleted file mode 100644 index bad93ea766..0000000000 --- a/metagpt/actions/requirement_analysis/trd/write_trd.py +++ /dev/null @@ -1,261 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/6/13 -@Author : mashenquan -@File : write_trd.py -@Desc : The implementation of Chapter 2.1.6~2.1.7 of RFC243. https://deepwisdom.feishu.cn/wiki/QobGwPkImijoyukBUKHcrYetnBb -""" -from tenacity import retry, stop_after_attempt, wait_random_exponential - -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import general_after_log, to_markdown_code_block - - -@register_tool(include_functions=["run"]) -class WriteTRD(Action): - """WriteTRD deal with the following situations: - 1. Given some new user requirements, write out a new TRD(Technical Requirements Document). - 2. Given some incremental user requirements, update the legacy TRD. - """ - - async def run( - self, - *, - user_requirements: str = "", - use_case_actors: str, - available_external_interfaces: str, - evaluation_conclusion: str = "", - interaction_events: str, - previous_version_trd: str = "", - legacy_user_requirements: str = "", - legacy_user_requirements_trd: str = "", - legacy_user_requirements_interaction_events: str = "", - ) -> str: - """ - Handles the writing or updating of a Technical Requirements Document (TRD) based on user requirements. - - Args: - user_requirements (str): The new/incremental user requirements. - use_case_actors (str): Description of the actors involved in the use case. - available_external_interfaces (str): List of available external interfaces. - evaluation_conclusion (str, optional): The conclusion of the evaluation of the TRD written by you. Defaults to an empty string. - interaction_events (str): The interaction events related to the user requirements that you are handling. - previous_version_trd (str, optional): The previous version of the TRD written by you, for updating. - legacy_user_requirements (str, optional): Existing user requirements handled by an external object for your use. Defaults to an empty string. - legacy_user_requirements_trd (str, optional): The TRD associated with the existing user requirements handled by an external object for your use. Defaults to an empty string. - legacy_user_requirements_interaction_events (str, optional): Interaction events related to the existing user requirements handled by an external object for your use. Defaults to an empty string. - - Returns: - str: The newly created or updated TRD written by you. - - Example: - >>> # Given a new user requirements, write out a new TRD. - >>> user_requirements = "Write a 'snake game' TRD." - >>> use_case_actors = "- Actor: game player;\\n- System: snake game; \\n- External System: game center;" - >>> available_external_interfaces = "The available external interfaces returned by `CompressExternalInterfaces.run` are ..." - >>> previous_version_trd = "TRD ..." # The last version of the TRD written out if there is. - >>> evaluation_conclusion = "Conclusion ..." # The conclusion returned by `EvaluateTRD.run` if there is. - >>> interaction_events = "Interaction ..." # The interaction events returned by `DetectInteraction.run`. - >>> write_trd = WriteTRD() - >>> new_version_trd = await write_trd.run( - >>> user_requirements=user_requirements, - >>> use_case_actors=use_case_actors, - >>> available_external_interfaces=available_external_interfaces, - >>> evaluation_conclusion=evaluation_conclusion, - >>> interaction_events=interaction_events, - >>> previous_version_trd=previous_version_trd, - >>> ) - >>> print(new_version_trd) - ## Technical Requirements Document\n ... - - >>> # Given an incremental requirements, update the legacy TRD. - >>> legacy_user_requirements = ["User requirements 1. ...", "User requirements 2. ...", ...] - >>> legacy_user_requirements_trd = "## Technical Requirements Document\\n ..." # The TRD before integrating more user requirements. - >>> legacy_user_requirements_interaction_events = ["The interaction events list of user requirements 1 ...", "The interaction events list of user requiremnts 2 ...", ...] - >>> use_case_actors = "- Actor: game player;\\n- System: snake game; \\n- External System: game center;" - >>> available_external_interfaces = "The available external interfaces returned by `CompressExternalInterfaces.run` are ..." - >>> increment_requirements = "The incremental user requirements are ..." - >>> evaluation_conclusion = "Conclusion ..." # The conclusion returned by `EvaluateTRD.run` if there is. - >>> previous_version_trd = "TRD ..." # The last version of the TRD written out if there is. - >>> write_trd = WriteTRD() - >>> new_version_trd = await write_trd.run( - >>> user_requirements=increment_requirements, - >>> use_case_actors=use_case_actors, - >>> available_external_interfaces=available_external_interfaces, - >>> evaluation_conclusion=evaluation_conclusion, - >>> interaction_events=interaction_events, - >>> previous_version_trd=previous_version_trd, - >>> legacy_user_requirements=str(legacy_user_requirements), - >>> legacy_user_requirements_trd=legacy_user_requirements_trd, - >>> legacy_user_requirements_interaction_events=str(legacy_user_requirements_interaction_events), - >>> ) - >>> print(new_version_trd) - ## Technical Requirements Document\n ... - """ - if legacy_user_requirements: - return await self._write_incremental_trd( - use_case_actors=use_case_actors, - legacy_user_requirements=legacy_user_requirements, - available_external_interfaces=available_external_interfaces, - legacy_user_requirements_trd=legacy_user_requirements_trd, - legacy_user_requirements_interaction_events=legacy_user_requirements_interaction_events, - incremental_user_requirements=user_requirements, - previous_version_trd=previous_version_trd, - evaluation_conclusion=evaluation_conclusion, - incremental_user_requirements_interaction_events=interaction_events, - ) - return await self._write_new_trd( - use_case_actors=use_case_actors, - original_user_requirement=user_requirements, - available_external_interfaces=available_external_interfaces, - legacy_trd=previous_version_trd, - evaluation_conclusion=evaluation_conclusion, - interaction_events=interaction_events, - ) - - @retry( - wait=wait_random_exponential(min=1, max=20), - stop=stop_after_attempt(6), - after=general_after_log(logger), - ) - async def _write_new_trd( - self, - *, - use_case_actors: str, - original_user_requirement: str, - available_external_interfaces: str, - legacy_trd: str, - evaluation_conclusion: str, - interaction_events: str, - ) -> str: - prompt = NEW_PROMPT.format( - use_case_actors=use_case_actors, - original_user_requirement=to_markdown_code_block(val=original_user_requirement), - available_external_interfaces=available_external_interfaces, - legacy_trd=to_markdown_code_block(val=legacy_trd), - evaluation_conclusion=evaluation_conclusion, - interaction_events=interaction_events, - ) - return await self.llm.aask(prompt) - - @retry( - wait=wait_random_exponential(min=1, max=20), - stop=stop_after_attempt(6), - after=general_after_log(logger), - ) - async def _write_incremental_trd( - self, - *, - use_case_actors: str, - legacy_user_requirements: str, - available_external_interfaces: str, - legacy_user_requirements_trd: str, - legacy_user_requirements_interaction_events: str, - incremental_user_requirements: str, - previous_version_trd: str, - evaluation_conclusion: str, - incremental_user_requirements_interaction_events: str, - ): - prompt = INCREMENTAL_PROMPT.format( - use_case_actors=use_case_actors, - legacy_user_requirements=to_markdown_code_block(val=legacy_user_requirements), - available_external_interfaces=available_external_interfaces, - legacy_user_requirements_trd=to_markdown_code_block(val=legacy_user_requirements_trd), - legacy_user_requirements_interaction_events=legacy_user_requirements_interaction_events, - incremental_user_requirements=to_markdown_code_block(val=incremental_user_requirements), - previous_version_trd=to_markdown_code_block(val=previous_version_trd), - evaluation_conclusion=evaluation_conclusion, - incremental_user_requirements_interaction_events=incremental_user_requirements_interaction_events, - ) - return await self.llm.aask(prompt) - - -NEW_PROMPT = """ -## Actor, System, External System -{use_case_actors} - -## User Requirements -{original_user_requirement} - -## Available External Interfaces -{available_external_interfaces} - -## Legacy TRD -{legacy_trd} - -## Evaluation Conclusion -{evaluation_conclusion} - -## Interaction Events -{interaction_events} - ---- -You are a TRD generator. -The content of "Actor, System, External System" provides an explanation of actors and systems that appear in UML Use Case diagram; -The content of "Available External Interfaces" provides the candidate steps, along with the inputs and outputs of each step; -"User Requirements" provides the original requirements description, any parts not mentioned in this description will be handled by other modules, so do not fabricate requirements; -"Legacy TRD" provides the old version of the TRD based on the "User Requirements" and can serve as a reference for the new TRD; -"Evaluation Conclusion" provides a summary of the evaluation of the old TRD in the "Legacy TRD" and can serve as a reference for the new TRD; -"Interaction Events" provides some identified interaction events and the interacting participants based on the content of the "User Requirements"; -1. What inputs and outputs are described in the "User Requirements"? -2. How many steps are needed to achieve the inputs and outputs described in the "User Requirements"? Which actors from the "Actor, System, External System" section are involved in each step? What are the inputs and outputs of each step? Where is this output used, for example, as input for which interface or where it is required in the requirements, etc.? -3. Output a complete Technical Requirements Document (TRD): - 3.1. In the description, use the actor and system names defined in the "Actor, System, External System" section to describe the interactors; - 3.2. The content should include the original text of the requirements from "User Requirements"; - 3.3. In the TRD, each step can involve a maximum of two participants. If there are more than two participants, the step needs to be further split; - 3.4. In the TRD, each step must include detailed descriptions, inputs, outputs, participants, initiator, and the rationale for the step's existence. The rationale should reference the original text to justify it, such as specifying which interface requires the output of this step as parameters or where in the requirements this step is mandated, etc.; - 3.5. In the TRD, if you need to call interfaces of external systems, you must explicitly specify the interface IDs of the external systems you want to call; -""" - -INCREMENTAL_PROMPT = """ -## Actor, System, External System -{use_case_actors} - -## Legacy User Requirements -{legacy_user_requirements} - -## Available External Interfaces -{available_external_interfaces} - -## The TRD of Legacy User Requirements -{legacy_user_requirements_trd} - - -## The Interaction Events of Legacy User Requirements -{legacy_user_requirements_interaction_events} - -## Incremental Requirements -{incremental_user_requirements} - -## Legacy TRD -{previous_version_trd} - -## Evaluation Conclusion -{evaluation_conclusion} - -## Interaction Events -{incremental_user_requirements_interaction_events} - ---- -You are a TRD generator. -The content of "Actor, System, External System" provides an explanation of actors and systems that appear in UML Use Case diagram; -The content of "Available External Interfaces" provides the candidate steps, along with the inputs and outputs of each step; -"Legacy User Requirements" provides the original requirements description handled by other modules for your use; -"The TRD of Legacy User Requirements" is the TRD generated by other modules based on the "Legacy User Requirements" for your use; -"The Interaction Events of Legacy User Requirements" is the interaction events list generated by other modules based on the "Legacy User Requirements" for your use; -"Incremental Requirements" provides the original requirements description that you need to address, any parts not mentioned in this description will be handled by other modules, so do not fabricate requirements; -The requirements in "Legacy User Requirements" combined with the "Incremental Requirements" form a complete set of requirements, therefore, you need to add the TRD portion of the "Incremental Requirements" to "The TRD of Legacy User Requirements", the added content must not conflict with the original content of "The TRD of Legacy User Requirements"; -"Legacy TRD" provides the old version of the TRD you previously wrote based on the "Incremental Requirements" and can serve as a reference for the new TRD; -"Evaluation Conclusion" provides a summary of the evaluation of the old TRD you generated in the "Legacy TRD", and the identified issues can serve as a reference for the new TRD you create; -"Interaction Events" provides some identified interaction events and the interacting participants based on the content of the "Incremental Requirements"; -1. What inputs and outputs are described in the "Incremental Requirements"? -2. How many steps are needed to achieve the inputs and outputs described in the "Incremental Requirements"? Which actors from the "Actor, System, External System" section are involved in each step? What are the inputs and outputs of each step? Where is this output used, for example, as input for which interface or where it is required in the requirements, etc.? -3. Output a complete Technical Requirements Document (TRD): - 3.1. In the description, use the actor and system names defined in the "Actor, System, External System" section to describe the interactors; - 3.2. The content should include the original text of the requirements from "User Requirements"; - 3.3. In the TRD, each step can involve a maximum of two participants. If there are more than two participants, the step needs to be further split; - 3.4. In the TRD, each step must include detailed descriptions, inputs, outputs, participants, initiator, and the rationale for the step's existence. The rationale should reference the original text to justify it, such as specifying which interface requires the output of this step as parameters or where in the requirements this step is mandated, etc. - """ diff --git a/metagpt/actions/research.py b/metagpt/actions/research.py index 2665844856..72c733d81c 100644 --- a/metagpt/actions/research.py +++ b/metagpt/actions/research.py @@ -8,11 +8,11 @@ from pydantic import TypeAdapter, model_validator -from metagpt.actions import Action -from metagpt.logs import logger +from metagpt.core.actions import Action +from metagpt.core.logs import logger +from metagpt.core.utils.common import OutputParser from metagpt.tools.search_engine import SearchEngine from metagpt.tools.web_browser_engine import WebBrowserEngine -from metagpt.utils.common import OutputParser from metagpt.utils.parse_html import WebPage from metagpt.utils.text import generate_prompt_chunk, reduce_message_length diff --git a/metagpt/actions/run_code.py b/metagpt/actions/run_code.py index b2c33c19b2..0d6e728c35 100644 --- a/metagpt/actions/run_code.py +++ b/metagpt/actions/run_code.py @@ -21,10 +21,10 @@ from pydantic import Field -from metagpt.actions.action import Action -from metagpt.logs import logger -from metagpt.schema import RunCodeContext, RunCodeResult -from metagpt.utils.exceptions import handle_exception +from metagpt.core.actions import Action +from metagpt.core.logs import logger +from metagpt.core.schema import RunCodeContext, RunCodeResult +from metagpt.core.utils.exceptions import handle_exception PROMPT_TEMPLATE = """ Role: You are a senior development and qa engineer, your role is summarize the code running result. diff --git a/metagpt/actions/di/run_command.py b/metagpt/actions/run_command.py similarity index 68% rename from metagpt/actions/di/run_command.py rename to metagpt/actions/run_command.py index 510bb5d920..c71eec6199 100644 --- a/metagpt/actions/di/run_command.py +++ b/metagpt/actions/run_command.py @@ -1,4 +1,4 @@ -from metagpt.actions import Action +from metagpt.core.actions import Action class RunCommand(Action): diff --git a/metagpt/actions/search_and_summarize.py b/metagpt/actions/search_and_summarize.py deleted file mode 100644 index 7eed7381b9..0000000000 --- a/metagpt/actions/search_and_summarize.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/5/23 17:26 -@Author : alexanderwu -@File : search_google.py -""" -from typing import Optional - -import pydantic -from pydantic import model_validator - -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.schema import Message -from metagpt.tools.search_engine import SearchEngine - -SEARCH_AND_SUMMARIZE_SYSTEM = """### Requirements -1. 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. -- The context is for reference only. If it is irrelevant to the user's search request history, please reduce its reference and usage. -2. 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. -3. The reply should be graceful, clear, non-repetitive, smoothly written, and of moderate length, in {LANG}. - -### Dialogue History (For example) -A: MLOps competitors - -### Current Question (For example) -A: MLOps competitors - -### Current Reply (For example) -1. Alteryx Designer: etc. if any -2. Matlab: ditto -3. IBM SPSS Statistics -4. RapidMiner Studio -5. DataRobot AI Platform -6. Databricks Lakehouse Platform -7. Amazon SageMaker -8. Dataiku -""" - -SEARCH_AND_SUMMARIZE_SYSTEM_EN_US = SEARCH_AND_SUMMARIZE_SYSTEM.format(LANG="en-us") - -SEARCH_AND_SUMMARIZE_PROMPT = """ -### Reference Information -{CONTEXT} - -### Dialogue History -{QUERY_HISTORY} -{QUERY} - -### Current Question -{QUERY} - -### Current Reply: Based on the information, please write the reply to the Question - - -""" - -SEARCH_AND_SUMMARIZE_SALES_SYSTEM = """## Requirements -1. 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. -- The context is for reference only. If it is irrelevant to the user's search request history, please reduce its reference and usage. -2. 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. -3. The reply should be graceful, clear, non-repetitive, smoothly written, and of moderate length, in Simplified Chinese. - -# Example -## Reference Information -... - -## Dialogue History -user: Which facial cleanser is good for oily skin? -Salesperson: Hello, for oily skin, it is suggested to choose a product that can deeply cleanse, control oil, and is gentle and skin-friendly. According to customer feedback and market reputation, the following facial cleansers are recommended:... -user: Do you have any by L'Oreal? -> Salesperson: ... - -## Ideal Answer -Yes, I've selected the following for you: -1. L'Oreal Men's Facial Cleanser: Oil control, anti-acne, balance of water and oil, pore purification, effectively against blackheads, deep exfoliation, refuse oil shine. Dense foam, not tight after washing. -2. L'Oreal Age Perfect Hydrating Cleanser: Added with sodium cocoyl glycinate and Centella Asiatica, two effective ingredients, it can deeply cleanse, tighten the skin, gentle and not tight. -""" - -SEARCH_AND_SUMMARIZE_SALES_PROMPT = """ -## Reference Information -{CONTEXT} - -## Dialogue History -{QUERY_HISTORY} -{QUERY} -> {ROLE}: - -""" - -SEARCH_FOOD = """ -# User Search Request -What are some delicious foods in Xiamen? - -# Requirements -You are a member of a professional butler team and will provide helpful suggestions: -1. Please summarize the user's search request based on the context and avoid including unrelated text. -2. Use [main text](reference link) in markdown format to **naturally annotate** 3-5 textual elements (such as product words or similar text sections) within the main text for easy navigation. -3. The response should be elegant, clear, **without any repetition of text**, smoothly written, and of moderate length. -""" - - -class SearchAndSummarize(Action): - name: str = "" - content: Optional[str] = None - search_engine: SearchEngine = None - result: str = "" - - @model_validator(mode="after") - def validate_search_engine(self): - if self.search_engine is None: - try: - config = self.config - search_engine = SearchEngine.from_search_config(config.search, proxy=config.proxy) - except pydantic.ValidationError: - search_engine = None - - self.search_engine = search_engine - return self - - async def run(self, context: list[Message], system_text=SEARCH_AND_SUMMARIZE_SYSTEM) -> str: - if self.search_engine is None: - logger.warning("Configure one of SERPAPI_API_KEY, SERPER_API_KEY, GOOGLE_API_KEY to unlock full feature") - return "" - - query = context[-1].content - # logger.debug(query) - rsp = await self.search_engine.run(query) - self.result = rsp - if not rsp: - logger.error("empty rsp...") - return "" - # logger.info(rsp) - - system_prompt = [system_text] - - prompt = SEARCH_AND_SUMMARIZE_PROMPT.format( - ROLE=self.prefix, - CONTEXT=rsp, - QUERY_HISTORY="\n".join([str(i) for i in context[:-1]]), - QUERY=str(context[-1]), - ) - result = await self._aask(prompt, system_prompt) - logger.debug(prompt) - logger.debug(result) - return result diff --git a/metagpt/actions/search_enhanced_qa.py b/metagpt/actions/search_enhanced_qa.py index 1427f9b195..5c723b5c52 100644 --- a/metagpt/actions/search_enhanced_qa.py +++ b/metagpt/actions/search_enhanced_qa.py @@ -6,14 +6,14 @@ from pydantic import Field, PrivateAttr, model_validator -from metagpt.actions import Action from metagpt.actions.research import CollectLinks, WebBrowseAndSummarize -from metagpt.logs import logger -from metagpt.tools.tool_registry import register_tool +from metagpt.core.actions import Action +from metagpt.core.logs import logger +from metagpt.core.tools.tool_registry import register_tool +from metagpt.core.utils.common import CodeParser +from metagpt.core.utils.report import ThoughtReporter from metagpt.tools.web_browser_engine import WebBrowserEngine -from metagpt.utils.common import CodeParser from metagpt.utils.parse_html import WebPage -from metagpt.utils.report import ThoughtReporter REWRITE_QUERY_PROMPT = """ Role: You are a highly efficient assistant that provide a better search query for web search engine to answer the given question. diff --git a/metagpt/actions/skill_action.py b/metagpt/actions/skill_action.py deleted file mode 100644 index 078ab008a5..0000000000 --- a/metagpt/actions/skill_action.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/8/28 -@Author : mashenquan -@File : skill_action.py -@Desc : Call learned skill -""" -from __future__ import annotations - -import ast -import importlib -import traceback -from copy import deepcopy -from typing import Dict, Optional - -from metagpt.actions import Action -from metagpt.learn.skill_loader import Skill -from metagpt.logs import logger -from metagpt.schema import Message - - -# TOTEST -class ArgumentsParingAction(Action): - skill: Skill - ask: str - rsp: Optional[Message] = None - args: Optional[Dict] = None - - @property - def prompt(self): - prompt = f"{self.skill.name} function parameters description:\n" - for k, v in self.skill.arguments.items(): - prompt += f"parameter `{k}`: {v}\n" - prompt += "\n---\n" - prompt += "Examples:\n" - for e in self.skill.examples: - prompt += f"If want you to do `{e.ask}`, return `{e.answer}` brief and clear.\n" - prompt += "\n---\n" - prompt += ( - f"\nRefer to the `{self.skill.name}` function description, and fill in the function parameters according " - 'to the example "I want you to do xx" in the Examples section.' - f"\nNow I want you to do `{self.ask}`, return function parameters in Examples format above, brief and " - "clear." - ) - return prompt - - async def run(self, with_message=None, **kwargs) -> Message: - prompt = self.prompt - rsp = await self.llm.aask( - msg=prompt, - system_msgs=["You are a function parser.", "You can convert spoken words into function parameters."], - stream=False, - ) - logger.debug(f"SKILL:{prompt}\n, RESULT:{rsp}") - self.args = ArgumentsParingAction.parse_arguments(skill_name=self.skill.name, txt=rsp) - self.rsp = Message(content=rsp, role="assistant", instruct_content=self.args, cause_by=self) - return self.rsp - - @staticmethod - def parse_arguments(skill_name, txt) -> dict: - prefix = skill_name + "(" - if prefix not in txt: - logger.error(f"{skill_name} not in {txt}") - return None - if ")" not in txt: - logger.error(f"')' not in {txt}") - return None - begin_ix = txt.find(prefix) - end_ix = txt.rfind(")") - args_txt = txt[begin_ix + len(prefix) : end_ix] - logger.info(args_txt) - fake_expression = f"dict({args_txt})" - parsed_expression = ast.parse(fake_expression, mode="eval") - args = {} - for keyword in parsed_expression.body.keywords: - key = keyword.arg - value = ast.literal_eval(keyword.value) - args[key] = value - return args - - -class SkillAction(Action): - skill: Skill - args: Dict - rsp: Optional[Message] = None - - async def run(self, with_message=None, **kwargs) -> Message: - """Run action""" - options = deepcopy(kwargs) - if self.args: - for k in self.args.keys(): - if k in options: - options.pop(k) - try: - rsp = await self.find_and_call_function(self.skill.name, args=self.args, **options) - self.rsp = Message(content=rsp, role="assistant", cause_by=self) - except Exception as e: - logger.exception(f"{e}, traceback:{traceback.format_exc()}") - self.rsp = Message(content=f"Error: {e}", role="assistant", cause_by=self) - return self.rsp - - @staticmethod - async def find_and_call_function(function_name, args, **kwargs) -> str: - try: - module = importlib.import_module("metagpt.learn") - function = getattr(module, function_name) - # Invoke function and return result - result = await function(**args, **kwargs) - return result - except (ModuleNotFoundError, AttributeError): - logger.error(f"{function_name} not found") - raise ValueError(f"{function_name} not found") diff --git a/metagpt/actions/summarize_code.py b/metagpt/actions/summarize_code.py index e3556caa7b..452b585992 100644 --- a/metagpt/actions/summarize_code.py +++ b/metagpt/actions/summarize_code.py @@ -11,10 +11,10 @@ from pydantic import BaseModel, Field from tenacity import retry, stop_after_attempt, wait_random_exponential -from metagpt.actions.action import Action -from metagpt.logs import logger -from metagpt.schema import CodeSummarizeContext -from metagpt.utils.common import get_markdown_code_block_type +from metagpt.core.actions import Action +from metagpt.core.logs import logger +from metagpt.core.schema import CodeSummarizeContext +from metagpt.core.utils.common import get_markdown_code_block_type from metagpt.utils.project_repo import ProjectRepo PROMPT_TEMPLATE = """ diff --git a/metagpt/actions/talk_action.py b/metagpt/actions/talk_action.py deleted file mode 100644 index 3fec327838..0000000000 --- a/metagpt/actions/talk_action.py +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/8/28 -@Author : mashenquan -@File : talk_action.py -@Desc : Act as it’s a talk -""" -from typing import Optional - -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.schema import Message - - -class TalkAction(Action): - i_context: str - history_summary: str = "" - knowledge: str = "" - rsp: Optional[Message] = None - - @property - def agent_description(self): - return self.context.kwargs.agent_description - - @property - def language(self): - return self.context.kwargs.language or self.config.language - - @property - def prompt(self): - prompt = "" - if self.agent_description: - prompt = ( - f"You are {self.agent_description}. Your responses should align with the role-play agreement, " - f"maintaining the character's persona and habits. When faced with unrelated questions, playfully " - f"decline to answer without revealing your AI nature to preserve the character's image.\n\n" - ) - prompt += f"Knowledge:\n{self.knowledge}\n\n" if self.knowledge else "" - prompt += f"{self.history_summary}\n\n" - prompt += ( - "If the information is insufficient, you can search in the historical conversation or knowledge above.\n" - ) - language = self.language - prompt += ( - f"Answer the following questions strictly in {language}, and the answers must follow the Markdown format.\n " - f"{self.i_context}" - ) - logger.debug(f"PROMPT: {prompt}") - return prompt - - @property - def prompt_gpt4(self): - kvs = { - "{role}": self.agent_description or "", - "{history}": self.history_summary or "", - "{knowledge}": self.knowledge or "", - "{language}": self.language, - "{ask}": self.i_context, - } - prompt = TalkActionPrompt.FORMATION_LOOSE - for k, v in kvs.items(): - prompt = prompt.replace(k, v) - logger.info(f"PROMPT: {prompt}") - return prompt - - # async def run_old(self, *args, **kwargs) -> ActionOutput: - # prompt = self.prompt - # rsp = await self.llm.aask(msg=prompt, system_msgs=[]) - # logger.debug(f"PROMPT:{prompt}\nRESULT:{rsp}\n") - # self._rsp = ActionOutput(content=rsp) - # return self._rsp - - @property - def aask_args(self): - language = self.language - system_msgs = [ - f"You are {self.agent_description}.", - "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.", - "If the information is insufficient, you can search in the context or knowledge.", - f"Answer the following questions strictly in {language}, and the answers must follow the Markdown format.", - ] - format_msgs = [] - if self.knowledge: - format_msgs.append({"role": "assistant", "content": self.knowledge}) - if self.history_summary: - format_msgs.append({"role": "assistant", "content": self.history_summary}) - return self.i_context, format_msgs, system_msgs - - async def run(self, with_message=None, **kwargs) -> Message: - msg, format_msgs, system_msgs = self.aask_args - rsp = await self.llm.aask(msg=msg, format_msgs=format_msgs, system_msgs=system_msgs, stream=False) - self.rsp = Message(content=rsp, role="assistant", cause_by=self) - return self.rsp - - -class TalkActionPrompt: - FORMATION = """Formation: "Capacity and role" defines the role you are currently playing; - "[HISTORY_BEGIN]" and "[HISTORY_END]" tags enclose the historical conversation; - "[KNOWLEDGE_BEGIN]" and "[KNOWLEDGE_END]" tags enclose the knowledge may help for your responses; - "Statement" defines the work detail you need to complete at this stage; - "[ASK_BEGIN]" and [ASK_END] tags enclose the questions; - "Constraint" defines the conditions that your responses must comply with. - "Personality" defines your language style。 - "Insight" provides a deeper understanding of the characters' inner traits. - "Initial" defines the initial setup of a character. - -Capacity and role: {role} -Statement: 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. - -[HISTORY_BEGIN] - -{history} - -[HISTORY_END] - -[KNOWLEDGE_BEGIN] - -{knowledge} - -[KNOWLEDGE_END] - -Statement: If the information is insufficient, you can search in the historical conversation or knowledge. -Statement: Unless you are a language professional, answer the following questions strictly in {language} -, and the answers must follow the Markdown format. Strictly excluding any tag likes "[HISTORY_BEGIN]" -, "[HISTORY_END]", "[KNOWLEDGE_BEGIN]", "[KNOWLEDGE_END]" in responses. - - -{ask} -""" - - FORMATION_LOOSE = """Formation: "Capacity and role" defines the role you are currently playing; - "[HISTORY_BEGIN]" and "[HISTORY_END]" tags enclose the historical conversation; - "[KNOWLEDGE_BEGIN]" and "[KNOWLEDGE_END]" tags enclose the knowledge may help for your responses; - "Statement" defines the work detail you need to complete at this stage; - "Constraint" defines the conditions that your responses must comply with. - "Personality" defines your language style。 - "Insight" provides a deeper understanding of the characters' inner traits. - "Initial" defines the initial setup of a character. - -Capacity and role: {role} -Statement: Your responses should 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. - -[HISTORY_BEGIN] - -{history} - -[HISTORY_END] - -[KNOWLEDGE_BEGIN] - -{knowledge} - -[KNOWLEDGE_END] - -Statement: If the information is insufficient, you can search in the historical conversation or knowledge. -Statement: Unless you are a language professional, answer the following questions strictly in {language} -, and the answers must follow the Markdown format. Strictly excluding any tag likes "[HISTORY_BEGIN]" -, "[HISTORY_END]", "[KNOWLEDGE_BEGIN]", "[KNOWLEDGE_END]" in responses. - - -{ask} -""" diff --git a/metagpt/actions/di/write_analysis_code.py b/metagpt/actions/write_analysis_code.py similarity index 92% rename from metagpt/actions/di/write_analysis_code.py rename to metagpt/actions/write_analysis_code.py index 80e2c5ddce..c472b52e46 100644 --- a/metagpt/actions/di/write_analysis_code.py +++ b/metagpt/actions/write_analysis_code.py @@ -6,8 +6,10 @@ """ from __future__ import annotations -from metagpt.actions import Action -from metagpt.prompts.di.write_analysis_code import ( +from metagpt.core.actions import Action +from metagpt.core.schema import Message, Plan +from metagpt.core.utils.common import CodeParser, remove_comments +from metagpt.prompts.write_analysis_code import ( CHECK_DATA_PROMPT, DEBUG_REFLECTION_EXAMPLE, INTERPRETER_SYSTEM_MSG, @@ -15,8 +17,6 @@ REFLECTION_SYSTEM_MSG, STRUCTUAL_PROMPT, ) -from metagpt.schema import Message, Plan -from metagpt.utils.common import CodeParser, remove_comments class WriteAnalysisCode(Action): diff --git a/metagpt/actions/write_code.py b/metagpt/actions/write_code.py index da25fe621c..c7bbb6b6fe 100644 --- a/metagpt/actions/write_code.py +++ b/metagpt/actions/write_code.py @@ -22,14 +22,14 @@ from pydantic import BaseModel, Field from tenacity import retry, stop_after_attempt, wait_random_exponential -from metagpt.actions.action import Action from metagpt.actions.project_management_an import REFINED_TASK_LIST, TASK_LIST from metagpt.actions.write_code_plan_and_change_an import REFINED_TEMPLATE -from metagpt.logs import logger -from metagpt.schema import CodingContext, Document, RunCodeResult -from metagpt.utils.common import CodeParser, get_markdown_code_block_type +from metagpt.core.actions import Action +from metagpt.core.logs import logger +from metagpt.core.schema import CodingContext, Document, RunCodeResult +from metagpt.core.utils.common import CodeParser, get_markdown_code_block_type +from metagpt.core.utils.report import EditorReporter from metagpt.utils.project_repo import ProjectRepo -from metagpt.utils.report import EditorReporter PROMPT_TEMPLATE = """ NOTICE diff --git a/metagpt/actions/write_code_an_draft.py b/metagpt/actions/write_code_an_draft.py deleted file mode 100644 index d6622284d2..0000000000 --- a/metagpt/actions/write_code_an_draft.py +++ /dev/null @@ -1,589 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Author : alexanderwu -@File : write_review.py -""" -import asyncio -from typing import List, Literal - -from metagpt.actions import Action -from metagpt.actions.action_node import ActionNode - -REVIEW = ActionNode( - key="Review", - expected_type=List[str], - instruction="Act as an experienced reviewer and critically assess the given output. Provide specific and" - " constructive feedback, highlighting areas for improvement and suggesting changes.", - example=[ - "The logic in the function `calculate_total` seems flawed. Shouldn't it consider the discount rate as well?", - "The TODO function is not implemented yet? Should we implement it before commit?", - ], -) - -REVIEW_RESULT = ActionNode( - key="ReviewResult", - expected_type=Literal["LGTM", "LBTM"], - instruction="LGTM/LBTM. If the code is fully implemented, " "give a LGTM, otherwise provide a LBTM.", - example="LBTM", -) - -NEXT_STEPS = ActionNode( - key="NextSteps", - expected_type=str, - instruction="Based on the code review outcome, suggest actionable steps. This can include code changes, " - "refactoring suggestions, or any follow-up tasks.", - example="""1. Refactor the `process_data` method to improve readability and efficiency. -2. Cover edge cases in the `validate_user` function. -3. Implement a the TODO in the `calculate_total` function. -4. Fix the `handle_events` method to update the game state only if a move is successful. - ```python - def handle_events(self): - for event in pygame.event.get(): - if event.type == pygame.QUIT: - return False - if event.type == pygame.KEYDOWN: - moved = False - if event.key == pygame.K_UP: - moved = self.game.move('UP') - elif event.key == pygame.K_DOWN: - moved = self.game.move('DOWN') - elif event.key == pygame.K_LEFT: - moved = self.game.move('LEFT') - elif event.key == pygame.K_RIGHT: - moved = self.game.move('RIGHT') - if moved: - # Update the game state only if a move was successful - self.render() - return True - ``` -""", -) - -WRITE_DRAFT = ActionNode( - key="WriteDraft", - expected_type=str, - instruction="Could you write draft code for move function in order to implement it?", - example="Draft: ...", -) - - -WRITE_FUNCTION = ActionNode( - key="WriteFunction", - expected_type=str, - instruction="write code for the function not implemented.", - example=""" -```Code -... -``` -""", -) - - -REWRITE_CODE = ActionNode( - key="RewriteCode", - expected_type=str, - instruction="""rewrite code based on the Review and Actions""", - example=""" -```python -## example.py -def calculate_total(price, quantity): - total = price * quantity -``` -""", -) - - -CODE_REVIEW_CONTEXT = """ -# System -Role: 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. -Language: 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. - -# Context -## System Design -{"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\ - class Game {\ - -board Array\ - -score Number\ - -bestScore Number\ - +constructor()\ - +startGame()\ - +move(direction: String)\ - +getBoard() Array\ - +getScore() Number\ - +getBestScore() Number\ - +setBestScore(score: Number)\ - }\ - class Storage {\ - +getBestScore() Number\ - +setBestScore(score: Number)\ - }\ - class Main {\ - +init()\ - +bindEvents()\ - }\ - Game --> Storage : uses\ - Main --> Game : uses", "Program call flow": "sequenceDiagram\ - participant M as Main\ - participant G as Game\ - participant S as Storage\ - M->>G: init()\ - G->>S: getBestScore()\ - S-->>G: return bestScore\ - M->>G: bindEvents()\ - M->>G: startGame()\ - loop Game Loop\ - M->>G: move(direction)\ - G->>S: setBestScore(score)\ - S-->>G: return\ - end", "Anything UNCLEAR": "目前项目要求明确,没有不清楚的地方。"} - -## Tasks -{"Required packages": ["无需第三方包"], "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": "目前项目要求明确,没有不清楚的地方。"} - -## Code Files ------ index.html - - - - - - 2048游戏 - - - - -
-

2048

-
-
-
分数
-
{{ score }}
-
-
-
最高分
-
{{ bestScore }}
-
-
-
-
-
- {{ cell !== 0 ? cell : \'\' }} -
-
-
- -
- - - - - - - - ------ styles.css -/* styles.css */ -body, html { - margin: 0; - padding: 0; - font-family: \'Arial\', sans-serif; -} - -#app { - text-align: center; - font-size: 18px; - color: #776e65; -} - -h1 { - color: #776e65; - font-size: 72px; - font-weight: bold; - margin: 20px 0; -} - -.scores-container { - display: flex; - justify-content: center; - margin-bottom: 20px; -} - -.score-container, .best-container { - background: #bbada0; - padding: 10px; - border-radius: 5px; - margin: 0 10px; - min-width: 100px; - text-align: center; -} - -.score-header, .best-header { - color: #eee4da; - font-size: 18px; - margin-bottom: 5px; -} - -.game-container { - max-width: 500px; - margin: 0 auto 20px; - background: #bbada0; - padding: 15px; - border-radius: 10px; - position: relative; -} - -.grid-row { - display: flex; -} - -.grid-cell { - background: #cdc1b4; - width: 100px; - height: 100px; - margin: 5px; - display: flex; - justify-content: center; - align-items: center; - font-size: 35px; - font-weight: bold; - color: #776e65; - border-radius: 3px; -} - -/* Dynamic classes for different number cells */ -.number-cell-2 { - background: #eee4da; -} - -.number-cell-4 { - background: #ede0c8; -} - -.number-cell-8 { - background: #f2b179; - color: #f9f6f2; -} - -.number-cell-16 { - background: #f59563; - color: #f9f6f2; -} - -.number-cell-32 { - background: #f67c5f; - color: #f9f6f2; -} - -.number-cell-64 { - background: #f65e3b; - color: #f9f6f2; -} - -.number-cell-128 { - background: #edcf72; - color: #f9f6f2; -} - -.number-cell-256 { - background: #edcc61; - color: #f9f6f2; -} - -.number-cell-512 { - background: #edc850; - color: #f9f6f2; -} - -.number-cell-1024 { - background: #edc53f; - color: #f9f6f2; -} - -.number-cell-2048 { - background: #edc22e; - color: #f9f6f2; -} - -/* Larger numbers need smaller font sizes */ -.number-cell-1024, .number-cell-2048 { - font-size: 30px; -} - -button { - background-color: #8f7a66; - color: #f9f6f2; - border: none; - border-radius: 3px; - padding: 10px 20px; - font-size: 18px; - cursor: pointer; - outline: none; -} - -button:hover { - background-color: #9f8b76; -} - ------ storage.js -## storage.js -class Storage { - // 获取最高分 - getBestScore() { - // 尝试从localStorage中获取最高分,如果不存在则默认为0 - const bestScore = localStorage.getItem(\'bestScore\'); - return bestScore ? Number(bestScore) : 0; - } - - // 设置最高分 - setBestScore(score) { - // 将最高分设置到localStorage中 - localStorage.setItem(\'bestScore\', score.toString()); - } -} - - - -## Code to be Reviewed: game.js -```Code -## game.js -class Game { - constructor() { - this.board = this.createEmptyBoard(); - this.score = 0; - this.bestScore = 0; - } - - createEmptyBoard() { - const board = []; - for (let i = 0; i < 4; i++) { - board[i] = [0, 0, 0, 0]; - } - return board; - } - - startGame() { - this.board = this.createEmptyBoard(); - this.score = 0; - this.addRandomTile(); - this.addRandomTile(); - } - - addRandomTile() { - let emptyCells = []; - for (let r = 0; r < 4; r++) { - for (let c = 0; c < 4; c++) { - if (this.board[r][c] === 0) { - emptyCells.push({ r, c }); - } - } - } - if (emptyCells.length > 0) { - let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)]; - this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4; - } - } - - move(direction) { - // This function will handle the logic for moving tiles - // in the specified direction and merging them - // It will also update the score and add a new random tile if the move is successful - // The actual implementation of this function is complex and would require - // a significant amount of code to handle all the cases for moving and merging tiles - // For the purposes of this example, we will not implement the full logic - // Instead, we will just call addRandomTile to simulate a move - this.addRandomTile(); - } - - getBoard() { - return this.board; - } - - getScore() { - return this.score; - } - - getBestScore() { - return this.bestScore; - } - - setBestScore(score) { - this.bestScore = score; - } -} - -``` -""" - - -CODE_REVIEW_SMALLEST_CONTEXT = """ -## Code to be Reviewed: game.js -```Code -// game.js -class Game { - constructor() { - this.board = this.createEmptyBoard(); - this.score = 0; - this.bestScore = 0; - } - - createEmptyBoard() { - const board = []; - for (let i = 0; i < 4; i++) { - board[i] = [0, 0, 0, 0]; - } - return board; - } - - startGame() { - this.board = this.createEmptyBoard(); - this.score = 0; - this.addRandomTile(); - this.addRandomTile(); - } - - addRandomTile() { - let emptyCells = []; - for (let r = 0; r < 4; r++) { - for (let c = 0; c < 4; c++) { - if (this.board[r][c] === 0) { - emptyCells.push({ r, c }); - } - } - } - if (emptyCells.length > 0) { - let randomCell = emptyCells[Math.floor(Math.random() * emptyCells.length)]; - this.board[randomCell.r][randomCell.c] = Math.random() < 0.9 ? 2 : 4; - } - } - - move(direction) { - // This function will handle the logic for moving tiles - // in the specified direction and merging them - // It will also update the score and add a new random tile if the move is successful - // The actual implementation of this function is complex and would require - // a significant amount of code to handle all the cases for moving and merging tiles - // For the purposes of this example, we will not implement the full logic - // Instead, we will just call addRandomTile to simulate a move - this.addRandomTile(); - } - - getBoard() { - return this.board; - } - - getScore() { - return this.score; - } - - getBestScore() { - return this.bestScore; - } - - setBestScore(score) { - this.bestScore = score; - } -} - -``` -""" - - -CODE_REVIEW_SAMPLE = """ -## Code Review: game.js -1. 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. -2. The code logic is not completely correct. The `move` method is not implemented, which means the game cannot process player moves. -3. The existing code follows the "Data structures and interfaces" in terms of class structure but lacks full method implementations. -4. Not all functions are implemented. The `move` method is incomplete and does not handle the logic for moving and merging tiles. -5. All necessary pre-dependencies seem to be imported since the code does not indicate the need for additional imports. -6. 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. - -## Actions -1. 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: - ```javascript - move(direction) { - // Simplified logic for moving tiles up - if (direction === \'up\') { - for (let col = 0; col < 4; col++) { - let tiles = this.board.map(row => row[col]).filter(val => val !== 0); - let merged = []; - for (let i = 0; i < tiles.length; i++) { - if (tiles[i] === tiles[i + 1]) { - tiles[i] *= 2; - this.score += tiles[i]; - tiles[i + 1] = 0; - merged.push(i); - } - } - tiles = tiles.filter(val => val !== 0); - while (tiles.length < 4) { - tiles.push(0); - } - for (let row = 0; row < 4; row++) { - this.board[row][col] = tiles[row]; - } - } - } - // Additional logic needed for \'down\', \'left\', \'right\' - // ... - this.addRandomTile(); - } - ``` -2. 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: - ```javascript - startGame() { - this.board = this.createEmptyBoard(); - this.score = 0; - this.bestScore = new Storage().getBestScore(); // Retrieve the best score from storage - this.addRandomTile(); - this.addRandomTile(); - } - - setBestScore(score) { - if (score > this.bestScore) { - this.bestScore = score; - new Storage().setBestScore(score); // Set the new best score in storage - } - } - ``` - -## Code Review Result -LBTM - -``` -""" - - -WRITE_CODE_NODE = ActionNode.from_children("WRITE_REVIEW_NODE", [REVIEW, REVIEW_RESULT, NEXT_STEPS]) -WRITE_MOVE_NODE = ActionNode.from_children("WRITE_MOVE_NODE", [WRITE_DRAFT, WRITE_FUNCTION]) - - -CR_FOR_MOVE_FUNCTION_BY_3 = """ -The 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: - -1. Encapsulation: The logic for moving and merging tiles could be encapsulated into smaller, reusable functions to improve readability and maintainability. - -2. 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. - -3. 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. - -4. 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. - -Overall, 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. -""" - - -class WriteCodeAN(Action): - """Write a code review for the context.""" - - async def run(self, context): - self.llm.system_prompt = "You are an outstanding engineer and can implement any code" - return await WRITE_MOVE_NODE.fill(req=context, llm=self.llm, schema="json") - - -async def main(): - await WriteCodeAN().run(CODE_REVIEW_SMALLEST_CONTEXT) - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/metagpt/actions/write_code_plan_and_change_an.py b/metagpt/actions/write_code_plan_and_change_an.py index 989df52f22..603bd8276a 100644 --- a/metagpt/actions/write_code_plan_and_change_an.py +++ b/metagpt/actions/write_code_plan_and_change_an.py @@ -9,11 +9,11 @@ from pydantic import BaseModel, Field -from metagpt.actions.action import Action -from metagpt.actions.action_node import ActionNode -from metagpt.logs import logger -from metagpt.schema import CodePlanAndChangeContext, Document -from metagpt.utils.common import get_markdown_code_block_type +from metagpt.core.actions import Action +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.logs import logger +from metagpt.core.schema import CodePlanAndChangeContext, Document +from metagpt.core.utils.common import get_markdown_code_block_type from metagpt.utils.project_repo import ProjectRepo DEVELOPMENT_PLAN = ActionNode( diff --git a/metagpt/actions/write_code_review.py b/metagpt/actions/write_code_review.py index 209e4e8ac4..85b4d39864 100644 --- a/metagpt/actions/write_code_review.py +++ b/metagpt/actions/write_code_review.py @@ -15,14 +15,14 @@ from pydantic import BaseModel, Field from tenacity import retry, stop_after_attempt, wait_random_exponential -from metagpt.actions import WriteCode -from metagpt.actions.action import Action -from metagpt.logs import logger -from metagpt.schema import CodingContext, Document -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import CodeParser, aread, awrite +from metagpt.actions.write_code import WriteCode +from metagpt.core.actions import Action +from metagpt.core.logs import logger +from metagpt.core.schema import CodingContext, Document +from metagpt.core.tools.tool_registry import register_tool +from metagpt.core.utils.common import CodeParser, aread, awrite +from metagpt.core.utils.report import EditorReporter from metagpt.utils.project_repo import ProjectRepo -from metagpt.utils.report import EditorReporter PROMPT_TEMPLATE = """ # System diff --git a/metagpt/actions/write_docstring.py b/metagpt/actions/write_docstring.py index 5cc4cafb81..cf74741a32 100644 --- a/metagpt/actions/write_docstring.py +++ b/metagpt/actions/write_docstring.py @@ -27,8 +27,8 @@ from pathlib import Path from typing import Literal, Optional -from metagpt.actions.action import Action -from metagpt.utils.common import OutputParser, aread, awrite +from metagpt.core.actions import Action +from metagpt.core.utils.common import OutputParser, aread, awrite from metagpt.utils.pycst import merge_docstring PYTHON_DOCSTRING_SYSTEM = """### Requirements diff --git a/metagpt/actions/di/write_plan.py b/metagpt/actions/write_plan.py similarity index 94% rename from metagpt/actions/di/write_plan.py rename to metagpt/actions/write_plan.py index cf2e517121..b2c8b32e51 100644 --- a/metagpt/actions/di/write_plan.py +++ b/metagpt/actions/write_plan.py @@ -10,11 +10,11 @@ from copy import deepcopy from typing import Tuple -from metagpt.actions import Action -from metagpt.logs import logger -from metagpt.schema import Message, Plan, Task +from metagpt.core.actions import Action +from metagpt.core.logs import logger +from metagpt.core.schema import Message, Plan, Task +from metagpt.core.utils.common import CodeParser from metagpt.strategy.task_type import TaskType -from metagpt.utils.common import CodeParser PROMPT_TEMPLATE: str = """ # Context: diff --git a/metagpt/actions/write_prd.py b/metagpt/actions/write_prd.py index 7a04520d6e..4a5b93cf82 100644 --- a/metagpt/actions/write_prd.py +++ b/metagpt/actions/write_prd.py @@ -20,8 +20,6 @@ from pydantic import BaseModel, Field -from metagpt.actions import Action, ActionOutput -from metagpt.actions.action_node import ActionNode from metagpt.actions.fix_bug import FixBug from metagpt.actions.write_prd_an import ( COMPETITIVE_QUADRANT_CHART, @@ -31,15 +29,17 @@ WP_ISSUE_TYPE_NODE, WRITE_PRD_NODE, ) -from metagpt.const import ( +from metagpt.core.actions import Action, ActionOutput +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.const import ( BUGFIX_FILENAME, COMPETITIVE_ANALYSIS_FILE_REPO, REQUIREMENT_FILENAME, ) -from metagpt.logs import logger -from metagpt.schema import AIMessage, Document, Documents, Message -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import ( +from metagpt.core.logs import logger +from metagpt.core.schema import AIMessage, Document, Documents, Message +from metagpt.core.tools.tool_registry import register_tool +from metagpt.core.utils.common import ( CodeParser, aread, awrite, @@ -47,10 +47,10 @@ save_json_to_markdown, to_markdown_code_block, ) +from metagpt.core.utils.report import DocsReporter, GalleryReporter from metagpt.utils.file_repository import FileRepository from metagpt.utils.mermaid import mermaid_to_file from metagpt.utils.project_repo import ProjectRepo -from metagpt.utils.report import DocsReporter, GalleryReporter CONTEXT_TEMPLATE = """ ### Project Name diff --git a/metagpt/actions/write_prd_an.py b/metagpt/actions/write_prd_an.py index 81e16bcfa3..9922bb3ca9 100644 --- a/metagpt/actions/write_prd_an.py +++ b/metagpt/actions/write_prd_an.py @@ -7,7 +7,7 @@ """ from typing import List, Union -from metagpt.actions.action_node import ActionNode +from metagpt.core.actions.action_node import ActionNode LANGUAGE = ActionNode( key="Language", diff --git a/metagpt/actions/write_prd_review.py b/metagpt/actions/write_prd_review.py index 68fb5d9e8d..533d8aa56b 100644 --- a/metagpt/actions/write_prd_review.py +++ b/metagpt/actions/write_prd_review.py @@ -8,7 +8,7 @@ from typing import Optional -from metagpt.actions.action import Action +from metagpt.core.actions import Action class WritePRDReview(Action): diff --git a/metagpt/actions/write_review.py b/metagpt/actions/write_review.py index 907a1e9901..1ed3c90a8b 100644 --- a/metagpt/actions/write_review.py +++ b/metagpt/actions/write_review.py @@ -6,8 +6,8 @@ """ from typing import List -from metagpt.actions import Action -from metagpt.actions.action_node import ActionNode +from metagpt.core.actions import Action +from metagpt.core.actions.action_node import ActionNode REVIEW = ActionNode( key="Review", diff --git a/metagpt/actions/write_teaching_plan.py b/metagpt/actions/write_teaching_plan.py deleted file mode 100644 index c5f70ae05b..0000000000 --- a/metagpt/actions/write_teaching_plan.py +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/7/27 -@Author : mashenquan -@File : write_teaching_plan.py -""" -from typing import Optional - -from metagpt.actions import Action -from metagpt.context import Context -from metagpt.logs import logger - - -class WriteTeachingPlanPart(Action): - """Write Teaching Plan Part""" - - i_context: Optional[str] = None - topic: str = "" - language: str = "Chinese" - rsp: Optional[str] = None - - async def run(self, with_message=None, **kwargs): - statement_patterns = TeachingPlanBlock.TOPIC_STATEMENTS.get(self.topic, []) - statements = [] - for p in statement_patterns: - s = self.format_value(p, context=self.context) - statements.append(s) - formatter = ( - TeachingPlanBlock.PROMPT_TITLE_TEMPLATE - if self.topic == TeachingPlanBlock.COURSE_TITLE - else TeachingPlanBlock.PROMPT_TEMPLATE - ) - prompt = formatter.format( - formation=TeachingPlanBlock.FORMATION, - role=self.prefix, - statements="\n".join(statements), - lesson=self.i_context, - topic=self.topic, - language=self.language, - ) - - logger.debug(prompt) - rsp = await self._aask(prompt=prompt) - logger.debug(rsp) - self._set_result(rsp) - return self.rsp - - def _set_result(self, rsp): - if TeachingPlanBlock.DATA_BEGIN_TAG in rsp: - ix = rsp.index(TeachingPlanBlock.DATA_BEGIN_TAG) - rsp = rsp[ix + len(TeachingPlanBlock.DATA_BEGIN_TAG) :] - if TeachingPlanBlock.DATA_END_TAG in rsp: - ix = rsp.index(TeachingPlanBlock.DATA_END_TAG) - rsp = rsp[0:ix] - self.rsp = rsp.strip() - if self.topic != TeachingPlanBlock.COURSE_TITLE: - return - if "#" not in self.rsp or self.rsp.index("#") != 0: - self.rsp = "# " + self.rsp - - def __str__(self): - """Return `topic` value when str()""" - return self.topic - - def __repr__(self): - """Show `topic` value when debug""" - return self.topic - - @staticmethod - def format_value(value, context: Context): - """Fill parameters inside `value` with `options`.""" - if not isinstance(value, str): - return value - if "{" not in value: - return value - - options = context.config.model_dump() - for k, v in context.kwargs: - options[k] = v # None value is allowed to override and disable the value from config. - opts = {k: v for k, v in options.items() if v is not None} - try: - return value.format(**opts) - except KeyError as e: - logger.warning(f"Parameter is missing:{e}") - - for k, v in opts.items(): - value = value.replace("{" + f"{k}" + "}", str(v)) - return value - - -class TeachingPlanBlock: - FORMATION = ( - '"Capacity and role" defines the role you are currently playing;\n' - '\t"[LESSON_BEGIN]" and "[LESSON_END]" tags enclose the content of textbook;\n' - '\t"Statement" defines the work detail you need to complete at this stage;\n' - '\t"Answer options" defines the format requirements for your responses;\n' - '\t"Constraint" defines the conditions that your responses must comply with.' - ) - - COURSE_TITLE = "Title" - TOPICS = [ - COURSE_TITLE, - "Teaching Hours", - "Teaching Objectives", - "Teaching Content", - "Teaching Methods and Strategies", - "Learning Activities", - "Teaching Time Allocation", - "Assessment and Feedback", - "Teaching Summary and Improvement", - "Vocabulary Cloze", - "Choice Questions", - "Grammar Questions", - "Translation Questions", - ] - - TOPIC_STATEMENTS = { - COURSE_TITLE: [ - "Statement: Find and return the title of the lesson only in markdown first-level header format, " - "without anything else." - ], - "Teaching Content": [ - 'Statement: "Teaching Content" must include vocabulary, analysis, and examples of various grammar ' - "structures that appear in the textbook, as well as the listening materials and key points.", - 'Statement: "Teaching Content" must include more examples.', - ], - "Teaching Time Allocation": [ - 'Statement: "Teaching Time Allocation" must include how much time is allocated to each ' - "part of the textbook content." - ], - "Teaching Methods and Strategies": [ - 'Statement: "Teaching Methods and Strategies" must include teaching focus, difficulties, materials, ' - "procedures, in detail." - ], - "Vocabulary Cloze": [ - 'Statement: Based on the content of the textbook enclosed by "[LESSON_BEGIN]" and "[LESSON_END]", ' - "create vocabulary cloze. The cloze should include 10 {language} questions with {teaching_language} " - "answers, and it should also include 10 {teaching_language} questions with {language} answers. " - "The key-related vocabulary and phrases in the textbook content must all be included in the exercises.", - ], - "Grammar Questions": [ - 'Statement: Based on the content of the textbook enclosed by "[LESSON_BEGIN]" and "[LESSON_END]", ' - "create grammar questions. 10 questions." - ], - "Choice Questions": [ - 'Statement: Based on the content of the textbook enclosed by "[LESSON_BEGIN]" and "[LESSON_END]", ' - "create choice questions. 10 questions." - ], - "Translation Questions": [ - 'Statement: Based on the content of the textbook enclosed by "[LESSON_BEGIN]" and "[LESSON_END]", ' - "create translation questions. The translation should include 10 {language} questions with " - "{teaching_language} answers, and it should also include 10 {teaching_language} questions with " - "{language} answers." - ], - } - - # Teaching plan title - PROMPT_TITLE_TEMPLATE = ( - "Do not refer to the context of the previous conversation records, " - "start the conversation anew.\n\n" - "Formation: {formation}\n\n" - "{statements}\n" - "Constraint: Writing in {language}.\n" - 'Answer options: Encloses the lesson title with "[TEACHING_PLAN_BEGIN]" ' - 'and "[TEACHING_PLAN_END]" tags.\n' - "[LESSON_BEGIN]\n" - "{lesson}\n" - "[LESSON_END]" - ) - - # Teaching plan parts: - PROMPT_TEMPLATE = ( - "Do not refer to the context of the previous conversation records, " - "start the conversation anew.\n\n" - "Formation: {formation}\n\n" - "Capacity and role: {role}\n" - 'Statement: Write the "{topic}" part of teaching plan, ' - 'WITHOUT ANY content unrelated to "{topic}"!!\n' - "{statements}\n" - 'Answer options: Enclose the teaching plan content with "[TEACHING_PLAN_BEGIN]" ' - 'and "[TEACHING_PLAN_END]" tags.\n' - "Answer options: Using proper markdown format from second-level header format.\n" - "Constraint: Writing in {language}.\n" - "[LESSON_BEGIN]\n" - "{lesson}\n" - "[LESSON_END]" - ) - - DATA_BEGIN_TAG = "[TEACHING_PLAN_BEGIN]" - DATA_END_TAG = "[TEACHING_PLAN_END]" diff --git a/metagpt/actions/write_test.py b/metagpt/actions/write_test.py index 286d3ea135..072e71d21e 100644 --- a/metagpt/actions/write_test.py +++ b/metagpt/actions/write_test.py @@ -10,11 +10,11 @@ from typing import Optional -from metagpt.actions.action import Action -from metagpt.const import TEST_CODES_FILE_REPO -from metagpt.logs import logger -from metagpt.schema import Document, TestingContext -from metagpt.utils.common import CodeParser +from metagpt.core.actions import Action +from metagpt.core.const import TEST_CODES_FILE_REPO +from metagpt.core.logs import logger +from metagpt.core.schema import Document, TestingContext +from metagpt.core.utils.common import CodeParser PROMPT_TEMPLATE = """ NOTICE diff --git a/metagpt/actions/write_tutorial.py b/metagpt/actions/write_tutorial.py deleted file mode 100644 index 184cd8573f..0000000000 --- a/metagpt/actions/write_tutorial.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python3 -# _*_ coding: utf-8 _*_ -""" -@Time : 2023/9/4 15:40:40 -@Author : Stitch-z -@File : tutorial_assistant.py -@Describe : Actions of the tutorial assistant, including writing directories and document content. -""" - -from typing import Dict - -from metagpt.actions import Action -from metagpt.prompts.tutorial_assistant import CONTENT_PROMPT, DIRECTORY_PROMPT -from metagpt.utils.common import OutputParser - - -class WriteDirectory(Action): - """Action class for writing tutorial directories. - - Args: - name: The name of the action. - language: The language to output, default is "Chinese". - """ - - name: str = "WriteDirectory" - language: str = "Chinese" - - async def run(self, topic: str, *args, **kwargs) -> Dict: - """Execute the action to generate a tutorial directory according to the topic. - - Args: - topic: The tutorial topic. - - Returns: - the tutorial directory information, including {"title": "xxx", "directory": [{"dir 1": ["sub dir 1", "sub dir 2"]}]}. - """ - prompt = DIRECTORY_PROMPT.format(topic=topic, language=self.language) - resp = await self._aask(prompt=prompt) - return OutputParser.extract_struct(resp, dict) - - -class WriteContent(Action): - """Action class for writing tutorial content. - - Args: - name: The name of the action. - directory: The content to write. - language: The language to output, default is "Chinese". - """ - - name: str = "WriteContent" - directory: dict = dict() - language: str = "Chinese" - - async def run(self, topic: str, *args, **kwargs) -> str: - """Execute the action to write document content according to the directory and topic. - - Args: - topic: The tutorial topic. - - Returns: - The written tutorial content. - """ - prompt = CONTENT_PROMPT.format(topic=topic, language=self.language, directory=self.directory) - return await self._aask(prompt=prompt) diff --git a/metagpt/base/__init__.py b/metagpt/base/__init__.py deleted file mode 100644 index a2fbe8eaff..0000000000 --- a/metagpt/base/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from metagpt.base.base_env import BaseEnvironment -from metagpt.base.base_role import BaseRole - - -__all__ = [ - "BaseEnvironment", - "BaseRole", -] diff --git a/metagpt/base/base_role.py b/metagpt/base/base_role.py deleted file mode 100644 index 1f7f00fa23..0000000000 --- a/metagpt/base/base_role.py +++ /dev/null @@ -1,36 +0,0 @@ -from abc import abstractmethod -from typing import Optional, Union - -from metagpt.base.base_serialization import BaseSerialization - - -class BaseRole(BaseSerialization): - """Abstract base class for all roles.""" - - name: str - - @property - def is_idle(self) -> bool: - raise NotImplementedError - - @abstractmethod - def think(self): - """Consider what to do and decide on the next course of action.""" - raise NotImplementedError - - @abstractmethod - def act(self): - """Perform the current action.""" - raise NotImplementedError - - @abstractmethod - async def react(self) -> "Message": - """Entry to one of three strategies by which Role reacts to the observed Message.""" - - @abstractmethod - async def run(self, with_message: Optional[Union[str, "Message", list[str]]] = None) -> Optional["Message"]: - """Observe, and think and act based on the results of the observation.""" - - @abstractmethod - def get_memories(self, k: int = 0) -> list["Message"]: - """Return the most recent k memories of this role.""" diff --git a/metagpt/core/README.md b/metagpt/core/README.md new file mode 100644 index 0000000000..fa5f54ce44 --- /dev/null +++ b/metagpt/core/README.md @@ -0,0 +1,53 @@ +# MetaGPT Core + +MetaGPT Core is the core component of the MetaGPT framework, providing basic functionality and tools. As the foundation of a multi-agent framework, this package provides the core tools and interfaces needed to build complex AI applications. + +## Installation + +```bash +pip install metagpt-core +``` + +## Features + +- Provides the basic components and abstract interfaces of the MetaGPT framework +- Lightweight core library with minimal dependencies +- Can be used independently or integrated with the complete MetaGPT framework +- Contains core tool classes, basic AI interfaces, and extension systems + +## Main Components + +- Basic Abstraction Layer: Provides unified interfaces +- Tool Set: Common AI development tools +- Configuration System: Simplifies complex application configuration +- Memory Management: Efficiently processes data + +## Optional Features + +Install optional dependencies: + +```bash +# Install development tools +pip install metagpt-core[dev] + +# Install testing tools +pip install metagpt-core[test] + +# Install pyppeteer support +pip install metagpt-core[pyppeteer] +``` + +## Dependencies + +This package only includes minimal core dependencies: +- aiohttp: Async HTTP client/server +- loguru: Logging system +- pydantic: Data validation +- PyYAML: YAML parsing +- tenacity: Retry library +- tiktoken: Tokenization tool +- and other essential libraries + +## License + +MIT \ No newline at end of file diff --git a/metagpt/core/__init__.py b/metagpt/core/__init__.py new file mode 100644 index 0000000000..6318e2622a --- /dev/null +++ b/metagpt/core/__init__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Time : 2023/4/24 22:26 +# @Author : alexanderwu +# @File : __init__.py diff --git a/metagpt/core/actions/__init__.py b/metagpt/core/actions/__init__.py new file mode 100644 index 0000000000..5c529cf674 --- /dev/null +++ b/metagpt/core/actions/__init__.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2023/5/11 17:44 +@Author : alexanderwu +@File : __init__.py +""" + +from metagpt.core.actions.action import Action +from metagpt.core.actions.action_output import ActionOutput + +__all__ = [ + "Action", + "ActionOutput", +] diff --git a/metagpt/actions/action.py b/metagpt/core/actions/action.py similarity index 92% rename from metagpt/actions/action.py rename to metagpt/core/actions/action.py index ba8a94803a..c02c529e2b 100644 --- a/metagpt/actions/action.py +++ b/metagpt/core/actions/action.py @@ -12,11 +12,11 @@ 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 ( +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.configs.models_config import ModelsConfig +from metagpt.core.context_mixin import ContextMixin +from metagpt.core.provider.llm_provider_registry import create_llm_instance +from metagpt.core.schema import ( CodePlanAndChangeContext, CodeSummarizeContext, CodingContext, diff --git a/metagpt/actions/action_graph.py b/metagpt/core/actions/action_graph.py similarity index 95% rename from metagpt/actions/action_graph.py rename to metagpt/core/actions/action_graph.py index 893bc6d4c2..a5a063dc8e 100644 --- a/metagpt/actions/action_graph.py +++ b/metagpt/core/actions/action_graph.py @@ -7,7 +7,7 @@ """ from __future__ import annotations -# from metagpt.actions.action_node import ActionNode +# from metagpt.core.actions.action_node import ActionNode class ActionGraph: diff --git a/metagpt/actions/action_node.py b/metagpt/core/actions/action_node.py similarity index 97% rename from metagpt/actions/action_node.py rename to metagpt/core/actions/action_node.py index 7109f287e2..aac004080d 100644 --- a/metagpt/actions/action_node.py +++ b/metagpt/core/actions/action_node.py @@ -17,16 +17,18 @@ from pydantic import BaseModel, Field, create_model, model_validator from tenacity import retry, stop_after_attempt, wait_random_exponential -from metagpt.actions.action_outcls_registry import register_action_outcls -from metagpt.const import MARKDOWN_TITLE_PREFIX, USE_CONFIG_TIMEOUT -from metagpt.exp_pool import exp_cache -from metagpt.exp_pool.serializers import ActionNodeSerializer -from metagpt.llm import BaseLLM -from metagpt.logs import logger -from metagpt.provider.postprocess.llm_output_postprocess import llm_output_postprocess -from metagpt.utils.common import OutputParser, general_after_log -from metagpt.utils.human_interaction import HumanInteraction -from metagpt.utils.sanitize import sanitize +from metagpt.core.actions.action_outcls_registry import register_action_outcls +from metagpt.core.const import MARKDOWN_TITLE_PREFIX, USE_CONFIG_TIMEOUT +from metagpt.core.exp_pool import exp_cache +from metagpt.core.exp_pool.serializers import ActionNodeSerializer +from metagpt.core.llm import BaseLLM +from metagpt.core.logs import logger +from metagpt.core.provider.postprocess.llm_output_postprocess import ( + llm_output_postprocess, +) +from metagpt.core.utils.common import OutputParser, general_after_log +from metagpt.core.utils.human_interaction import HumanInteraction +from metagpt.core.utils.sanitize import sanitize class ReviewMode(Enum): @@ -633,7 +635,7 @@ async def fill( schema = self.schema if mode == FillMode.CODE_FILL.value: - result = await self.code_fill(context, function_name, timeout) + result = await self.code_fill(self.context, function_name, timeout) self.instruct_content = self.create_class()(**result) return self @@ -644,7 +646,7 @@ async def fill( return self elif mode == FillMode.SINGLE_FILL.value: - result = await self.single_fill(context, images=images) + result = await self.single_fill(self.context, images=images) self.instruct_content = self.create_class()(**result) return self diff --git a/metagpt/actions/action_outcls_registry.py b/metagpt/core/actions/action_outcls_registry.py similarity index 100% rename from metagpt/actions/action_outcls_registry.py rename to metagpt/core/actions/action_outcls_registry.py diff --git a/metagpt/actions/action_output.py b/metagpt/core/actions/action_output.py similarity index 100% rename from metagpt/actions/action_output.py rename to metagpt/core/actions/action_output.py diff --git a/metagpt/actions/add_requirement.py b/metagpt/core/actions/add_requirement.py similarity index 85% rename from metagpt/actions/add_requirement.py rename to metagpt/core/actions/add_requirement.py index 5d2a489b2c..3b5a4e2b0e 100644 --- a/metagpt/actions/add_requirement.py +++ b/metagpt/core/actions/add_requirement.py @@ -5,7 +5,7 @@ @Author : alexanderwu @File : add_requirement.py """ -from metagpt.actions import Action +from metagpt.core.actions import Action class UserRequirement(Action): diff --git a/metagpt/core/base/__init__.py b/metagpt/core/base/__init__.py new file mode 100644 index 0000000000..e975a361fa --- /dev/null +++ b/metagpt/core/base/__init__.py @@ -0,0 +1,5 @@ +from metagpt.core.base.base_env import BaseEnvironment + +__all__ = [ + "BaseEnvironment", +] diff --git a/metagpt/base/base_env.py b/metagpt/core/base/base_env.py similarity index 85% rename from metagpt/base/base_env.py rename to metagpt/core/base/base_env.py index 361b8b58f2..7f2a7555f8 100644 --- a/metagpt/base/base_env.py +++ b/metagpt/core/base/base_env.py @@ -6,11 +6,11 @@ from abc import abstractmethod from typing import Any, Optional -from metagpt.base.base_env_space import BaseEnvAction, BaseEnvObsParams -from metagpt.base.base_serialization import BaseSerialization +from metagpt.core.base.base_env_space import BaseEnvAction, BaseEnvObsParams +from metagpt.core.base.base_serialization import BaseSerialization if typing.TYPE_CHECKING: - from metagpt.schema import Message + from metagpt.core.schema import Message class BaseEnvironment(BaseSerialization): diff --git a/metagpt/base/base_env_space.py b/metagpt/core/base/base_env_space.py similarity index 100% rename from metagpt/base/base_env_space.py rename to metagpt/core/base/base_env_space.py diff --git a/metagpt/base/base_serialization.py b/metagpt/core/base/base_serialization.py similarity index 100% rename from metagpt/base/base_serialization.py rename to metagpt/core/base/base_serialization.py diff --git a/metagpt/config2.py b/metagpt/core/config2.py similarity index 85% rename from metagpt/config2.py rename to metagpt/core/config2.py index 02039f7379..5af7f3f5ae 100644 --- a/metagpt/config2.py +++ b/metagpt/core/config2.py @@ -11,20 +11,20 @@ from pydantic import BaseModel, Field, model_validator -from metagpt.configs.browser_config import BrowserConfig -from metagpt.configs.embedding_config import EmbeddingConfig -from metagpt.configs.exp_pool_config import ExperiencePoolConfig -from metagpt.configs.llm_config import LLMConfig, LLMType -from metagpt.configs.mermaid_config import MermaidConfig -from metagpt.configs.omniparse_config import OmniParseConfig -from metagpt.configs.redis_config import RedisConfig -from metagpt.configs.role_custom_config import RoleCustomConfig -from metagpt.configs.role_zero_config import RoleZeroConfig -from metagpt.configs.s3_config import S3Config -from metagpt.configs.search_config import SearchConfig -from metagpt.configs.workspace_config import WorkspaceConfig -from metagpt.const import CONFIG_ROOT, METAGPT_ROOT -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.configs.browser_config import BrowserConfig +from metagpt.core.configs.embedding_config import EmbeddingConfig +from metagpt.core.configs.exp_pool_config import ExperiencePoolConfig +from metagpt.core.configs.llm_config import LLMConfig, LLMType +from metagpt.core.configs.mermaid_config import MermaidConfig +from metagpt.core.configs.omniparse_config import OmniParseConfig +from metagpt.core.configs.redis_config import RedisConfig +from metagpt.core.configs.role_custom_config import RoleCustomConfig +from metagpt.core.configs.role_zero_config import RoleZeroConfig +from metagpt.core.configs.s3_config import S3Config +from metagpt.core.configs.search_config import SearchConfig +from metagpt.core.configs.workspace_config import WorkspaceConfig +from metagpt.core.const import CONFIG_ROOT, METAGPT_ROOT +from metagpt.core.utils.yaml_model import YamlModel class CLIParams(BaseModel): diff --git a/metagpt/configs/__init__.py b/metagpt/core/configs/__init__.py similarity index 100% rename from metagpt/configs/__init__.py rename to metagpt/core/configs/__init__.py diff --git a/metagpt/configs/browser_config.py b/metagpt/core/configs/browser_config.py similarity index 94% rename from metagpt/configs/browser_config.py rename to metagpt/core/configs/browser_config.py index fafbaeeb85..9282463ce5 100644 --- a/metagpt/configs/browser_config.py +++ b/metagpt/core/configs/browser_config.py @@ -8,7 +8,7 @@ from enum import Enum from typing import Literal -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.utils.yaml_model import YamlModel class WebBrowserEngineType(Enum): diff --git a/metagpt/configs/compress_msg_config.py b/metagpt/core/configs/compress_msg_config.py similarity index 100% rename from metagpt/configs/compress_msg_config.py rename to metagpt/core/configs/compress_msg_config.py diff --git a/metagpt/configs/embedding_config.py b/metagpt/core/configs/embedding_config.py similarity index 95% rename from metagpt/configs/embedding_config.py rename to metagpt/core/configs/embedding_config.py index f9b41b9dc9..e2811f4844 100644 --- a/metagpt/configs/embedding_config.py +++ b/metagpt/core/configs/embedding_config.py @@ -3,7 +3,7 @@ from pydantic import field_validator -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.utils.yaml_model import YamlModel class EmbeddingType(Enum): diff --git a/metagpt/configs/exp_pool_config.py b/metagpt/core/configs/exp_pool_config.py similarity index 95% rename from metagpt/configs/exp_pool_config.py rename to metagpt/core/configs/exp_pool_config.py index a4a2d5d417..7a3d51b31c 100644 --- a/metagpt/configs/exp_pool_config.py +++ b/metagpt/core/configs/exp_pool_config.py @@ -2,7 +2,7 @@ from pydantic import Field -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.utils.yaml_model import YamlModel class ExperiencePoolRetrievalType(Enum): diff --git a/metagpt/configs/llm_config.py b/metagpt/core/configs/llm_config.py similarity index 95% rename from metagpt/configs/llm_config.py rename to metagpt/core/configs/llm_config.py index 2ceef2e2a9..7d479d6b69 100644 --- a/metagpt/configs/llm_config.py +++ b/metagpt/core/configs/llm_config.py @@ -11,9 +11,9 @@ from pydantic import field_validator -from metagpt.configs.compress_msg_config import CompressType -from metagpt.const import CONFIG_ROOT, LLM_API_TIMEOUT, METAGPT_ROOT -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.configs.compress_msg_config import CompressType +from metagpt.core.const import CONFIG_ROOT, LLM_API_TIMEOUT, METAGPT_ROOT +from metagpt.core.utils.yaml_model import YamlModel class LLMType(Enum): diff --git a/metagpt/configs/mermaid_config.py b/metagpt/core/configs/mermaid_config.py similarity index 89% rename from metagpt/configs/mermaid_config.py rename to metagpt/core/configs/mermaid_config.py index 47f14f4cd0..24a761dcb7 100644 --- a/metagpt/configs/mermaid_config.py +++ b/metagpt/core/configs/mermaid_config.py @@ -7,7 +7,7 @@ """ from typing import Literal -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.utils.yaml_model import YamlModel class MermaidConfig(YamlModel): diff --git a/metagpt/configs/models_config.py b/metagpt/core/configs/models_config.py similarity index 94% rename from metagpt/configs/models_config.py rename to metagpt/core/configs/models_config.py index bc4897fec5..0c3f4ce9cf 100644 --- a/metagpt/configs/models_config.py +++ b/metagpt/core/configs/models_config.py @@ -17,10 +17,10 @@ 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 +from metagpt.core.config2 import merge_dict +from metagpt.core.configs.llm_config import LLMConfig +from metagpt.core.const import CONFIG_ROOT, METAGPT_ROOT +from metagpt.core.utils.yaml_model import YamlModel class ModelsConfig(YamlModel): diff --git a/metagpt/configs/omniparse_config.py b/metagpt/core/configs/omniparse_config.py similarity index 66% rename from metagpt/configs/omniparse_config.py rename to metagpt/core/configs/omniparse_config.py index 8f38f9f518..31dc1d95b4 100644 --- a/metagpt/configs/omniparse_config.py +++ b/metagpt/core/configs/omniparse_config.py @@ -1,4 +1,4 @@ -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.utils.yaml_model import YamlModel class OmniParseConfig(YamlModel): diff --git a/metagpt/configs/redis_config.py b/metagpt/core/configs/redis_config.py similarity index 88% rename from metagpt/configs/redis_config.py rename to metagpt/core/configs/redis_config.py index c4cfb6764d..21dc689975 100644 --- a/metagpt/configs/redis_config.py +++ b/metagpt/core/configs/redis_config.py @@ -5,7 +5,7 @@ @Author : alexanderwu @File : redis_config.py """ -from metagpt.utils.yaml_model import YamlModelWithoutDefault +from metagpt.core.utils.yaml_model import YamlModelWithoutDefault class RedisConfig(YamlModelWithoutDefault): diff --git a/metagpt/configs/role_custom_config.py b/metagpt/core/configs/role_custom_config.py similarity index 74% rename from metagpt/configs/role_custom_config.py rename to metagpt/core/configs/role_custom_config.py index 581de605e6..a657dedf2b 100644 --- a/metagpt/configs/role_custom_config.py +++ b/metagpt/core/configs/role_custom_config.py @@ -5,8 +5,8 @@ @Author : Justin @File : role_custom_config.py """ -from metagpt.configs.llm_config import LLMConfig -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.configs.llm_config import LLMConfig +from metagpt.core.utils.yaml_model import YamlModel class RoleCustomConfig(YamlModel): diff --git a/metagpt/configs/role_zero_config.py b/metagpt/core/configs/role_zero_config.py similarity index 91% rename from metagpt/configs/role_zero_config.py rename to metagpt/core/configs/role_zero_config.py index 91d554b2f4..27bd6c3e63 100644 --- a/metagpt/configs/role_zero_config.py +++ b/metagpt/core/configs/role_zero_config.py @@ -1,6 +1,6 @@ from pydantic import Field -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.utils.yaml_model import YamlModel class RoleZeroConfig(YamlModel): diff --git a/metagpt/configs/s3_config.py b/metagpt/core/configs/s3_config.py similarity index 78% rename from metagpt/configs/s3_config.py rename to metagpt/core/configs/s3_config.py index 72b81fae46..e1a78c3491 100644 --- a/metagpt/configs/s3_config.py +++ b/metagpt/core/configs/s3_config.py @@ -5,7 +5,7 @@ @Author : alexanderwu @File : s3_config.py """ -from metagpt.utils.yaml_model import YamlModelWithoutDefault +from metagpt.core.utils.yaml_model import YamlModelWithoutDefault class S3Config(YamlModelWithoutDefault): diff --git a/metagpt/configs/search_config.py b/metagpt/core/configs/search_config.py similarity index 94% rename from metagpt/configs/search_config.py rename to metagpt/core/configs/search_config.py index 2c773b685b..7c4e6c520c 100644 --- a/metagpt/configs/search_config.py +++ b/metagpt/core/configs/search_config.py @@ -10,7 +10,7 @@ from pydantic import ConfigDict, Field -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.utils.yaml_model import YamlModel class SearchEngineType(Enum): diff --git a/metagpt/configs/workspace_config.py b/metagpt/core/configs/workspace_config.py similarity index 89% rename from metagpt/configs/workspace_config.py rename to metagpt/core/configs/workspace_config.py index df7aeaef9b..0bcbc54c5a 100644 --- a/metagpt/configs/workspace_config.py +++ b/metagpt/core/configs/workspace_config.py @@ -11,8 +11,8 @@ from pydantic import field_validator, model_validator -from metagpt.const import DEFAULT_WORKSPACE_ROOT -from metagpt.utils.yaml_model import YamlModel +from metagpt.core.const import DEFAULT_WORKSPACE_ROOT +from metagpt.core.utils.yaml_model import YamlModel class WorkspaceConfig(YamlModel): diff --git a/metagpt/const.py b/metagpt/core/const.py similarity index 97% rename from metagpt/const.py rename to metagpt/core/const.py index 94a7d8529b..6a4a6efa1c 100644 --- a/metagpt/const.py +++ b/metagpt/core/const.py @@ -6,12 +6,10 @@ from loguru import logger -import metagpt - def get_metagpt_package_root(): """Get the root directory of the installed package.""" - package_root = Path(metagpt.__file__).parent.parent + package_root = Path(__file__).parent.parent.parent logger.info(f"Package root set to {str(package_root)}") return package_root @@ -61,7 +59,6 @@ def get_metagpt_root(): SOURCE_ROOT = METAGPT_ROOT / "metagpt" PROMPT_PATH = SOURCE_ROOT / "prompts" -SKILL_DIRECTORY = SOURCE_ROOT / "skills" TOOL_SCHEMA_PATH = METAGPT_ROOT / "metagpt/tools/schemas" TOOL_LIBS_PATH = METAGPT_ROOT / "metagpt/tools/libs" diff --git a/metagpt/context.py b/metagpt/core/context.py similarity index 93% rename from metagpt/context.py rename to metagpt/core/context.py index 0769f78eb6..b1a140de7b 100644 --- a/metagpt/context.py +++ b/metagpt/core/context.py @@ -12,11 +12,11 @@ from pydantic import BaseModel, ConfigDict, Field -from metagpt.config2 import Config -from metagpt.configs.llm_config import LLMConfig, LLMType -from metagpt.provider.base_llm import BaseLLM -from metagpt.provider.llm_provider_registry import create_llm_instance -from metagpt.utils.cost_manager import ( +from metagpt.core.config2 import Config +from metagpt.core.configs.llm_config import LLMConfig, LLMType +from metagpt.core.provider.base_llm import BaseLLM +from metagpt.core.provider.llm_provider_registry import create_llm_instance +from metagpt.core.utils.cost_manager import ( CostManager, FireworksCostManager, TokenCostManager, diff --git a/metagpt/context_mixin.py b/metagpt/core/context_mixin.py similarity index 96% rename from metagpt/context_mixin.py rename to metagpt/core/context_mixin.py index 59daa692f6..13eb5cc3f4 100644 --- a/metagpt/context_mixin.py +++ b/metagpt/core/context_mixin.py @@ -9,9 +9,9 @@ from pydantic import BaseModel, ConfigDict, Field, model_validator -from metagpt.config2 import Config -from metagpt.context import Context -from metagpt.provider.base_llm import BaseLLM +from metagpt.core.config2 import Config +from metagpt.core.context import Context +from metagpt.core.provider.base_llm import BaseLLM class ContextMixin(BaseModel): diff --git a/metagpt/core/exp_pool/__init__.py b/metagpt/core/exp_pool/__init__.py new file mode 100644 index 0000000000..a3be3fbe92 --- /dev/null +++ b/metagpt/core/exp_pool/__init__.py @@ -0,0 +1,6 @@ +"""Experience pool init.""" + +from metagpt.core.exp_pool.decorator import exp_cache +from metagpt.core.exp_pool.manager import get_exp_manager + +__all__ = ["get_exp_manager", "exp_cache"] diff --git a/metagpt/core/exp_pool/context_builders/__init__.py b/metagpt/core/exp_pool/context_builders/__init__.py new file mode 100644 index 0000000000..4fed58ec0b --- /dev/null +++ b/metagpt/core/exp_pool/context_builders/__init__.py @@ -0,0 +1,7 @@ +"""Context builders init.""" + +from metagpt.core.exp_pool.context_builders.base import BaseContextBuilder +from metagpt.core.exp_pool.context_builders.role_zero import RoleZeroContextBuilder +from metagpt.core.exp_pool.context_builders.simple import SimpleContextBuilder + +__all__ = ["BaseContextBuilder", "SimpleContextBuilder", "RoleZeroContextBuilder"] diff --git a/metagpt/exp_pool/context_builders/action_node.py b/metagpt/core/exp_pool/context_builders/action_node.py similarity index 89% rename from metagpt/exp_pool/context_builders/action_node.py rename to metagpt/core/exp_pool/context_builders/action_node.py index 891b898be3..64da0870e9 100644 --- a/metagpt/exp_pool/context_builders/action_node.py +++ b/metagpt/core/exp_pool/context_builders/action_node.py @@ -2,7 +2,7 @@ from typing import Any -from metagpt.exp_pool.context_builders.base import BaseContextBuilder +from metagpt.core.exp_pool.context_builders.base import BaseContextBuilder ACTION_NODE_CONTEXT_TEMPLATE = """ {req} diff --git a/metagpt/exp_pool/context_builders/base.py b/metagpt/core/exp_pool/context_builders/base.py similarity index 96% rename from metagpt/exp_pool/context_builders/base.py rename to metagpt/core/exp_pool/context_builders/base.py index 691d51c8c5..1225ebfad7 100644 --- a/metagpt/exp_pool/context_builders/base.py +++ b/metagpt/core/exp_pool/context_builders/base.py @@ -5,7 +5,7 @@ from pydantic import BaseModel, ConfigDict -from metagpt.exp_pool.schema import Experience +from metagpt.core.exp_pool.schema import Experience EXP_TEMPLATE = """Given the request: {req}, We can get the response: {resp}, which scored: {score}.""" diff --git a/metagpt/exp_pool/context_builders/role_zero.py b/metagpt/core/exp_pool/context_builders/role_zero.py similarity index 90% rename from metagpt/exp_pool/context_builders/role_zero.py rename to metagpt/core/exp_pool/context_builders/role_zero.py index cbda72fc58..daecc0ece6 100644 --- a/metagpt/exp_pool/context_builders/role_zero.py +++ b/metagpt/core/exp_pool/context_builders/role_zero.py @@ -3,8 +3,8 @@ import copy from typing import Any -from metagpt.const import EXPERIENCE_MASK -from metagpt.exp_pool.context_builders.base import BaseContextBuilder +from metagpt.core.const import EXPERIENCE_MASK +from metagpt.core.exp_pool.context_builders.base import BaseContextBuilder class RoleZeroContextBuilder(BaseContextBuilder): diff --git a/metagpt/exp_pool/context_builders/simple.py b/metagpt/core/exp_pool/context_builders/simple.py similarity index 84% rename from metagpt/exp_pool/context_builders/simple.py rename to metagpt/core/exp_pool/context_builders/simple.py index d7b8d0be9a..cc3aec3455 100644 --- a/metagpt/exp_pool/context_builders/simple.py +++ b/metagpt/core/exp_pool/context_builders/simple.py @@ -3,7 +3,7 @@ from typing import Any -from metagpt.exp_pool.context_builders.base import BaseContextBuilder +from metagpt.core.exp_pool.context_builders.base import BaseContextBuilder SIMPLE_CONTEXT_TEMPLATE = """ ## Context diff --git a/metagpt/exp_pool/decorator.py b/metagpt/core/exp_pool/decorator.py similarity index 92% rename from metagpt/exp_pool/decorator.py rename to metagpt/core/exp_pool/decorator.py index bb285d31cd..1622974e29 100644 --- a/metagpt/exp_pool/decorator.py +++ b/metagpt/core/exp_pool/decorator.py @@ -6,22 +6,25 @@ from pydantic import BaseModel, ConfigDict, model_validator -from metagpt.config2 import config -from metagpt.exp_pool.context_builders import BaseContextBuilder, SimpleContextBuilder -from metagpt.exp_pool.manager import ExperienceManager, get_exp_manager -from metagpt.exp_pool.perfect_judges import BasePerfectJudge, SimplePerfectJudge -from metagpt.exp_pool.schema import ( +from metagpt.core.config2 import config +from metagpt.core.exp_pool.context_builders import ( + BaseContextBuilder, + SimpleContextBuilder, +) +from metagpt.core.exp_pool.manager import ExperienceManager, get_exp_manager +from metagpt.core.exp_pool.perfect_judges import BasePerfectJudge, SimplePerfectJudge +from metagpt.core.exp_pool.schema import ( LOG_NEW_EXPERIENCE_PREFIX, Experience, Metric, QueryType, Score, ) -from metagpt.exp_pool.scorers import BaseScorer, SimpleScorer -from metagpt.exp_pool.serializers import BaseSerializer, SimpleSerializer -from metagpt.logs import logger -from metagpt.utils.async_helper import NestAsyncio -from metagpt.utils.exceptions import handle_exception +from metagpt.core.exp_pool.scorers import BaseScorer, SimpleScorer +from metagpt.core.exp_pool.serializers import BaseSerializer, SimpleSerializer +from metagpt.core.logs import logger +from metagpt.core.utils.async_helper import NestAsyncio +from metagpt.core.utils.exceptions import handle_exception ReturnType = TypeVar("ReturnType") @@ -84,7 +87,7 @@ async def get_or_create(args: Any, kwargs: Any) -> ReturnType: await handler.execute_function() - if config.exp_pool.enable_write: + if Config.exp_pool.enable_write: await handler.process_experience() return handler._raw_resp diff --git a/metagpt/exp_pool/manager.py b/metagpt/core/exp_pool/manager.py similarity index 96% rename from metagpt/exp_pool/manager.py rename to metagpt/core/exp_pool/manager.py index 35de17079b..cd23f0941d 100644 --- a/metagpt/exp_pool/manager.py +++ b/metagpt/core/exp_pool/manager.py @@ -5,11 +5,11 @@ from pydantic import BaseModel, ConfigDict, Field -from metagpt.config2 import Config -from metagpt.configs.exp_pool_config import ExperiencePoolRetrievalType -from metagpt.exp_pool.schema import DEFAULT_SIMILARITY_TOP_K, Experience, QueryType -from metagpt.logs import logger -from metagpt.utils.exceptions import handle_exception +from metagpt.core.config2 import Config +from metagpt.core.configs.exp_pool_config import ExperiencePoolRetrievalType +from metagpt.core.exp_pool.schema import DEFAULT_SIMILARITY_TOP_K, Experience, QueryType +from metagpt.core.logs import logger +from metagpt.core.utils.exceptions import handle_exception if TYPE_CHECKING: from metagpt.rag.engines import SimpleEngine diff --git a/metagpt/core/exp_pool/perfect_judges/__init__.py b/metagpt/core/exp_pool/perfect_judges/__init__.py new file mode 100644 index 0000000000..9be9629b8b --- /dev/null +++ b/metagpt/core/exp_pool/perfect_judges/__init__.py @@ -0,0 +1,6 @@ +"""Perfect judges init.""" + +from metagpt.core.exp_pool.perfect_judges.base import BasePerfectJudge +from metagpt.core.exp_pool.perfect_judges.simple import SimplePerfectJudge + +__all__ = ["BasePerfectJudge", "SimplePerfectJudge"] diff --git a/metagpt/exp_pool/perfect_judges/base.py b/metagpt/core/exp_pool/perfect_judges/base.py similarity index 91% rename from metagpt/exp_pool/perfect_judges/base.py rename to metagpt/core/exp_pool/perfect_judges/base.py index 2935229931..666f61cba1 100644 --- a/metagpt/exp_pool/perfect_judges/base.py +++ b/metagpt/core/exp_pool/perfect_judges/base.py @@ -4,7 +4,7 @@ from pydantic import BaseModel, ConfigDict -from metagpt.exp_pool.schema import Experience +from metagpt.core.exp_pool.schema import Experience class BasePerfectJudge(BaseModel, ABC): diff --git a/metagpt/exp_pool/perfect_judges/simple.py b/metagpt/core/exp_pool/perfect_judges/simple.py similarity index 86% rename from metagpt/exp_pool/perfect_judges/simple.py rename to metagpt/core/exp_pool/perfect_judges/simple.py index 37ede95c39..aff4131c90 100644 --- a/metagpt/exp_pool/perfect_judges/simple.py +++ b/metagpt/core/exp_pool/perfect_judges/simple.py @@ -3,8 +3,8 @@ from pydantic import ConfigDict -from metagpt.exp_pool.perfect_judges.base import BasePerfectJudge -from metagpt.exp_pool.schema import MAX_SCORE, Experience +from metagpt.core.exp_pool.perfect_judges.base import BasePerfectJudge +from metagpt.core.exp_pool.schema import MAX_SCORE, Experience class SimplePerfectJudge(BasePerfectJudge): diff --git a/metagpt/exp_pool/schema.py b/metagpt/core/exp_pool/schema.py similarity index 100% rename from metagpt/exp_pool/schema.py rename to metagpt/core/exp_pool/schema.py diff --git a/metagpt/core/exp_pool/scorers/__init__.py b/metagpt/core/exp_pool/scorers/__init__.py new file mode 100644 index 0000000000..132a763384 --- /dev/null +++ b/metagpt/core/exp_pool/scorers/__init__.py @@ -0,0 +1,6 @@ +"""Scorers init.""" + +from metagpt.core.exp_pool.scorers.base import BaseScorer +from metagpt.core.exp_pool.scorers.simple import SimpleScorer + +__all__ = ["BaseScorer", "SimpleScorer"] diff --git a/metagpt/exp_pool/scorers/base.py b/metagpt/core/exp_pool/scorers/base.py similarity index 88% rename from metagpt/exp_pool/scorers/base.py rename to metagpt/core/exp_pool/scorers/base.py index 97cac49925..5c05a14336 100644 --- a/metagpt/exp_pool/scorers/base.py +++ b/metagpt/core/exp_pool/scorers/base.py @@ -4,7 +4,7 @@ from pydantic import BaseModel, ConfigDict -from metagpt.exp_pool.schema import Score +from metagpt.core.exp_pool.schema import Score class BaseScorer(BaseModel, ABC): diff --git a/metagpt/exp_pool/scorers/simple.py b/metagpt/core/exp_pool/scorers/simple.py similarity index 87% rename from metagpt/exp_pool/scorers/simple.py rename to metagpt/core/exp_pool/scorers/simple.py index 4b060aac4f..251bc20938 100644 --- a/metagpt/exp_pool/scorers/simple.py +++ b/metagpt/core/exp_pool/scorers/simple.py @@ -4,11 +4,11 @@ from pydantic import Field -from metagpt.exp_pool.schema import Score -from metagpt.exp_pool.scorers.base import BaseScorer -from metagpt.llm import LLM -from metagpt.provider.base_llm import BaseLLM -from metagpt.utils.common import CodeParser +from metagpt.core.exp_pool.schema import Score +from metagpt.core.exp_pool.scorers.base import BaseScorer +from metagpt.core.llm import LLM +from metagpt.core.provider.base_llm import BaseLLM +from metagpt.core.utils.common import CodeParser SIMPLE_SCORER_TEMPLATE = """ Role: You are a highly efficient assistant, tasked with evaluating a response to a given request. The response is generated by a large language model (LLM). diff --git a/metagpt/core/exp_pool/serializers/__init__.py b/metagpt/core/exp_pool/serializers/__init__.py new file mode 100644 index 0000000000..375ef8de1c --- /dev/null +++ b/metagpt/core/exp_pool/serializers/__init__.py @@ -0,0 +1,8 @@ +"""Serializers init.""" + +from metagpt.core.exp_pool.serializers.action_node import ActionNodeSerializer +from metagpt.core.exp_pool.serializers.base import BaseSerializer +from metagpt.core.exp_pool.serializers.role_zero import RoleZeroSerializer +from metagpt.core.exp_pool.serializers.simple import SimpleSerializer + +__all__ = ["BaseSerializer", "SimpleSerializer", "ActionNodeSerializer", "RoleZeroSerializer"] diff --git a/metagpt/exp_pool/serializers/action_node.py b/metagpt/core/exp_pool/serializers/action_node.py similarity index 83% rename from metagpt/exp_pool/serializers/action_node.py rename to metagpt/core/exp_pool/serializers/action_node.py index 7746d6be47..cc05d0197a 100644 --- a/metagpt/exp_pool/serializers/action_node.py +++ b/metagpt/core/exp_pool/serializers/action_node.py @@ -6,9 +6,9 @@ # Import ActionNode only for type checking to avoid circular imports if TYPE_CHECKING: - from metagpt.actions.action_node import ActionNode + from metagpt.core.actions.action_node import ActionNode -from metagpt.exp_pool.serializers.simple import SimpleSerializer +from metagpt.core.exp_pool.serializers.simple import SimpleSerializer class ActionNodeSerializer(SimpleSerializer): @@ -28,7 +28,7 @@ def __init__(self, json_data): def model_dump_json(self): return self.json_data - from metagpt.actions.action_node import ActionNode + from metagpt.core.actions.action_node import ActionNode action_node = ActionNode(key="", expected_type=Type[str], instruction="", example="") action_node.instruct_content = InstructContent(resp) diff --git a/metagpt/exp_pool/serializers/base.py b/metagpt/core/exp_pool/serializers/base.py similarity index 100% rename from metagpt/exp_pool/serializers/base.py rename to metagpt/core/exp_pool/serializers/base.py diff --git a/metagpt/exp_pool/serializers/role_zero.py b/metagpt/core/exp_pool/serializers/role_zero.py similarity index 96% rename from metagpt/exp_pool/serializers/role_zero.py rename to metagpt/core/exp_pool/serializers/role_zero.py index 89dd73f391..d4514850b3 100644 --- a/metagpt/exp_pool/serializers/role_zero.py +++ b/metagpt/core/exp_pool/serializers/role_zero.py @@ -3,7 +3,7 @@ import copy import json -from metagpt.exp_pool.serializers.simple import SimpleSerializer +from metagpt.core.exp_pool.serializers.simple import SimpleSerializer class RoleZeroSerializer(SimpleSerializer): diff --git a/metagpt/exp_pool/serializers/simple.py b/metagpt/core/exp_pool/serializers/simple.py similarity index 88% rename from metagpt/exp_pool/serializers/simple.py rename to metagpt/core/exp_pool/serializers/simple.py index ebd06e0e0c..3e84dae834 100644 --- a/metagpt/exp_pool/serializers/simple.py +++ b/metagpt/core/exp_pool/serializers/simple.py @@ -2,7 +2,7 @@ from typing import Any -from metagpt.exp_pool.serializers.base import BaseSerializer +from metagpt.core.exp_pool.serializers.base import BaseSerializer class SimpleSerializer(BaseSerializer): diff --git a/metagpt/core/llm.py b/metagpt/core/llm.py new file mode 100644 index 0000000000..a93352a17e --- /dev/null +++ b/metagpt/core/llm.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2023/5/11 14:45 +@Author : alexanderwu +@File : llm.py +""" +from typing import Optional + +from metagpt.core.configs.llm_config import LLMConfig +from metagpt.core.context import Context +from metagpt.core.provider.base_llm import BaseLLM + + +def LLM(llm_config: Optional[LLMConfig] = None, context: Context = None) -> BaseLLM: + """get the default llm provider if name is None""" + ctx = context or Context() + if llm_config is not None: + return ctx.llm_with_cost_manager_from_llm_config(llm_config) + return ctx.llm() diff --git a/metagpt/logs.py b/metagpt/core/logs.py similarity index 98% rename from metagpt/logs.py rename to metagpt/core/logs.py index ce2f12e4c0..efa7041ab5 100644 --- a/metagpt/logs.py +++ b/metagpt/core/logs.py @@ -19,7 +19,7 @@ from loguru import logger as _logger from pydantic import BaseModel, Field -from metagpt.const import METAGPT_ROOT +from metagpt.core.const import METAGPT_ROOT LLM_STREAM_QUEUE: ContextVar[asyncio.Queue] = ContextVar("llm-stream") diff --git a/metagpt/core/memory/__init__.py b/metagpt/core/memory/__init__.py new file mode 100644 index 0000000000..4094034402 --- /dev/null +++ b/metagpt/core/memory/__init__.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2023/4/30 20:57 +@Author : alexanderwu +@File : __init__.py +""" + +from metagpt.core.memory.base import Memory + +__all__ = [ + "Memory", +] diff --git a/metagpt/memory/memory.py b/metagpt/core/memory/base.py similarity index 94% rename from metagpt/memory/memory.py rename to metagpt/core/memory/base.py index 5dbadf9c38..0f12d22732 100644 --- a/metagpt/memory/memory.py +++ b/metagpt/core/memory/base.py @@ -11,10 +11,10 @@ from pydantic import BaseModel, Field, SerializeAsAny -from metagpt.const import IGNORED_MESSAGE_ID -from metagpt.schema import Message -from metagpt.utils.common import any_to_str, any_to_str_set -from metagpt.utils.exceptions import handle_exception +from metagpt.core.const import IGNORED_MESSAGE_ID +from metagpt.core.schema import Message +from metagpt.core.utils.common import any_to_str, any_to_str_set +from metagpt.core.utils.exceptions import handle_exception class Memory(BaseModel): diff --git a/metagpt/memory/role_zero_memory.py b/metagpt/core/memory/role_zero_memory.py similarity index 95% rename from metagpt/memory/role_zero_memory.py rename to metagpt/core/memory/role_zero_memory.py index a323208812..51b5205980 100644 --- a/metagpt/memory/role_zero_memory.py +++ b/metagpt/core/memory/role_zero_memory.py @@ -7,13 +7,13 @@ from pydantic import Field -from metagpt.actions import UserRequirement -from metagpt.const import TEAMLEADER_NAME -from metagpt.logs import logger -from metagpt.memory import Memory -from metagpt.schema import LongTermMemoryItem, Message -from metagpt.utils.common import any_to_str -from metagpt.utils.exceptions import handle_exception +from metagpt.core.actions.add_requirement import UserRequirement +from metagpt.core.const import TEAMLEADER_NAME +from metagpt.core.logs import logger +from metagpt.core.memory import Memory +from metagpt.core.schema import LongTermMemoryItem, Message +from metagpt.core.utils.common import any_to_str +from metagpt.core.utils.exceptions import handle_exception if TYPE_CHECKING: from llama_index.core.schema import NodeWithScore diff --git a/metagpt/core/poetry.lock b/metagpt/core/poetry.lock new file mode 100644 index 0000000000..ccf9b00774 --- /dev/null +++ b/metagpt/core/poetry.lock @@ -0,0 +1,4952 @@ +# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. + +[[package]] +name = "aioboto3" +version = "12.4.0" +description = "Async boto3 wrapper" +optional = false +python-versions = "<4.0,>=3.8" +groups = ["test"] +files = [ + {file = "aioboto3-12.4.0-py3-none-any.whl", hash = "sha256:a8d5a60852482cc7a472f3544e5ad7d2f5a911054ffa066357140dc6690da94b"}, + {file = "aioboto3-12.4.0.tar.gz", hash = "sha256:0fa03ac7a8c2c187358dd27cdf84da05e91bc1a3bd85519cad13521343a3d767"}, +] + +[package.dependencies] +aiobotocore = {version = "2.12.3", extras = ["boto3"]} + +[package.extras] +chalice = ["chalice (>=1.24.0)"] +s3cse = ["cryptography (>=2.3.1)"] + +[[package]] +name = "aiobotocore" +version = "2.12.3" +description = "Async client for aws services using botocore and aiohttp" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "aiobotocore-2.12.3-py3-none-any.whl", hash = "sha256:86737685f4625e8f05c4e7a608a07cc97607263279f66cf6b02b640c4eafd324"}, + {file = "aiobotocore-2.12.3.tar.gz", hash = "sha256:e2a2929207bc5d62eb556106c2224c1fd106d5c65be2eb69f15cc8c34c44c236"}, +] + +[package.dependencies] +aiohttp = ">=3.7.4.post0,<4.0.0" +aioitertools = ">=0.5.1,<1.0.0" +boto3 = {version = ">=1.34.41,<1.34.70", optional = true, markers = "extra == \"boto3\""} +botocore = ">=1.34.41,<1.34.70" +wrapt = ">=1.10.10,<2.0.0" + +[package.extras] +awscli = ["awscli (>=1.32.41,<1.32.70)"] +boto3 = ["boto3 (>=1.34.41,<1.34.70)"] + +[[package]] +name = "aiofiles" +version = "23.2.1" +description = "File support for asyncio." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "aiofiles-23.2.1-py3-none-any.whl", hash = "sha256:19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107"}, + {file = "aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"}, +] + +[[package]] +name = "aiohttp" +version = "3.8.6" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.6" +groups = ["main", "test"] +files = [ + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, + {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, + {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, + {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, + {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, + {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, + {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, + {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, + {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, + {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, + {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" +attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<4.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "cchardet ; python_version < \"3.10\""] + +[[package]] +name = "aioitertools" +version = "0.12.0" +description = "itertools and builtins for AsyncIO and mixed iterables" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "aioitertools-0.12.0-py3-none-any.whl", hash = "sha256:fc1f5fac3d737354de8831cbba3eb04f79dd649d8f3afb4c5b114925e662a796"}, + {file = "aioitertools-0.12.0.tar.gz", hash = "sha256:c2a9055b4fbb7705f561b9d86053e8af5d10cc845d22c32008c43490b2d8dd6b"}, +] + +[package.dependencies] +typing_extensions = {version = ">=4.0", markers = "python_version < \"3.10\""} + +[package.extras] +dev = ["attribution (==1.8.0)", "black (==24.8.0)", "build (>=1.2)", "coverage (==7.6.1)", "flake8 (==7.1.1)", "flit (==3.9.0)", "mypy (==1.11.2)", "ufmt (==2.7.1)", "usort (==1.0.8.post1)"] +docs = ["sphinx (==8.0.2)", "sphinx-mdinclude (==0.6.2)"] + +[[package]] +name = "aiosignal" +version = "1.3.2" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, + {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "analytics-python" +version = "1.4.post1" +description = "The hassle-free way to integrate analytics into any python application." +optional = false +python-versions = "*" +groups = ["test"] +files = [ + {file = "analytics-python-1.4.post1.tar.gz", hash = "sha256:b083e69c149c39e7ad17067f0e5c1742fbd15fdc469ade36c4d1ad5edf31ee5e"}, + {file = "analytics_python-1.4.post1-py2.py3-none-any.whl", hash = "sha256:33ab660150d0f37bb2fefc93fd19c9e7bd85e5b17db44df5e7e1139f63c14246"}, +] + +[package.dependencies] +backoff = "1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +test = ["flake8 (==3.7.9)", "mock (==2.0.0)", "pylint (==1.9.3)"] + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.9.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, + {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "appdirs" +version = "1.4.4" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = "*" +groups = ["pyppeteer"] +files = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] + +[[package]] +name = "asgiref" +version = "3.8.1" +description = "ASGI specs, helper code, and adapters" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, + {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + +[[package]] +name = "astroid" +version = "3.0.3" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.8.0" +groups = ["dev", "test"] +files = [ + {file = "astroid-3.0.3-py3-none-any.whl", hash = "sha256:92fcf218b89f449cdf9f7b39a269f8d5d617b27be68434912e11e79203963a17"}, + {file = "astroid-3.0.3.tar.gz", hash = "sha256:4148645659b08b70d72460ed1921158027a9e53ae8b7234149b1400eddacbb93"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +groups = ["main", "test"] +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + +[[package]] +name = "attrs" +version = "25.3.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, + {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, +] + +[package.extras] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] + +[[package]] +name = "azure-cognitiveservices-speech" +version = "1.43.0" +description = "Microsoft Cognitive Services Speech SDK for Python" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:af81ef91103f9174095f4dcdc173fbce180c9d4d7956f03d79859c9a10e8b320"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ac09cc81ab01d0db4e2d9a79a3894c6a8d09e1359d0eeb5070aa9194a0c84576"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:e12527746fc5bff040c66e20172544e9708e10b29d9f3acc365576d44ccb7c5c"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:07bdedba8494edfb24306279d3b0500ece016fc811ec0b3366707a75d118a245"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-win32.whl", hash = "sha256:36570806a6b8fe12696a0372193ecc623bc629e355fa1edc67c03ac71731066b"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-win_amd64.whl", hash = "sha256:50a50aabc69434d1311c09eaa640622c1d47d270e6cbcf5d192a04325cb7de4c"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-win_arm64.whl", hash = "sha256:29dab439a3789196c38b169a74fb4eefa4ede59e79f062541c08cc39a2d786a5"}, +] + +[[package]] +name = "backoff" +version = "1.10.0" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["test"] +files = [ + {file = "backoff-1.10.0-py2.py3-none-any.whl", hash = "sha256:5e73e2cbe780e1915a204799dba0a01896f45f4385e636bcca7a0614d879d0cd"}, + {file = "backoff-1.10.0.tar.gz", hash = "sha256:b8fba021fac74055ac05eb7c7bfce4723aedde6cd0a504e5326bcb0bdd6d19a4"}, +] + +[[package]] +name = "bcrypt" +version = "4.3.0" +description = "Modern password hashing for your software and your servers" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "bcrypt-4.3.0-cp313-cp313t-macosx_10_12_universal2.whl", hash = "sha256:f01e060f14b6b57bbb72fc5b4a83ac21c443c9a2ee708e04a10e9192f90a6281"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5eeac541cefd0bb887a371ef73c62c3cd78535e4887b310626036a7c0a817bb"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59e1aa0e2cd871b08ca146ed08445038f42ff75968c7ae50d2fdd7860ade2180"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:0042b2e342e9ae3d2ed22727c1262f76cc4f345683b5c1715f0250cf4277294f"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74a8d21a09f5e025a9a23e7c0fd2c7fe8e7503e4d356c0a2c1486ba010619f09"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:0142b2cb84a009f8452c8c5a33ace5e3dfec4159e7735f5afe9a4d50a8ea722d"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_34_aarch64.whl", hash = "sha256:12fa6ce40cde3f0b899729dbd7d5e8811cb892d31b6f7d0334a1f37748b789fd"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_34_x86_64.whl", hash = "sha256:5bd3cca1f2aa5dbcf39e2aa13dd094ea181f48959e1071265de49cc2b82525af"}, + {file = "bcrypt-4.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:335a420cfd63fc5bc27308e929bee231c15c85cc4c496610ffb17923abf7f231"}, + {file = "bcrypt-4.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:0e30e5e67aed0187a1764911af023043b4542e70a7461ad20e837e94d23e1d6c"}, + {file = "bcrypt-4.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b8d62290ebefd49ee0b3ce7500f5dbdcf13b81402c05f6dafab9a1e1b27212f"}, + {file = "bcrypt-4.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2ef6630e0ec01376f59a006dc72918b1bf436c3b571b80fa1968d775fa02fe7d"}, + {file = "bcrypt-4.3.0-cp313-cp313t-win32.whl", hash = "sha256:7a4be4cbf241afee43f1c3969b9103a41b40bcb3a3f467ab19f891d9bc4642e4"}, + {file = "bcrypt-4.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c1949bf259a388863ced887c7861da1df681cb2388645766c89fdfd9004c669"}, + {file = "bcrypt-4.3.0-cp38-abi3-macosx_10_12_universal2.whl", hash = "sha256:f81b0ed2639568bf14749112298f9e4e2b28853dab50a8b357e31798686a036d"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:864f8f19adbe13b7de11ba15d85d4a428c7e2f344bac110f667676a0ff84924b"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e36506d001e93bffe59754397572f21bb5dc7c83f54454c990c74a468cd589e"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:842d08d75d9fe9fb94b18b071090220697f9f184d4547179b60734846461ed59"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7c03296b85cb87db865d91da79bf63d5609284fc0cab9472fdd8367bbd830753"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:62f26585e8b219cdc909b6a0069efc5e4267e25d4a3770a364ac58024f62a761"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:beeefe437218a65322fbd0069eb437e7c98137e08f22c4660ac2dc795c31f8bb"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:97eea7408db3a5bcce4a55d13245ab3fa566e23b4c67cd227062bb49e26c585d"}, + {file = "bcrypt-4.3.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:191354ebfe305e84f344c5964c7cd5f924a3bfc5d405c75ad07f232b6dffb49f"}, + {file = "bcrypt-4.3.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:41261d64150858eeb5ff43c753c4b216991e0ae16614a308a15d909503617732"}, + {file = "bcrypt-4.3.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:33752b1ba962ee793fa2b6321404bf20011fe45b9afd2a842139de3011898fef"}, + {file = "bcrypt-4.3.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:50e6e80a4bfd23a25f5c05b90167c19030cf9f87930f7cb2eacb99f45d1c3304"}, + {file = "bcrypt-4.3.0-cp38-abi3-win32.whl", hash = "sha256:67a561c4d9fb9465ec866177e7aebcad08fe23aaf6fbd692a6fab69088abfc51"}, + {file = "bcrypt-4.3.0-cp38-abi3-win_amd64.whl", hash = "sha256:584027857bc2843772114717a7490a37f68da563b3620f78a849bcb54dc11e62"}, + {file = "bcrypt-4.3.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0d3efb1157edebfd9128e4e46e2ac1a64e0c1fe46fb023158a407c7892b0f8c3"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08bacc884fd302b611226c01014eca277d48f0a05187666bca23aac0dad6fe24"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6746e6fec103fcd509b96bacdfdaa2fbde9a553245dbada284435173a6f1aef"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:afe327968aaf13fc143a56a3360cb27d4ad0345e34da12c7290f1b00b8fe9a8b"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d9af79d322e735b1fc33404b5765108ae0ff232d4b54666d46730f8ac1a43676"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f1e3ffa1365e8702dc48c8b360fef8d7afeca482809c5e45e653af82ccd088c1"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:3004df1b323d10021fda07a813fd33e0fd57bef0e9a480bb143877f6cba996fe"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:531457e5c839d8caea9b589a1bcfe3756b0547d7814e9ce3d437f17da75c32b0"}, + {file = "bcrypt-4.3.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:17a854d9a7a476a89dcef6c8bd119ad23e0f82557afbd2c442777a16408e614f"}, + {file = "bcrypt-4.3.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6fb1fd3ab08c0cbc6826a2e0447610c6f09e983a281b919ed721ad32236b8b23"}, + {file = "bcrypt-4.3.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e965a9c1e9a393b8005031ff52583cedc15b7884fce7deb8b0346388837d6cfe"}, + {file = "bcrypt-4.3.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:79e70b8342a33b52b55d93b3a59223a844962bef479f6a0ea318ebbcadf71505"}, + {file = "bcrypt-4.3.0-cp39-abi3-win32.whl", hash = "sha256:b4d4e57f0a63fd0b358eb765063ff661328f69a04494427265950c71b992a39a"}, + {file = "bcrypt-4.3.0-cp39-abi3-win_amd64.whl", hash = "sha256:e53e074b120f2877a35cc6c736b8eb161377caae8925c17688bd46ba56daaa5b"}, + {file = "bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c950d682f0952bafcceaf709761da0a32a942272fad381081b51096ffa46cea1"}, + {file = "bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:107d53b5c67e0bbc3f03ebf5b030e0403d24dda980f8e244795335ba7b4a027d"}, + {file = "bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:b693dbb82b3c27a1604a3dff5bfc5418a7e6a781bb795288141e5f80cf3a3492"}, + {file = "bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:b6354d3760fcd31994a14c89659dee887f1351a06e5dac3c1142307172a79f90"}, + {file = "bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a839320bf27d474e52ef8cb16449bb2ce0ba03ca9f44daba6d93fa1d8828e48a"}, + {file = "bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:bdc6a24e754a555d7316fa4774e64c6c3997d27ed2d1964d55920c7c227bc4ce"}, + {file = "bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:55a935b8e9a1d2def0626c4269db3fcd26728cbff1e84f0341465c31c4ee56d8"}, + {file = "bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:57967b7a28d855313a963aaea51bf6df89f833db4320da458e5b3c5ab6d4c938"}, + {file = "bcrypt-4.3.0.tar.gz", hash = "sha256:3a3fd2204178b6d2adcf09cb4f6426ffef54762577a7c9b54c159008cb288c18"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + +[[package]] +name = "black" +version = "23.12.1" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, + {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, + {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, + {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, + {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, + {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, + {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, + {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, + {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, + {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, + {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, + {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, + {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, + {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, + {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, + {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, + {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, + {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, + {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, + {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, + {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, + {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4) ; sys_platform != \"win32\" or implementation_name != \"pypy\"", "aiohttp (>=3.7.4,!=3.9.0) ; sys_platform == \"win32\" and implementation_name == \"pypy\""] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "boto3" +version = "1.34.69" +description = "The AWS SDK for Python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "boto3-1.34.69-py3-none-any.whl", hash = "sha256:2e25ef6bd325217c2da329829478be063155897d8d3b29f31f7f23ab548519b1"}, + {file = "boto3-1.34.69.tar.gz", hash = "sha256:898a5fed26b1351352703421d1a8b886ef2a74be6c97d5ecc92432ae01fda203"}, +] + +[package.dependencies] +botocore = ">=1.34.69,<1.35.0" +jmespath = ">=0.7.1,<2.0.0" +s3transfer = ">=0.10.0,<0.11.0" + +[package.extras] +crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] + +[[package]] +name = "botocore" +version = "1.34.69" +description = "Low-level, data-driven core of boto 3." +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "botocore-1.34.69-py3-none-any.whl", hash = "sha256:d3802d076d4d507bf506f9845a6970ce43adc3d819dd57c2791f5c19ed6e5950"}, + {file = "botocore-1.34.69.tar.gz", hash = "sha256:d1ab2bff3c2fd51719c2021d9fa2f30fbb9ed0a308f69e9a774ac92c8091380a"}, +] + +[package.dependencies] +jmespath = ">=0.7.1,<2.0.0" +python-dateutil = ">=2.1,<3.0.0" +urllib3 = [ + {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, + {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, +] + +[package.extras] +crt = ["awscrt (==0.19.19)"] + +[[package]] +name = "cachetools" +version = "5.5.2" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, + {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, +] + +[[package]] +name = "certifi" +version = "2025.1.31" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +groups = ["main", "pyppeteer", "test"] +files = [ + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, +] + +[[package]] +name = "cffi" +version = "1.17.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["main", "test"] +files = [ + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, +] + +[[package]] +name = "click" +version = "8.1.8" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +groups = ["dev", "test"] +files = [ + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev", "pyppeteer", "test"] +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +markers = {main = "sys_platform == \"win32\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\"", pyppeteer = "platform_system == \"Windows\"", test = "sys_platform == \"win32\" or platform_system == \"Windows\""} + +[[package]] +name = "connexion" +version = "3.2.0" +description = "Connexion - API first applications with OpenAPI/Swagger" +optional = false +python-versions = "<4.0,>=3.8" +groups = ["test"] +files = [ + {file = "connexion-3.2.0-py3-none-any.whl", hash = "sha256:905950337d40f526fb4f2eed3b15fc15d8c367625921ab9442954a025d3e03b3"}, + {file = "connexion-3.2.0.tar.gz", hash = "sha256:0715d4a0393437aa2a48c144756360f9b5292635a05fd15c38cbbaf04ef5acb9"}, +] + +[package.dependencies] +asgiref = ">=3.4" +httpx = ">=0.23" +inflection = ">=0.3.1" +Jinja2 = ">=3.0.0" +jsonschema = ">=4.17.3" +python-multipart = ">=0.0.15" +PyYAML = ">=5.1" +requests = ">=2.27" +starlette = ">=0.35" +typing-extensions = ">=4.6.1" +uvicorn = {version = ">=0.17.6", extras = ["standard"], optional = true, markers = "extra == \"uvicorn\""} +werkzeug = ">=2.2.1" + +[package.extras] +flask = ["a2wsgi (>=1.7)", "flask[async] (>=2.2)"] +mock = ["jsf (>=0.10.0)"] +swagger-ui = ["swagger-ui-bundle (>=1.1.0)"] +uvicorn = ["uvicorn[standard] (>=0.17.6)"] + +[[package]] +name = "contourpy" +version = "1.3.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, + {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, + {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, + {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, + {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, + {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, + {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, + {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, + {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, + {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, + {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, + {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, +] + +[package.dependencies] +numpy = ">=1.23" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "contourpy" +version = "1.3.1" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.10" +groups = ["test"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595"}, + {file = "contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697"}, + {file = "contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f"}, + {file = "contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"}, + {file = "contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d"}, + {file = "contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e"}, + {file = "contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1"}, + {file = "contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82"}, + {file = "contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53"}, + {file = "contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699"}, +] + +[package.dependencies] +numpy = ">=1.23" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "coverage" +version = "7.8.0" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "coverage-7.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe"}, + {file = "coverage-7.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f"}, + {file = "coverage-7.8.0-cp310-cp310-win32.whl", hash = "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f"}, + {file = "coverage-7.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23"}, + {file = "coverage-7.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27"}, + {file = "coverage-7.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9"}, + {file = "coverage-7.8.0-cp311-cp311-win32.whl", hash = "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c"}, + {file = "coverage-7.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78"}, + {file = "coverage-7.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc"}, + {file = "coverage-7.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe"}, + {file = "coverage-7.8.0-cp312-cp312-win32.whl", hash = "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545"}, + {file = "coverage-7.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b"}, + {file = "coverage-7.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd"}, + {file = "coverage-7.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3"}, + {file = "coverage-7.8.0-cp313-cp313-win32.whl", hash = "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d"}, + {file = "coverage-7.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487"}, + {file = "coverage-7.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25"}, + {file = "coverage-7.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883"}, + {file = "coverage-7.8.0-cp313-cp313t-win32.whl", hash = "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada"}, + {file = "coverage-7.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257"}, + {file = "coverage-7.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f"}, + {file = "coverage-7.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899"}, + {file = "coverage-7.8.0-cp39-cp39-win32.whl", hash = "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f"}, + {file = "coverage-7.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3"}, + {file = "coverage-7.8.0-pp39.pp310.pp311-none-any.whl", hash = "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd"}, + {file = "coverage-7.8.0-py3-none-any.whl", hash = "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7"}, + {file = "coverage-7.8.0.tar.gz", hash = "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] + +[[package]] +name = "cryptography" +version = "43.0.3" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = ">=3.7" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, + {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, + {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, + {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, + {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, + {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, + {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "cryptography" +version = "44.0.2" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = "!=3.9.0,!=3.9.1,>=3.7" +groups = ["test"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "cryptography-44.0.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308"}, + {file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688"}, + {file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7"}, + {file = "cryptography-44.0.2-cp37-abi3-win32.whl", hash = "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79"}, + {file = "cryptography-44.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa"}, + {file = "cryptography-44.0.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23"}, + {file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922"}, + {file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4"}, + {file = "cryptography-44.0.2-cp39-abi3-win32.whl", hash = "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5"}, + {file = "cryptography-44.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:af4ff3e388f2fa7bff9f7f2b31b87d5651c45731d3e8cfa0944be43dff5cfbdb"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0529b1d5a0105dd3731fa65680b45ce49da4d8115ea76e9da77a875396727b41"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7ca25849404be2f8e4b3c59483d9d3c51298a22c1c61a0e84415104dacaf5562"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:268e4e9b177c76d569e8a145a6939eca9a5fec658c932348598818acf31ae9a5"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:9eb9d22b0a5d8fd9925a7764a054dca914000607dff201a24c791ff5c799e1fa"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2bf7bf75f7df9715f810d1b038870309342bff3069c5bd8c6b96128cb158668d"}, + {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:909c97ab43a9c0c0b0ada7a1281430e4e5ec0458e6d9244c0e821bbf152f061d"}, + {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96e7a5e9d6e71f9f4fca8eebfd603f8e86c5225bb18eb621b2c1e50b290a9471"}, + {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d1b3031093a366ac767b3feb8bcddb596671b3aaff82d4050f984da0c248b615"}, + {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390"}, + {file = "cryptography-44.0.2.tar.gz", hash = "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0) ; python_version >= \"3.8\""] +docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] +nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2) ; python_version >= \"3.8\""] +pep8test = ["check-sdist ; python_version >= \"3.8\"", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] +sdist = ["build (>=1.0.0)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi (>=2024)", "cryptography-vectors (==44.0.2)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "dill" +version = "0.3.9" +description = "serialize all of Python" +optional = false +python-versions = ">=3.8" +groups = ["dev", "test"] +files = [ + {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, + {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + +[[package]] +name = "distlib" +version = "0.3.9" +description = "Distribution utilities" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +groups = ["test"] +markers = "python_version < \"3.11\"" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "execnet" +version = "2.1.1" +description = "execnet: rapid multi-Python deployment" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, +] + +[package.extras] +testing = ["hatch", "pre-commit", "pytest", "tox"] + +[[package]] +name = "fastapi" +version = "0.115.12" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"}, + {file = "fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.40.0,<0.47.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "ffmpy" +version = "0.5.0" +description = "A simple Python wrapper for FFmpeg" +optional = false +python-versions = "<4.0,>=3.8" +groups = ["test"] +files = [ + {file = "ffmpy-0.5.0-py3-none-any.whl", hash = "sha256:df3799cf5816daa56d4959a023630ee53c6768b66009dae6d131519ba4b80233"}, + {file = "ffmpy-0.5.0.tar.gz", hash = "sha256:277e131f246d18e9dcfee9bb514c50749031c43582ce5ef82c57b51e3d3955c3"}, +] + +[[package]] +name = "filelock" +version = "3.18.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, + {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] + +[[package]] +name = "fonttools" +version = "4.57.0" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "fonttools-4.57.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:babe8d1eb059a53e560e7bf29f8e8f4accc8b6cfb9b5fd10e485bde77e71ef41"}, + {file = "fonttools-4.57.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:81aa97669cd726349eb7bd43ca540cf418b279ee3caba5e2e295fb4e8f841c02"}, + {file = "fonttools-4.57.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0e9618630edd1910ad4f07f60d77c184b2f572c8ee43305ea3265675cbbfe7e"}, + {file = "fonttools-4.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34687a5d21f1d688d7d8d416cb4c5b9c87fca8a1797ec0d74b9fdebfa55c09ab"}, + {file = "fonttools-4.57.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69ab81b66ebaa8d430ba56c7a5f9abe0183afefd3a2d6e483060343398b13fb1"}, + {file = "fonttools-4.57.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d639397de852f2ccfb3134b152c741406752640a266d9c1365b0f23d7b88077f"}, + {file = "fonttools-4.57.0-cp310-cp310-win32.whl", hash = "sha256:cc066cb98b912f525ae901a24cd381a656f024f76203bc85f78fcc9e66ae5aec"}, + {file = "fonttools-4.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7a64edd3ff6a7f711a15bd70b4458611fb240176ec11ad8845ccbab4fe6745db"}, + {file = "fonttools-4.57.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3871349303bdec958360eedb619169a779956503ffb4543bb3e6211e09b647c4"}, + {file = "fonttools-4.57.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c59375e85126b15a90fcba3443eaac58f3073ba091f02410eaa286da9ad80ed8"}, + {file = "fonttools-4.57.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967b65232e104f4b0f6370a62eb33089e00024f2ce143aecbf9755649421c683"}, + {file = "fonttools-4.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39acf68abdfc74e19de7485f8f7396fa4d2418efea239b7061d6ed6a2510c746"}, + {file = "fonttools-4.57.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d077f909f2343daf4495ba22bb0e23b62886e8ec7c109ee8234bdbd678cf344"}, + {file = "fonttools-4.57.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:46370ac47a1e91895d40e9ad48effbe8e9d9db1a4b80888095bc00e7beaa042f"}, + {file = "fonttools-4.57.0-cp311-cp311-win32.whl", hash = "sha256:ca2aed95855506b7ae94e8f1f6217b7673c929e4f4f1217bcaa236253055cb36"}, + {file = "fonttools-4.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:17168a4670bbe3775f3f3f72d23ee786bd965395381dfbb70111e25e81505b9d"}, + {file = "fonttools-4.57.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:889e45e976c74abc7256d3064aa7c1295aa283c6bb19810b9f8b604dfe5c7f31"}, + {file = "fonttools-4.57.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0425c2e052a5f1516c94e5855dbda706ae5a768631e9fcc34e57d074d1b65b92"}, + {file = "fonttools-4.57.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44c26a311be2ac130f40a96769264809d3b0cb297518669db437d1cc82974888"}, + {file = "fonttools-4.57.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c41ba992df5b8d680b89fd84c6a1f2aca2b9f1ae8a67400c8930cd4ea115f6"}, + {file = "fonttools-4.57.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ea1e9e43ca56b0c12440a7c689b1350066595bebcaa83baad05b8b2675129d98"}, + {file = "fonttools-4.57.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84fd56c78d431606332a0627c16e2a63d243d0d8b05521257d77c6529abe14d8"}, + {file = "fonttools-4.57.0-cp312-cp312-win32.whl", hash = "sha256:f4376819c1c778d59e0a31db5dc6ede854e9edf28bbfa5b756604727f7f800ac"}, + {file = "fonttools-4.57.0-cp312-cp312-win_amd64.whl", hash = "sha256:57e30241524879ea10cdf79c737037221f77cc126a8cdc8ff2c94d4a522504b9"}, + {file = "fonttools-4.57.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:408ce299696012d503b714778d89aa476f032414ae57e57b42e4b92363e0b8ef"}, + {file = "fonttools-4.57.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bbceffc80aa02d9e8b99f2a7491ed8c4a783b2fc4020119dc405ca14fb5c758c"}, + {file = "fonttools-4.57.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f022601f3ee9e1f6658ed6d184ce27fa5216cee5b82d279e0f0bde5deebece72"}, + {file = "fonttools-4.57.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dea5893b58d4637ffa925536462ba626f8a1b9ffbe2f5c272cdf2c6ebadb817"}, + {file = "fonttools-4.57.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dff02c5c8423a657c550b48231d0a48d7e2b2e131088e55983cfe74ccc2c7cc9"}, + {file = "fonttools-4.57.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:767604f244dc17c68d3e2dbf98e038d11a18abc078f2d0f84b6c24571d9c0b13"}, + {file = "fonttools-4.57.0-cp313-cp313-win32.whl", hash = "sha256:8e2e12d0d862f43d51e5afb8b9751c77e6bec7d2dc00aad80641364e9df5b199"}, + {file = "fonttools-4.57.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3"}, + {file = "fonttools-4.57.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9d57b4e23ebbe985125d3f0cabbf286efa191ab60bbadb9326091050d88e8213"}, + {file = "fonttools-4.57.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:579ba873d7f2a96f78b2e11028f7472146ae181cae0e4d814a37a09e93d5c5cc"}, + {file = "fonttools-4.57.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e3e1ec10c29bae0ea826b61f265ec5c858c5ba2ce2e69a71a62f285cf8e4595"}, + {file = "fonttools-4.57.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1968f2a2003c97c4ce6308dc2498d5fd4364ad309900930aa5a503c9851aec8"}, + {file = "fonttools-4.57.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:aff40f8ac6763d05c2c8f6d240c6dac4bb92640a86d9b0c3f3fff4404f34095c"}, + {file = "fonttools-4.57.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d07f1b64008e39fceae7aa99e38df8385d7d24a474a8c9872645c4397b674481"}, + {file = "fonttools-4.57.0-cp38-cp38-win32.whl", hash = "sha256:51d8482e96b28fb28aa8e50b5706f3cee06de85cbe2dce80dbd1917ae22ec5a6"}, + {file = "fonttools-4.57.0-cp38-cp38-win_amd64.whl", hash = "sha256:03290e818782e7edb159474144fca11e36a8ed6663d1fcbd5268eb550594fd8e"}, + {file = "fonttools-4.57.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7339e6a3283e4b0ade99cade51e97cde3d54cd6d1c3744459e886b66d630c8b3"}, + {file = "fonttools-4.57.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:05efceb2cb5f6ec92a4180fcb7a64aa8d3385fd49cfbbe459350229d1974f0b1"}, + {file = "fonttools-4.57.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a97bb05eb24637714a04dee85bdf0ad1941df64fe3b802ee4ac1c284a5f97b7c"}, + {file = "fonttools-4.57.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:541cb48191a19ceb1a2a4b90c1fcebd22a1ff7491010d3cf840dd3a68aebd654"}, + {file = "fonttools-4.57.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cdef9a056c222d0479a1fdb721430f9efd68268014c54e8166133d2643cb05d9"}, + {file = "fonttools-4.57.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3cf97236b192a50a4bf200dc5ba405aa78d4f537a2c6e4c624bb60466d5b03bd"}, + {file = "fonttools-4.57.0-cp39-cp39-win32.whl", hash = "sha256:e952c684274a7714b3160f57ec1d78309f955c6335c04433f07d36c5eb27b1f9"}, + {file = "fonttools-4.57.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2a722c0e4bfd9966a11ff55c895c817158fcce1b2b6700205a376403b546ad9"}, + {file = "fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f"}, + {file = "fonttools-4.57.0.tar.gz", hash = "sha256:727ece10e065be2f9dd239d15dd5d60a66e17eac11aea47d447f9f03fdbc42de"}, +] + +[package.extras] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr ; sys_platform == \"darwin\""] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] +woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] + +[[package]] +name = "frozenlist" +version = "1.5.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, + {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, + {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, + {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, + {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, + {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, + {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, + {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, + {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, + {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, + {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, + {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, + {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, + {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, + {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, +] + +[[package]] +name = "google-api-core" +version = "2.17.1" +description = "Google API client core library" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "google-api-core-2.17.1.tar.gz", hash = "sha256:9df18a1f87ee0df0bc4eea2770ebc4228392d8cc4066655b320e2cfccb15db95"}, + {file = "google_api_core-2.17.1-py3-none-any.whl", hash = "sha256:610c5b90092c360736baccf17bd3efbcb30dd380e7a6dc28a71059edb8bd0d8e"}, +] + +[package.dependencies] +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0) ; python_version >= \"3.11\""] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] + +[[package]] +name = "google-auth" +version = "2.38.0" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "google_auth-2.38.0-py2.py3-none-any.whl", hash = "sha256:e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a"}, + {file = "google_auth-2.38.0.tar.gz", hash = "sha256:8285113607d3b80a3f1543b75962447ba8a09fe85783432a784fdeef6ac094c4"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography", "pyopenssl"] +pyjwt = ["cryptography (>=38.0.3)", "pyjwt (>=2.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "googleapis-common-protos" +version = "1.69.2" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "googleapis_common_protos-1.69.2-py3-none-any.whl", hash = "sha256:0b30452ff9c7a27d80bfc5718954063e8ab53dd3697093d3bc99581f5fd24212"}, + {file = "googleapis_common_protos-1.69.2.tar.gz", hash = "sha256:3e1b904a27a33c821b4b749fd31d334c0c9c30e6113023d495e48979a3dc9c5f"}, +] + +[package.dependencies] +protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0)"] + +[[package]] +name = "gradio" +version = "3.0" +description = "Python library for easily interacting with trained machine learning models" +optional = false +python-versions = "*" +groups = ["test"] +files = [ + {file = "gradio-3.0-py3-none-any.whl", hash = "sha256:edda941c4754c69d63e561e7ec5e5ce8e16ea1c420955cdb4e5fc7150d564ef3"}, + {file = "gradio-3.0.tar.gz", hash = "sha256:f23ed75bd1b27bb856ff89d730be3ad43f9846ce2e126f4d7f50c2a1b4a427f8"}, +] + +[package.dependencies] +aiohttp = "*" +analytics-python = "*" +fastapi = "*" +ffmpy = "*" +Jinja2 = "*" +markdown-it-py = {version = "*", extras = ["linkify", "plugins"]} +matplotlib = "*" +numpy = "*" +orjson = "*" +pandas = "*" +paramiko = "*" +pillow = "*" +pycryptodome = "*" +pydub = "*" +python-multipart = "*" +requests = "*" +uvicorn = "*" + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.7" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httptools" +version = "0.6.4" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +groups = ["test"] +files = [ + {file = "httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0"}, + {file = "httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da"}, + {file = "httptools-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1"}, + {file = "httptools-0.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50"}, + {file = "httptools-0.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959"}, + {file = "httptools-0.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4"}, + {file = "httptools-0.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c"}, + {file = "httptools-0.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069"}, + {file = "httptools-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a"}, + {file = "httptools-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975"}, + {file = "httptools-0.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636"}, + {file = "httptools-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721"}, + {file = "httptools-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988"}, + {file = "httptools-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17"}, + {file = "httptools-0.6.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2"}, + {file = "httptools-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44"}, + {file = "httptools-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1"}, + {file = "httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2"}, + {file = "httptools-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81"}, + {file = "httptools-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f"}, + {file = "httptools-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970"}, + {file = "httptools-0.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660"}, + {file = "httptools-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083"}, + {file = "httptools-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3"}, + {file = "httptools-0.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071"}, + {file = "httptools-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5"}, + {file = "httptools-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0"}, + {file = "httptools-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8"}, + {file = "httptools-0.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba"}, + {file = "httptools-0.6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc"}, + {file = "httptools-0.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff"}, + {file = "httptools-0.6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490"}, + {file = "httptools-0.6.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43"}, + {file = "httptools-0.6.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440"}, + {file = "httptools-0.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f"}, + {file = "httptools-0.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003"}, + {file = "httptools-0.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab"}, + {file = "httptools-0.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547"}, + {file = "httptools-0.6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9"}, + {file = "httptools-0.6.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076"}, + {file = "httptools-0.6.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd"}, + {file = "httptools-0.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6"}, + {file = "httptools-0.6.4.tar.gz", hash = "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c"}, +] + +[package.extras] +test = ["Cython (>=0.29.24)"] + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "identify" +version = "2.6.9" +description = "File identification library for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "identify-2.6.9-py2.py3-none-any.whl", hash = "sha256:c98b4322da415a8e5a70ff6e51fbc2d2932c015532d77e9f8537b4ba7813b150"}, + {file = "identify-2.6.9.tar.gz", hash = "sha256:d40dfe3142a1421d8518e3d3985ef5ac42890683e32306ad614a29490abeb6bf"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +groups = ["main", "test"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "importlib-metadata" +version = "8.6.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["pyppeteer"] +files = [ + {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, + {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, +] + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] + +[[package]] +name = "importlib-resources" +version = "6.5.2" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, + {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] +type = ["pytest-mypy"] + +[[package]] +name = "inflection" +version = "0.5.1" +description = "A port of Ruby on Rails inflector to Python" +optional = false +python-versions = ">=3.5" +groups = ["test"] +files = [ + {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, + {file = "inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"}, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, +] + +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +groups = ["dev", "test"] +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + +[[package]] +name = "jinja2" +version = "3.1.6" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jmespath" +version = "1.0.1" +description = "JSON Matching Expressions" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, + {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, +] + +[[package]] +name = "jsonschema" +version = "4.23.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, + {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + +[[package]] +name = "kiwisolver" +version = "1.4.7" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.8" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, + {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.8" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.10" +groups = ["test"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e"}, + {file = "kiwisolver-1.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751"}, + {file = "kiwisolver-1.4.8-cp310-cp310-win_arm64.whl", hash = "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67"}, + {file = "kiwisolver-1.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34"}, + {file = "kiwisolver-1.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8"}, + {file = "kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50"}, + {file = "kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb"}, + {file = "kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2"}, + {file = "kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b"}, + {file = "kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e"}, +] + +[[package]] +name = "linkify-it-py" +version = "2.0.3" +description = "Links recognition library with FULL unicode support." +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048"}, + {file = "linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79"}, +] + +[package.dependencies] +uc-micro-py = "*" + +[package.extras] +benchmark = ["pytest", "pytest-benchmark"] +dev = ["black", "flake8", "isort", "pre-commit", "pyproject-flake8"] +doc = ["myst-parser", "sphinx", "sphinx-book-theme"] +test = ["coverage", "pytest", "pytest-cov"] + +[[package]] +name = "loguru" +version = "0.6.0" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +groups = ["main"] +files = [ + {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, + {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (>=4.1.1) ; python_version >= \"3.6\"", "black (>=19.10b0) ; python_version >= \"3.6\"", "colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "isort (>=5.1.1) ; python_version >= \"3.6\"", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "sphinx-autobuild (>=0.7.1) ; python_version >= \"3.6\"", "sphinx-rtd-theme (>=0.4.3) ; python_version >= \"3.6\"", "tox (>=3.9.0)"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +linkify-it-py = {version = ">=1,<3", optional = true, markers = "extra == \"linkify\""} +mdit-py-plugins = {version = "*", optional = true, markers = "extra == \"plugins\""} +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "matplotlib" +version = "3.9.4" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50"}, + {file = "matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff"}, + {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26"}, + {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50"}, + {file = "matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5"}, + {file = "matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d"}, + {file = "matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c"}, + {file = "matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099"}, + {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249"}, + {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423"}, + {file = "matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e"}, + {file = "matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3"}, + {file = "matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70"}, + {file = "matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483"}, + {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f"}, + {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00"}, + {file = "matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0"}, + {file = "matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b"}, + {file = "matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6"}, + {file = "matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45"}, + {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858"}, + {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64"}, + {file = "matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df"}, + {file = "matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799"}, + {file = "matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb"}, + {file = "matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a"}, + {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c"}, + {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764"}, + {file = "matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041"}, + {file = "matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965"}, + {file = "matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c"}, + {file = "matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7"}, + {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e"}, + {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c"}, + {file = "matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb"}, + {file = "matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865"}, + {file = "matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1,<0.17.0)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "matplotlib" +version = "3.10.1" +description = "Python plotting package" +optional = false +python-versions = ">=3.10" +groups = ["test"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "matplotlib-3.10.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ff2ae14910be903f4a24afdbb6d7d3a6c44da210fc7d42790b87aeac92238a16"}, + {file = "matplotlib-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0721a3fd3d5756ed593220a8b86808a36c5031fce489adb5b31ee6dbb47dd5b2"}, + {file = "matplotlib-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0673b4b8f131890eb3a1ad058d6e065fb3c6e71f160089b65f8515373394698"}, + {file = "matplotlib-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e875b95ac59a7908978fe307ecdbdd9a26af7fa0f33f474a27fcf8c99f64a19"}, + {file = "matplotlib-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2589659ea30726284c6c91037216f64a506a9822f8e50592d48ac16a2f29e044"}, + {file = "matplotlib-3.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a97ff127f295817bc34517255c9db6e71de8eddaab7f837b7d341dee9f2f587f"}, + {file = "matplotlib-3.10.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:057206ff2d6ab82ff3e94ebd94463d084760ca682ed5f150817b859372ec4401"}, + {file = "matplotlib-3.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a144867dd6bf8ba8cb5fc81a158b645037e11b3e5cf8a50bd5f9917cb863adfe"}, + {file = "matplotlib-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56c5d9fcd9879aa8040f196a235e2dcbdf7dd03ab5b07c0696f80bc6cf04bedd"}, + {file = "matplotlib-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f69dc9713e4ad2fb21a1c30e37bd445d496524257dfda40ff4a8efb3604ab5c"}, + {file = "matplotlib-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c59af3e8aca75d7744b68e8e78a669e91ccbcf1ac35d0102a7b1b46883f1dd7"}, + {file = "matplotlib-3.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:11b65088c6f3dae784bc72e8d039a2580186285f87448babb9ddb2ad0082993a"}, + {file = "matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107"}, + {file = "matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be"}, + {file = "matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6"}, + {file = "matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d"}, + {file = "matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea"}, + {file = "matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c"}, + {file = "matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b"}, + {file = "matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1"}, + {file = "matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3"}, + {file = "matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6"}, + {file = "matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b"}, + {file = "matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473"}, + {file = "matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01"}, + {file = "matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb"}, + {file = "matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972"}, + {file = "matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3"}, + {file = "matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f"}, + {file = "matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9"}, + {file = "matplotlib-3.10.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:648406f1899f9a818cef8c0231b44dcfc4ff36f167101c3fd1c9151f24220fdc"}, + {file = "matplotlib-3.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:02582304e352f40520727984a5a18f37e8187861f954fea9be7ef06569cf85b4"}, + {file = "matplotlib-3.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3809916157ba871bcdd33d3493acd7fe3037db5daa917ca6e77975a94cef779"}, + {file = "matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +groups = ["dev", "test"] +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.4.2" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"}, + {file = "mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +groups = ["test"] +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + +[[package]] +name = "multidict" +version = "6.3.2" +description = "multidict implementation" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "multidict-6.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8b3dc0eec9304fa04d84a51ea13b0ec170bace5b7ddeaac748149efd316f1504"}, + {file = "multidict-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9534f3d84addd3b6018fa83f97c9d4247aaa94ac917d1ed7b2523306f99f5c16"}, + {file = "multidict-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a003ce1413ae01f0b8789c1c987991346a94620a4d22210f7a8fe753646d3209"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b43f7384e68b1b982c99f489921a459467b5584bdb963b25e0df57c9039d0ad"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d142ae84047262dc75c1f92eaf95b20680f85ce11d35571b4c97e267f96fadc4"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ec7e86fbc48aa1d6d686501a8547818ba8d645e7e40eaa98232a5d43ee4380ad"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe019fb437632b016e6cac67a7e964f1ef827ef4023f1ca0227b54be354da97e"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b60cb81214a9da7cfd8ae2853d5e6e47225ece55fe5833142fe0af321c35299"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:32d9e8ef2e0312d4e96ca9adc88e0675b6d8e144349efce4a7c95d5ccb6d88e0"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:335d584312e3fa43633d63175dfc1a5f137dd7aa03d38d1310237d54c3032774"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:b8df917faa6b8cac3d6870fc21cb7e4d169faca68e43ffe568c156c9c6408a4d"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:cc060b9b89b701dd8fedef5b99e1f1002b8cb95072693233a63389d37e48212d"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f2ce3be2500658f3c644494b934628bb0c82e549dde250d2119689ce791cc8b8"}, + {file = "multidict-6.3.2-cp310-cp310-win32.whl", hash = "sha256:dbcb4490d8e74b484449abd51751b8f560dd0a4812eb5dacc6a588498222a9ab"}, + {file = "multidict-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:06944f9ced30f8602be873563ed4df7e3f40958f60b2db39732c11d615a33687"}, + {file = "multidict-6.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:45a034f41fcd16968c0470d8912d293d7b0d0822fc25739c5c2ff7835b85bc56"}, + {file = "multidict-6.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:352585cec45f5d83d886fc522955492bb436fca032b11d487b12d31c5a81b9e3"}, + {file = "multidict-6.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:da9d89d293511fd0a83a90559dc131f8b3292b6975eb80feff19e5f4663647e2"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fa716592224aa652b9347a586cfe018635229074565663894eb4eb21f8307f"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0326278a44c56e94792475268e5cd3d47fbc0bd41ee56928c3bbb103ba7f58fe"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb1ea87f7fe45e5079f6315e95d64d4ca8b43ef656d98bed63a02e3756853a22"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cff3c5a98d037024a9065aafc621a8599fad7b423393685dc83cf7a32f8b691"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed99834b053c655d980fb98029003cb24281e47a796052faad4543aa9e01b8e8"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7048440e505d2b4741e5d0b32bd2f427c901f38c7760fc245918be2cf69b3b85"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:27248c27b563f5889556da8a96e18e98a56ff807ac1a7d56cf4453c2c9e4cd91"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6323b4ba0e018bd266f776c35f3f0943fc4ee77e481593c9f93bd49888f24e94"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:81f7ce5ec7c27d0b45c10449c8f0fed192b93251e2e98cb0b21fec779ef1dc4d"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03bfcf2825b3bed0ba08a9d854acd18b938cab0d2dba3372b51c78e496bac811"}, + {file = "multidict-6.3.2-cp311-cp311-win32.whl", hash = "sha256:f32c2790512cae6ca886920e58cdc8c784bdc4bb2a5ec74127c71980369d18dc"}, + {file = "multidict-6.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:0b0c15e58e038a2cd75ef7cf7e072bc39b5e0488b165902efb27978984bbad70"}, + {file = "multidict-6.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d1e0ba1ce1b8cc79117196642d95f4365e118eaf5fb85f57cdbcc5a25640b2a4"}, + {file = "multidict-6.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:029bbd7d782251a78975214b78ee632672310f9233d49531fc93e8e99154af25"}, + {file = "multidict-6.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7db41e3b56817d9175264e5fe00192fbcb8e1265307a59f53dede86161b150e"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcab18e65cc555ac29981a581518c23311f2b1e72d8f658f9891590465383be"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d50eff89aa4d145a5486b171a2177042d08ea5105f813027eb1050abe91839f"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:643e57b403d3e240045a3681f9e6a04d35a33eddc501b4cbbbdbc9c70122e7bc"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d17b37b9715b30605b5bab1460569742d0c309e5c20079263b440f5d7746e7e"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68acd51fa94e63312b8ddf84bfc9c3d3442fe1f9988bbe1b6c703043af8867fe"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:347eea2852ab7f697cc5ed9b1aae96b08f8529cca0c6468f747f0781b1842898"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4d3f8e57027dcda84a1aa181501c15c45eab9566eb6fcc274cbd1e7561224f8"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9ca57a841ffcf712e47875d026aa49d6e67f9560624d54b51628603700d5d287"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7cafdafb44c4e646118410368307693e49d19167e5f119cbe3a88697d2d1a636"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:430120c6ce3715a9c6075cabcee557daccbcca8ba25a9fedf05c7bf564532f2d"}, + {file = "multidict-6.3.2-cp312-cp312-win32.whl", hash = "sha256:13bec31375235a68457ab887ce1bbf4f59d5810d838ae5d7e5b416242e1f3ed4"}, + {file = "multidict-6.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:c3b6d7620e6e90c6d97eaf3a63bf7fbd2ba253aab89120a4a9c660bf2d675391"}, + {file = "multidict-6.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b9ca24700322816ae0d426aa33671cf68242f8cc85cee0d0e936465ddaee90b5"}, + {file = "multidict-6.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d9fbbe23667d596ff4f9f74d44b06e40ebb0ab6b262cf14a284f859a66f86457"}, + {file = "multidict-6.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9cb602c5bea0589570ad3a4a6f2649c4f13cc7a1e97b4c616e5e9ff8dc490987"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93ca81dd4d1542e20000ed90f4cc84b7713776f620d04c2b75b8efbe61106c99"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18b6310b5454c62242577a128c87df8897f39dd913311cf2e1298e47dfc089eb"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a6dda57de1fc9aedfdb600a8640c99385cdab59a5716cb714b52b6005797f77"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d8ec42d03cc6b29845552a68151f9e623c541f1708328353220af571e24a247"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80681969cee2fa84dafeb53615d51d24246849984e3e87fbe4fe39956f2e23bf"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:01489b0c3592bb9d238e5690e9566db7f77a5380f054b57077d2c4deeaade0eb"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:522d9f1fd995d04dfedc0a40bca7e2591bc577d920079df50b56245a4a252c1c"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2014e9cf0b4e9c75bbad49c1758e5a9bf967a56184fc5fcc51527425baf5abba"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:78ced9fcbee79e446ff4bb3018ac7ba1670703de7873d9c1f6f9883db53c71bc"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1faf01af972bd01216a107c195f5294f9f393531bc3e4faddc9b333581255d4d"}, + {file = "multidict-6.3.2-cp313-cp313-win32.whl", hash = "sha256:7a699ab13d8d8e1f885de1535b4f477fb93836c87168318244c2685da7b7f655"}, + {file = "multidict-6.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:8666bb0d883310c83be01676e302587834dfd185b52758caeab32ef0eb387bc6"}, + {file = "multidict-6.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:d82c95aabee29612b1c4f48b98be98181686eb7d6c0152301f72715705cc787b"}, + {file = "multidict-6.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f47709173ea9e87a7fd05cd7e5cf1e5d4158924ff988a9a8e0fbd853705f0e68"}, + {file = "multidict-6.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c7f9d0276ceaab41b8ae78534ff28ea33d5de85db551cbf80c44371f2b55d13"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6eab22df44a25acab2e738f882f5ec551282ab45b2bbda5301e6d2cfb323036"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a947cb7c657f57874021b9b70c7aac049c877fb576955a40afa8df71d01a1390"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5faa346e8e1c371187cf345ab1e02a75889f9f510c9cbc575c31b779f7df084d"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc6e08d977aebf1718540533b4ba5b351ccec2db093370958a653b1f7f9219cc"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:98eab7acf55275b5bf09834125fa3a80b143a9f241cdcdd3f1295ffdc3c6d097"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:36863655630becc224375c0b99364978a0f95aebfb27fb6dd500f7fb5fb36e79"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d9c0979c096c0d46a963331b0e400d3a9e560e41219df4b35f0d7a2f28f39710"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:0efc04f70f05e70e5945890767e8874da5953a196f5b07c552d305afae0f3bf6"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:2c519b3b82c34539fae3e22e4ea965869ac6b628794b1eb487780dde37637ab7"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:329160e301f2afd7b43725d3dda8a7ef8ee41d4ceac2083fc0d8c1cc8a4bd56b"}, + {file = "multidict-6.3.2-cp313-cp313t-win32.whl", hash = "sha256:420e5144a5f598dad8db3128f1695cd42a38a0026c2991091dab91697832f8cc"}, + {file = "multidict-6.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:875faded2861c7af2682c67088e6313fec35ede811e071c96d36b081873cea14"}, + {file = "multidict-6.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2516c5eb5732d6c4e29fa93323bfdc55186895124bc569e2404e3820934be378"}, + {file = "multidict-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:be5c8622e665cc5491c13c0fcd52915cdbae991a3514251d71129691338cdfb2"}, + {file = "multidict-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ef33150eea7953cfdb571d862cff894e0ad97ab80d97731eb4b9328fc32d52b"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40b357738ce46e998f1b1bad9c4b79b2a9755915f71b87a8c01ce123a22a4f99"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c60e059fcd3655a653ba99fec2556cd0260ec57f9cb138d3e6ffc413638a2e"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:629e7c5e75bde83e54a22c7043ce89d68691d1f103be6d09a1c82b870df3b4b8"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee6c8fc97d893fdf1fff15a619fee8de2f31c9b289ef7594730e35074fa0cefb"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52081d2f27e0652265d4637b03f09b82f6da5ce5e1474f07dc64674ff8bfc04c"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:64529dc395b5fd0a7826ffa70d2d9a7f4abd8f5333d6aaaba67fdf7bedde9f21"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2b7c3fad827770840f5399348c89635ed6d6e9bba363baad7d3c7f86a9cf1da3"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:24aa42b1651c654ae9e5273e06c3b7ccffe9f7cc76fbde40c37e9ae65f170818"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:04ceea01e9991357164b12882e120ce6b4d63a0424bb9f9cd37910aa56d30830"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:943897a41160945416617db567d867ab34e9258adaffc56a25a4c3f99d919598"}, + {file = "multidict-6.3.2-cp39-cp39-win32.whl", hash = "sha256:76157a9a0c5380aadd3b5ff7b8deee355ff5adecc66c837b444fa633b4d409a2"}, + {file = "multidict-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:d091d123e44035cd5664554308477aff0b58db37e701e7598a67e907b98d1925"}, + {file = "multidict-6.3.2-py3-none-any.whl", hash = "sha256:71409d4579f716217f23be2f5e7afca5ca926aaeb398aa11b72d793bff637a1f"}, + {file = "multidict-6.3.2.tar.gz", hash = "sha256:c1035eea471f759fa853dd6e76aaa1e389f93b3e1403093fa0fd3ab4db490678"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +groups = ["dev"] +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "numpy" +version = "2.0.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, + {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, + {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, + {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, + {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, + {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, + {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, + {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, + {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, + {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, +] + +[[package]] +name = "numpy" +version = "2.2.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.10" +groups = ["main", "test"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "numpy-2.2.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8146f3550d627252269ac42ae660281d673eb6f8b32f113538e0cc2a9aed42b9"}, + {file = "numpy-2.2.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e642d86b8f956098b564a45e6f6ce68a22c2c97a04f5acd3f221f57b8cb850ae"}, + {file = "numpy-2.2.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:a84eda42bd12edc36eb5b53bbcc9b406820d3353f1994b6cfe453a33ff101775"}, + {file = "numpy-2.2.4-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:4ba5054787e89c59c593a4169830ab362ac2bee8a969249dc56e5d7d20ff8df9"}, + {file = "numpy-2.2.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7716e4a9b7af82c06a2543c53ca476fa0b57e4d760481273e09da04b74ee6ee2"}, + {file = "numpy-2.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adf8c1d66f432ce577d0197dceaac2ac00c0759f573f28516246351c58a85020"}, + {file = "numpy-2.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:218f061d2faa73621fa23d6359442b0fc658d5b9a70801373625d958259eaca3"}, + {file = "numpy-2.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:df2f57871a96bbc1b69733cd4c51dc33bea66146b8c63cacbfed73eec0883017"}, + {file = "numpy-2.2.4-cp310-cp310-win32.whl", hash = "sha256:a0258ad1f44f138b791327961caedffbf9612bfa504ab9597157806faa95194a"}, + {file = "numpy-2.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:0d54974f9cf14acf49c60f0f7f4084b6579d24d439453d5fc5805d46a165b542"}, + {file = "numpy-2.2.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e9e0a277bb2eb5d8a7407e14688b85fd8ad628ee4e0c7930415687b6564207a4"}, + {file = "numpy-2.2.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9eeea959168ea555e556b8188da5fa7831e21d91ce031e95ce23747b7609f8a4"}, + {file = "numpy-2.2.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:bd3ad3b0a40e713fc68f99ecfd07124195333f1e689387c180813f0e94309d6f"}, + {file = "numpy-2.2.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cf28633d64294969c019c6df4ff37f5698e8326db68cc2b66576a51fad634880"}, + {file = "numpy-2.2.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fa8fa7697ad1646b5c93de1719965844e004fcad23c91228aca1cf0800044a1"}, + {file = "numpy-2.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4162988a360a29af158aeb4a2f4f09ffed6a969c9776f8f3bdee9b06a8ab7e5"}, + {file = "numpy-2.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:892c10d6a73e0f14935c31229e03325a7b3093fafd6ce0af704be7f894d95687"}, + {file = "numpy-2.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db1f1c22173ac1c58db249ae48aa7ead29f534b9a948bc56828337aa84a32ed6"}, + {file = "numpy-2.2.4-cp311-cp311-win32.whl", hash = "sha256:ea2bb7e2ae9e37d96835b3576a4fa4b3a97592fbea8ef7c3587078b0068b8f09"}, + {file = "numpy-2.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:f7de08cbe5551911886d1ab60de58448c6df0f67d9feb7d1fb21e9875ef95e91"}, + {file = "numpy-2.2.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4"}, + {file = "numpy-2.2.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854"}, + {file = "numpy-2.2.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24"}, + {file = "numpy-2.2.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee"}, + {file = "numpy-2.2.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba"}, + {file = "numpy-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592"}, + {file = "numpy-2.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb"}, + {file = "numpy-2.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f"}, + {file = "numpy-2.2.4-cp312-cp312-win32.whl", hash = "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00"}, + {file = "numpy-2.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146"}, + {file = "numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7"}, + {file = "numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0"}, + {file = "numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392"}, + {file = "numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc"}, + {file = "numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298"}, + {file = "numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7"}, + {file = "numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6"}, + {file = "numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd"}, + {file = "numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c"}, + {file = "numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3"}, + {file = "numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8"}, + {file = "numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39"}, + {file = "numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd"}, + {file = "numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0"}, + {file = "numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960"}, + {file = "numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8"}, + {file = "numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc"}, + {file = "numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff"}, + {file = "numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286"}, + {file = "numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d"}, + {file = "numpy-2.2.4-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7051ee569db5fbac144335e0f3b9c2337e0c8d5c9fee015f259a5bd70772b7e8"}, + {file = "numpy-2.2.4-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:ab2939cd5bec30a7430cbdb2287b63151b77cf9624de0532d629c9a1c59b1d5c"}, + {file = "numpy-2.2.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0f35b19894a9e08639fd60a1ec1978cb7f5f7f1eace62f38dd36be8aecdef4d"}, + {file = "numpy-2.2.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b4adfbbc64014976d2f91084915ca4e626fbf2057fb81af209c1a6d776d23e3d"}, + {file = "numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f"}, +] + +[[package]] +name = "orjson" +version = "3.10.16" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "orjson-3.10.16-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4cb473b8e79154fa778fb56d2d73763d977be3dcc140587e07dbc545bbfc38f8"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:622a8e85eeec1948690409a19ca1c7d9fd8ff116f4861d261e6ae2094fe59a00"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c682d852d0ce77613993dc967e90e151899fe2d8e71c20e9be164080f468e370"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c520ae736acd2e32df193bcff73491e64c936f3e44a2916b548da048a48b46b"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:134f87c76bfae00f2094d85cfab261b289b76d78c6da8a7a3b3c09d362fd1e06"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b59afde79563e2cf37cfe62ee3b71c063fd5546c8e662d7fcfc2a3d5031a5c4c"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:113602f8241daaff05d6fad25bd481d54c42d8d72ef4c831bb3ab682a54d9e15"}, + {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4fc0077d101f8fab4031e6554fc17b4c2ad8fdbc56ee64a727f3c95b379e31da"}, + {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9c6bf6ff180cd69e93f3f50380224218cfab79953a868ea3908430bcfaf9cb5e"}, + {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5673eadfa952f95a7cd76418ff189df11b0a9c34b1995dff43a6fdbce5d63bf4"}, + {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5fe638a423d852b0ae1e1a79895851696cb0d9fa0946fdbfd5da5072d9bb9551"}, + {file = "orjson-3.10.16-cp310-cp310-win32.whl", hash = "sha256:33af58f479b3c6435ab8f8b57999874b4b40c804c7a36b5cc6b54d8f28e1d3dd"}, + {file = "orjson-3.10.16-cp310-cp310-win_amd64.whl", hash = "sha256:0338356b3f56d71293c583350af26f053017071836b07e064e92819ecf1aa055"}, + {file = "orjson-3.10.16-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44fcbe1a1884f8bc9e2e863168b0f84230c3d634afe41c678637d2728ea8e739"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78177bf0a9d0192e0b34c3d78bcff7fe21d1b5d84aeb5ebdfe0dbe637b885225"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12824073a010a754bb27330cad21d6e9b98374f497f391b8707752b96f72e741"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddd41007e56284e9867864aa2f29f3136bb1dd19a49ca43c0b4eda22a579cf53"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0877c4d35de639645de83666458ca1f12560d9fa7aa9b25d8bb8f52f61627d14"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9a09a539e9cc3beead3e7107093b4ac176d015bec64f811afb5965fce077a03c"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31b98bc9b40610fec971d9a4d67bb2ed02eec0a8ae35f8ccd2086320c28526ca"}, + {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0ce243f5a8739f3a18830bc62dc2e05b69a7545bafd3e3249f86668b2bcd8e50"}, + {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:64792c0025bae049b3074c6abe0cf06f23c8e9f5a445f4bab31dc5ca23dbf9e1"}, + {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ea53f7e68eec718b8e17e942f7ca56c6bd43562eb19db3f22d90d75e13f0431d"}, + {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a741ba1a9488c92227711bde8c8c2b63d7d3816883268c808fbeada00400c164"}, + {file = "orjson-3.10.16-cp311-cp311-win32.whl", hash = "sha256:c7ed2c61bb8226384c3fdf1fb01c51b47b03e3f4536c985078cccc2fd19f1619"}, + {file = "orjson-3.10.16-cp311-cp311-win_amd64.whl", hash = "sha256:cd67d8b3e0e56222a2e7b7f7da9031e30ecd1fe251c023340b9f12caca85ab60"}, + {file = "orjson-3.10.16-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6d3444abbfa71ba21bb042caa4b062535b122248259fdb9deea567969140abca"}, + {file = "orjson-3.10.16-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:30245c08d818fdcaa48b7d5b81499b8cae09acabb216fe61ca619876b128e184"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0ba1d0baa71bf7579a4ccdcf503e6f3098ef9542106a0eca82395898c8a500a"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb0beefa5ef3af8845f3a69ff2a4aa62529b5acec1cfe5f8a6b4141033fd46ef"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6daa0e1c9bf2e030e93c98394de94506f2a4d12e1e9dadd7c53d5e44d0f9628e"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9da9019afb21e02410ef600e56666652b73eb3e4d213a0ec919ff391a7dd52aa"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:daeb3a1ee17b69981d3aae30c3b4e786b0f8c9e6c71f2b48f1aef934f63f38f4"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fed80eaf0e20a31942ae5d0728849862446512769692474be5e6b73123a23b"}, + {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73390ed838f03764540a7bdc4071fe0123914c2cc02fb6abf35182d5fd1b7a42"}, + {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a22bba012a0c94ec02a7768953020ab0d3e2b884760f859176343a36c01adf87"}, + {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5385bbfdbc90ff5b2635b7e6bebf259652db00a92b5e3c45b616df75b9058e88"}, + {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:02c6279016346e774dd92625d46c6c40db687b8a0d685aadb91e26e46cc33e1e"}, + {file = "orjson-3.10.16-cp312-cp312-win32.whl", hash = "sha256:7ca55097a11426db80f79378e873a8c51f4dde9ffc22de44850f9696b7eb0e8c"}, + {file = "orjson-3.10.16-cp312-cp312-win_amd64.whl", hash = "sha256:86d127efdd3f9bf5f04809b70faca1e6836556ea3cc46e662b44dab3fe71f3d6"}, + {file = "orjson-3.10.16-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:148a97f7de811ba14bc6dbc4a433e0341ffd2cc285065199fb5f6a98013744bd"}, + {file = "orjson-3.10.16-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:1d960c1bf0e734ea36d0adc880076de3846aaec45ffad29b78c7f1b7962516b8"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a318cd184d1269f68634464b12871386808dc8b7c27de8565234d25975a7a137"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df23f8df3ef9223d1d6748bea63fca55aae7da30a875700809c500a05975522b"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b94dda8dd6d1378f1037d7f3f6b21db769ef911c4567cbaa962bb6dc5021cf90"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f12970a26666a8775346003fd94347d03ccb98ab8aa063036818381acf5f523e"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15a1431a245d856bd56e4d29ea0023eb4d2c8f71efe914beb3dee8ab3f0cd7fb"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c83655cfc247f399a222567d146524674a7b217af7ef8289c0ff53cfe8db09f0"}, + {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fa59ae64cb6ddde8f09bdbf7baf933c4cd05734ad84dcf4e43b887eb24e37652"}, + {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ca5426e5aacc2e9507d341bc169d8af9c3cbe88f4cd4c1cf2f87e8564730eb56"}, + {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6fd5da4edf98a400946cd3a195680de56f1e7575109b9acb9493331047157430"}, + {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:980ecc7a53e567169282a5e0ff078393bac78320d44238da4e246d71a4e0e8f5"}, + {file = "orjson-3.10.16-cp313-cp313-win32.whl", hash = "sha256:28f79944dd006ac540a6465ebd5f8f45dfdf0948ff998eac7a908275b4c1add6"}, + {file = "orjson-3.10.16-cp313-cp313-win_amd64.whl", hash = "sha256:fe0a145e96d51971407cb8ba947e63ead2aa915db59d6631a355f5f2150b56b7"}, + {file = "orjson-3.10.16-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c35b5c1fb5a5d6d2fea825dec5d3d16bea3c06ac744708a8e1ff41d4ba10cdf1"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9aac7ecc86218b4b3048c768f227a9452287001d7548500150bb75ee21bf55d"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6e19f5102fff36f923b6dfdb3236ec710b649da975ed57c29833cb910c5a73ab"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17210490408eb62755a334a6f20ed17c39f27b4f45d89a38cd144cd458eba80b"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbbe04451db85916e52a9f720bd89bf41f803cf63b038595674691680cbebd1b"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a966eba501a3a1f309f5a6af32ed9eb8f316fa19d9947bac3e6350dc63a6f0a"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01e0d22f06c81e6c435723343e1eefc710e0510a35d897856766d475f2a15687"}, + {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7c1e602d028ee285dbd300fb9820b342b937df64d5a3336e1618b354e95a2569"}, + {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d230e5020666a6725629df81e210dc11c3eae7d52fe909a7157b3875238484f3"}, + {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0f8baac07d4555f57d44746a7d80fbe6b2c4fe2ed68136b4abb51cfec512a5e9"}, + {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:524e48420b90fc66953e91b660b3d05faaf921277d6707e328fde1c218b31250"}, + {file = "orjson-3.10.16-cp39-cp39-win32.whl", hash = "sha256:a9f614e31423d7292dbca966a53b2d775c64528c7d91424ab2747d8ab8ce5c72"}, + {file = "orjson-3.10.16-cp39-cp39-win_amd64.whl", hash = "sha256:c338dc2296d1ed0d5c5c27dfb22d00b330555cb706c2e0be1e1c3940a0895905"}, + {file = "orjson-3.10.16.tar.gz", hash = "sha256:d2aaa5c495e11d17b9b93205f5fa196737ee3202f000aaebf028dc9a73750f10"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["dev", "test"] +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "pandas" +version = "2.2.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, + {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, + {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, + {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, + {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "paramiko" +version = "3.5.1" +description = "SSH2 protocol library" +optional = false +python-versions = ">=3.6" +groups = ["test"] +files = [ + {file = "paramiko-3.5.1-py3-none-any.whl", hash = "sha256:43b9a0501fc2b5e70680388d9346cf252cfb7d00b0667c39e80eb43a408b8f61"}, + {file = "paramiko-3.5.1.tar.gz", hash = "sha256:b2c665bc45b2b215bd7d7f039901b14b067da00f3a11e6640995fd58f2664822"}, +] + +[package.dependencies] +bcrypt = ">=3.2" +cryptography = ">=3.3" +pynacl = ">=1.5" + +[package.extras] +all = ["gssapi (>=1.4.1) ; platform_system != \"Windows\"", "invoke (>=2.0)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8) ; platform_system == \"Windows\""] +gssapi = ["gssapi (>=1.4.1) ; platform_system != \"Windows\"", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8) ; platform_system == \"Windows\""] +invoke = ["invoke (>=2.0)"] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "pillow" +version = "11.1.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, + {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, + {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, + {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, + {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, + {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, + {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, + {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, + {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, + {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, + {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, + {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, + {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, + {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, + {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, + {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, + {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, + {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, + {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, + {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, + {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] +typing = ["typing-extensions ; python_version < \"3.10\""] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.3.7" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.9" +groups = ["dev", "test"] +files = [ + {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, + {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "3.8.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, + {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "propcache" +version = "0.3.1" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136"}, + {file = "propcache-0.3.1-cp310-cp310-win32.whl", hash = "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42"}, + {file = "propcache-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9"}, + {file = "propcache-0.3.1-cp311-cp311-win32.whl", hash = "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005"}, + {file = "propcache-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7"}, + {file = "propcache-0.3.1-cp312-cp312-win32.whl", hash = "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b"}, + {file = "propcache-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef"}, + {file = "propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24"}, + {file = "propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a"}, + {file = "propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d"}, + {file = "propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe"}, + {file = "propcache-0.3.1-cp39-cp39-win32.whl", hash = "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64"}, + {file = "propcache-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566"}, + {file = "propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40"}, + {file = "propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf"}, +] + +[[package]] +name = "protobuf" +version = "4.25.6" +description = "" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "protobuf-4.25.6-cp310-abi3-win32.whl", hash = "sha256:61df6b5786e2b49fc0055f636c1e8f0aff263808bb724b95b164685ac1bcc13a"}, + {file = "protobuf-4.25.6-cp310-abi3-win_amd64.whl", hash = "sha256:b8f837bfb77513fe0e2f263250f423217a173b6d85135be4d81e96a4653bcd3c"}, + {file = "protobuf-4.25.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6d4381f2417606d7e01750e2729fe6fbcda3f9883aa0c32b51d23012bded6c91"}, + {file = "protobuf-4.25.6-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:5dd800da412ba7f6f26d2c08868a5023ce624e1fdb28bccca2dc957191e81fb5"}, + {file = "protobuf-4.25.6-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:4434ff8bb5576f9e0c78f47c41cdf3a152c0b44de475784cd3fd170aef16205a"}, + {file = "protobuf-4.25.6-cp38-cp38-win32.whl", hash = "sha256:8bad0f9e8f83c1fbfcc34e573352b17dfce7d0519512df8519994168dc015d7d"}, + {file = "protobuf-4.25.6-cp38-cp38-win_amd64.whl", hash = "sha256:b6905b68cde3b8243a198268bb46fbec42b3455c88b6b02fb2529d2c306d18fc"}, + {file = "protobuf-4.25.6-cp39-cp39-win32.whl", hash = "sha256:3f3b0b39db04b509859361ac9bca65a265fe9342e6b9406eda58029f5b1d10b2"}, + {file = "protobuf-4.25.6-cp39-cp39-win_amd64.whl", hash = "sha256:6ef2045f89d4ad8d95fd43cd84621487832a61d15b49500e4c1350e8a0ef96be"}, + {file = "protobuf-4.25.6-py3-none-any.whl", hash = "sha256:07972021c8e30b870cfc0863409d033af940213e0e7f64e27fe017b929d2c9f7"}, + {file = "protobuf-4.25.6.tar.gz", hash = "sha256:f8cfbae7c5afd0d0eaccbe73267339bff605a2315860bb1ba08eb66670a9a91f"}, +] + +[[package]] +name = "pyasn1" +version = "0.6.1" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, + {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.2" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a"}, + {file = "pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6"}, +] + +[package.dependencies] +pyasn1 = ">=0.6.1,<0.7.0" + +[[package]] +name = "pybrowsers" +version = "0.7.0" +description = "Python library for detecting and launching browsers" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["test"] +files = [ + {file = "pybrowsers-0.7.0-py3-none-any.whl", hash = "sha256:2d3c29b2633cf65ea60463f0d8df5e01f244c760dc4affb155d0a0c4ddfd0afb"}, + {file = "pybrowsers-0.7.0.tar.gz", hash = "sha256:3b604cba6425fb569289dbebe9630f0e32b08dd06acd7c914f6ed85916d8c3cd"}, +] + +[package.dependencies] +pywin32 = {version = ">=303,<309", markers = "sys_platform == \"win32\""} +pyxdg = {version = ">=0.27,<0.29", markers = "sys_platform == \"linux\""} + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] + +[[package]] +name = "pycryptodome" +version = "3.22.0" +description = "Cryptographic library for Python" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["test"] +files = [ + {file = "pycryptodome-3.22.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:96e73527c9185a3d9b4c6d1cfb4494f6ced418573150be170f6580cb975a7f5a"}, + {file = "pycryptodome-3.22.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9e1bb165ea1dc83a11e5dbbe00ef2c378d148f3a2d3834fb5ba4e0f6fd0afe4b"}, + {file = "pycryptodome-3.22.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:d4d1174677855c266eed5c4b4e25daa4225ad0c9ffe7584bb1816767892545d0"}, + {file = "pycryptodome-3.22.0-cp27-cp27m-win32.whl", hash = "sha256:9dbb749cef71c28271484cbef684f9b5b19962153487735411e1020ca3f59cb1"}, + {file = "pycryptodome-3.22.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f1ae7beb64d4fc4903a6a6cca80f1f448e7a8a95b77d106f8a29f2eb44d17547"}, + {file = "pycryptodome-3.22.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:a26bcfee1293b7257c83b0bd13235a4ee58165352be4f8c45db851ba46996dc6"}, + {file = "pycryptodome-3.22.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:009e1c80eea42401a5bd5983c4bab8d516aef22e014a4705622e24e6d9d703c6"}, + {file = "pycryptodome-3.22.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3b76fa80daeff9519d7e9f6d9e40708f2fce36b9295a847f00624a08293f4f00"}, + {file = "pycryptodome-3.22.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a31fa5914b255ab62aac9265654292ce0404f6b66540a065f538466474baedbc"}, + {file = "pycryptodome-3.22.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0092fd476701eeeb04df5cc509d8b739fa381583cda6a46ff0a60639b7cd70d"}, + {file = "pycryptodome-3.22.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d5b0ddc7cf69231736d778bd3ae2b3efb681ae33b64b0c92fb4626bb48bb89"}, + {file = "pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f6cf6aa36fcf463e622d2165a5ad9963b2762bebae2f632d719dfb8544903cf5"}, + {file = "pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:aec7b40a7ea5af7c40f8837adf20a137d5e11a6eb202cde7e588a48fb2d871a8"}, + {file = "pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d21c1eda2f42211f18a25db4eaf8056c94a8563cd39da3683f89fe0d881fb772"}, + {file = "pycryptodome-3.22.0-cp37-abi3-win32.whl", hash = "sha256:f02baa9f5e35934c6e8dcec91fcde96612bdefef6e442813b8ea34e82c84bbfb"}, + {file = "pycryptodome-3.22.0-cp37-abi3-win_amd64.whl", hash = "sha256:d086aed307e96d40c23c42418cbbca22ecc0ab4a8a0e24f87932eeab26c08627"}, + {file = "pycryptodome-3.22.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:98fd9da809d5675f3a65dcd9ed384b9dc67edab6a4cda150c5870a8122ec961d"}, + {file = "pycryptodome-3.22.0-pp27-pypy_73-win32.whl", hash = "sha256:37ddcd18284e6b36b0a71ea495a4c4dca35bb09ccc9bfd5b91bfaf2321f131c1"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4bdce34af16c1dcc7f8c66185684be15f5818afd2a82b75a4ce6b55f9783e13"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2988ffcd5137dc2d27eb51cd18c0f0f68e5b009d5fec56fbccb638f90934f333"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e653519dedcd1532788547f00eeb6108cc7ce9efdf5cc9996abce0d53f95d5a9"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5810bc7494e4ac12a4afef5a32218129e7d3890ce3f2b5ec520cc69eb1102ad"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7514a1aebee8e85802d154fdb261381f1cb9b7c5a54594545145b8ec3056ae6"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:56c6f9342fcb6c74e205fbd2fee568ec4cdbdaa6165c8fde55dbc4ba5f584464"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87a88dc543b62b5c669895caf6c5a958ac7abc8863919e94b7a6cafd2f64064f"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a683bc9fa585c0dfec7fa4801c96a48d30b30b096e3297f9374f40c2fedafc"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f4f6f47a7f411f2c157e77bbbda289e0c9f9e1e9944caa73c1c2e33f3f92d6e"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6cf9553b29624961cab0785a3177a333e09e37ba62ad22314ebdbb01ca79840"}, + {file = "pycryptodome-3.22.0.tar.gz", hash = "sha256:fd7ab568b3ad7b77c908d7c3f7e167ec5a8f035c64ff74f10d47a4edd043d723"}, +] + +[[package]] +name = "pydantic" +version = "2.11.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "pydantic-2.11.2-py3-none-any.whl", hash = "sha256:7f17d25846bcdf89b670a86cdfe7b29a9f1c9ca23dee154221c9aa81845cfca7"}, + {file = "pydantic-2.11.2.tar.gz", hash = "sha256:2138628e050bd7a1e70b91d4bf4a91167f4ad76fdb83209b107c8d84b854917e"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.33.1" +typing-extensions = ">=4.12.2" +typing-inspection = ">=0.4.0" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic-core" +version = "2.33.1" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "pydantic_core-2.33.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3077cfdb6125cc8dab61b155fdd714663e401f0e6883f9632118ec12cf42df26"}, + {file = "pydantic_core-2.33.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ffab8b2908d152e74862d276cf5017c81a2f3719f14e8e3e8d6b83fda863927"}, + {file = "pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5183e4f6a2d468787243ebcd70cf4098c247e60d73fb7d68d5bc1e1beaa0c4db"}, + {file = "pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:398a38d323f37714023be1e0285765f0a27243a8b1506b7b7de87b647b517e48"}, + {file = "pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87d3776f0001b43acebfa86f8c64019c043b55cc5a6a2e313d728b5c95b46969"}, + {file = "pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c566dd9c5f63d22226409553531f89de0cac55397f2ab8d97d6f06cfce6d947e"}, + {file = "pydantic_core-2.33.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0d5f3acc81452c56895e90643a625302bd6be351e7010664151cc55b7b97f89"}, + {file = "pydantic_core-2.33.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d3a07fadec2a13274a8d861d3d37c61e97a816beae717efccaa4b36dfcaadcde"}, + {file = "pydantic_core-2.33.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f99aeda58dce827f76963ee87a0ebe75e648c72ff9ba1174a253f6744f518f65"}, + {file = "pydantic_core-2.33.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:902dbc832141aa0ec374f4310f1e4e7febeebc3256f00dc359a9ac3f264a45dc"}, + {file = "pydantic_core-2.33.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fe44d56aa0b00d66640aa84a3cbe80b7a3ccdc6f0b1ca71090696a6d4777c091"}, + {file = "pydantic_core-2.33.1-cp310-cp310-win32.whl", hash = "sha256:ed3eb16d51257c763539bde21e011092f127a2202692afaeaccb50db55a31383"}, + {file = "pydantic_core-2.33.1-cp310-cp310-win_amd64.whl", hash = "sha256:694ad99a7f6718c1a498dc170ca430687a39894a60327f548e02a9c7ee4b6504"}, + {file = "pydantic_core-2.33.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6e966fc3caaf9f1d96b349b0341c70c8d6573bf1bac7261f7b0ba88f96c56c24"}, + {file = "pydantic_core-2.33.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bfd0adeee563d59c598ceabddf2c92eec77abcb3f4a391b19aa7366170bd9e30"}, + {file = "pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91815221101ad3c6b507804178a7bb5cb7b2ead9ecd600041669c8d805ebd595"}, + {file = "pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9fea9c1869bb4742d174a57b4700c6dadea951df8b06de40c2fedb4f02931c2e"}, + {file = "pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d20eb4861329bb2484c021b9d9a977566ab16d84000a57e28061151c62b349a"}, + {file = "pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb935c5591573ae3201640579f30128ccc10739b45663f93c06796854405505"}, + {file = "pydantic_core-2.33.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c964fd24e6166420d18fb53996d8c9fd6eac9bf5ae3ec3d03015be4414ce497f"}, + {file = "pydantic_core-2.33.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:681d65e9011f7392db5aa002b7423cc442d6a673c635668c227c6c8d0e5a4f77"}, + {file = "pydantic_core-2.33.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e100c52f7355a48413e2999bfb4e139d2977a904495441b374f3d4fb4a170961"}, + {file = "pydantic_core-2.33.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:048831bd363490be79acdd3232f74a0e9951b11b2b4cc058aeb72b22fdc3abe1"}, + {file = "pydantic_core-2.33.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bdc84017d28459c00db6f918a7272a5190bec3090058334e43a76afb279eac7c"}, + {file = "pydantic_core-2.33.1-cp311-cp311-win32.whl", hash = "sha256:32cd11c5914d1179df70406427097c7dcde19fddf1418c787540f4b730289896"}, + {file = "pydantic_core-2.33.1-cp311-cp311-win_amd64.whl", hash = "sha256:2ea62419ba8c397e7da28a9170a16219d310d2cf4970dbc65c32faf20d828c83"}, + {file = "pydantic_core-2.33.1-cp311-cp311-win_arm64.whl", hash = "sha256:fc903512177361e868bc1f5b80ac8c8a6e05fcdd574a5fb5ffeac5a9982b9e89"}, + {file = "pydantic_core-2.33.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1293d7febb995e9d3ec3ea09caf1a26214eec45b0f29f6074abb004723fc1de8"}, + {file = "pydantic_core-2.33.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:99b56acd433386c8f20be5c4000786d1e7ca0523c8eefc995d14d79c7a081498"}, + {file = "pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a5ec3fa8c2fe6c53e1b2ccc2454398f95d5393ab398478f53e1afbbeb4d939"}, + {file = "pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b172f7b9d2f3abc0efd12e3386f7e48b576ef309544ac3a63e5e9cdd2e24585d"}, + {file = "pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9097b9f17f91eea659b9ec58148c0747ec354a42f7389b9d50701610d86f812e"}, + {file = "pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc77ec5b7e2118b152b0d886c7514a4653bcb58c6b1d760134a9fab915f777b3"}, + {file = "pydantic_core-2.33.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3d15245b08fa4a84cefc6c9222e6f37c98111c8679fbd94aa145f9a0ae23d"}, + {file = "pydantic_core-2.33.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef99779001d7ac2e2461d8ab55d3373fe7315caefdbecd8ced75304ae5a6fc6b"}, + {file = "pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fc6bf8869e193855e8d91d91f6bf59699a5cdfaa47a404e278e776dd7f168b39"}, + {file = "pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:b1caa0bc2741b043db7823843e1bde8aaa58a55a58fda06083b0569f8b45693a"}, + {file = "pydantic_core-2.33.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ec259f62538e8bf364903a7d0d0239447059f9434b284f5536e8402b7dd198db"}, + {file = "pydantic_core-2.33.1-cp312-cp312-win32.whl", hash = "sha256:e14f369c98a7c15772b9da98987f58e2b509a93235582838bd0d1d8c08b68fda"}, + {file = "pydantic_core-2.33.1-cp312-cp312-win_amd64.whl", hash = "sha256:1c607801d85e2e123357b3893f82c97a42856192997b95b4d8325deb1cd0c5f4"}, + {file = "pydantic_core-2.33.1-cp312-cp312-win_arm64.whl", hash = "sha256:8d13f0276806ee722e70a1c93da19748594f19ac4299c7e41237fc791d1861ea"}, + {file = "pydantic_core-2.33.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:70af6a21237b53d1fe7b9325b20e65cbf2f0a848cf77bed492b029139701e66a"}, + {file = "pydantic_core-2.33.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:282b3fe1bbbe5ae35224a0dbd05aed9ccabccd241e8e6b60370484234b456266"}, + {file = "pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b315e596282bbb5822d0c7ee9d255595bd7506d1cb20c2911a4da0b970187d3"}, + {file = "pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1dfae24cf9921875ca0ca6a8ecb4bb2f13c855794ed0d468d6abbec6e6dcd44a"}, + {file = "pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dd8ecfde08d8bfadaea669e83c63939af76f4cf5538a72597016edfa3fad516"}, + {file = "pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f593494876eae852dc98c43c6f260f45abdbfeec9e4324e31a481d948214764"}, + {file = "pydantic_core-2.33.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:948b73114f47fd7016088e5186d13faf5e1b2fe83f5e320e371f035557fd264d"}, + {file = "pydantic_core-2.33.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e11f3864eb516af21b01e25fac915a82e9ddad3bb0fb9e95a246067398b435a4"}, + {file = "pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:549150be302428b56fdad0c23c2741dcdb5572413776826c965619a25d9c6bde"}, + {file = "pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:495bc156026efafd9ef2d82372bd38afce78ddd82bf28ef5276c469e57c0c83e"}, + {file = "pydantic_core-2.33.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ec79de2a8680b1a67a07490bddf9636d5c2fab609ba8c57597e855fa5fa4dacd"}, + {file = "pydantic_core-2.33.1-cp313-cp313-win32.whl", hash = "sha256:ee12a7be1742f81b8a65b36c6921022301d466b82d80315d215c4c691724986f"}, + {file = "pydantic_core-2.33.1-cp313-cp313-win_amd64.whl", hash = "sha256:ede9b407e39949d2afc46385ce6bd6e11588660c26f80576c11c958e6647bc40"}, + {file = "pydantic_core-2.33.1-cp313-cp313-win_arm64.whl", hash = "sha256:aa687a23d4b7871a00e03ca96a09cad0f28f443690d300500603bd0adba4b523"}, + {file = "pydantic_core-2.33.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:401d7b76e1000d0dd5538e6381d28febdcacb097c8d340dde7d7fc6e13e9f95d"}, + {file = "pydantic_core-2.33.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aeb055a42d734c0255c9e489ac67e75397d59c6fbe60d155851e9782f276a9c"}, + {file = "pydantic_core-2.33.1-cp313-cp313t-win_amd64.whl", hash = "sha256:338ea9b73e6e109f15ab439e62cb3b78aa752c7fd9536794112e14bee02c8d18"}, + {file = "pydantic_core-2.33.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5ab77f45d33d264de66e1884fca158bc920cb5e27fd0764a72f72f5756ae8bdb"}, + {file = "pydantic_core-2.33.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7aaba1b4b03aaea7bb59e1b5856d734be011d3e6d98f5bcaa98cb30f375f2ad"}, + {file = "pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fb66263e9ba8fea2aa85e1e5578980d127fb37d7f2e292773e7bc3a38fb0c7b"}, + {file = "pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3f2648b9262607a7fb41d782cc263b48032ff7a03a835581abbf7a3bec62bcf5"}, + {file = "pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:723c5630c4259400818b4ad096735a829074601805d07f8cafc366d95786d331"}, + {file = "pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d100e3ae783d2167782391e0c1c7a20a31f55f8015f3293647544df3f9c67824"}, + {file = "pydantic_core-2.33.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177d50460bc976a0369920b6c744d927b0ecb8606fb56858ff542560251b19e5"}, + {file = "pydantic_core-2.33.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3edde68d1a1f9af1273b2fe798997b33f90308fb6d44d8550c89fc6a3647cf6"}, + {file = "pydantic_core-2.33.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a62c3c3ef6a7e2c45f7853b10b5bc4ddefd6ee3cd31024754a1a5842da7d598d"}, + {file = "pydantic_core-2.33.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:c91dbb0ab683fa0cd64a6e81907c8ff41d6497c346890e26b23de7ee55353f96"}, + {file = "pydantic_core-2.33.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f466e8bf0a62dc43e068c12166281c2eca72121dd2adc1040f3aa1e21ef8599"}, + {file = "pydantic_core-2.33.1-cp39-cp39-win32.whl", hash = "sha256:ab0277cedb698749caada82e5d099dc9fed3f906a30d4c382d1a21725777a1e5"}, + {file = "pydantic_core-2.33.1-cp39-cp39-win_amd64.whl", hash = "sha256:5773da0ee2d17136b1f1c6fbde543398d452a6ad2a7b54ea1033e2daa739b8d2"}, + {file = "pydantic_core-2.33.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c834f54f8f4640fd7e4b193f80eb25a0602bba9e19b3cd2fc7ffe8199f5ae02"}, + {file = "pydantic_core-2.33.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:049e0de24cf23766f12cc5cc71d8abc07d4a9deb9061b334b62093dedc7cb068"}, + {file = "pydantic_core-2.33.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a28239037b3d6f16916a4c831a5a0eadf856bdd6d2e92c10a0da3a59eadcf3e"}, + {file = "pydantic_core-2.33.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d3da303ab5f378a268fa7d45f37d7d85c3ec19769f28d2cc0c61826a8de21fe"}, + {file = "pydantic_core-2.33.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25626fb37b3c543818c14821afe0fd3830bc327a43953bc88db924b68c5723f1"}, + {file = "pydantic_core-2.33.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3ab2d36e20fbfcce8f02d73c33a8a7362980cff717926bbae030b93ae46b56c7"}, + {file = "pydantic_core-2.33.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:2f9284e11c751b003fd4215ad92d325d92c9cb19ee6729ebd87e3250072cdcde"}, + {file = "pydantic_core-2.33.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:048c01eee07d37cbd066fc512b9d8b5ea88ceeb4e629ab94b3e56965ad655add"}, + {file = "pydantic_core-2.33.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5ccd429694cf26af7997595d627dd2637e7932214486f55b8a357edaac9dae8c"}, + {file = "pydantic_core-2.33.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3a371dc00282c4b84246509a5ddc808e61b9864aa1eae9ecc92bb1268b82db4a"}, + {file = "pydantic_core-2.33.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f59295ecc75a1788af8ba92f2e8c6eeaa5a94c22fc4d151e8d9638814f85c8fc"}, + {file = "pydantic_core-2.33.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08530b8ac922003033f399128505f513e30ca770527cc8bbacf75a84fcc2c74b"}, + {file = "pydantic_core-2.33.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae370459da6a5466978c0eacf90690cb57ec9d533f8e63e564ef3822bfa04fe"}, + {file = "pydantic_core-2.33.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e3de2777e3b9f4d603112f78006f4ae0acb936e95f06da6cb1a45fbad6bdb4b5"}, + {file = "pydantic_core-2.33.1-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3a64e81e8cba118e108d7126362ea30e021291b7805d47e4896e52c791be2761"}, + {file = "pydantic_core-2.33.1-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:52928d8c1b6bda03cc6d811e8923dffc87a2d3c8b3bfd2ce16471c7147a24850"}, + {file = "pydantic_core-2.33.1-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1b30d92c9412beb5ac6b10a3eb7ef92ccb14e3f2a8d7732e2d739f58b3aa7544"}, + {file = "pydantic_core-2.33.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f995719707e0e29f0f41a8aa3bcea6e761a36c9136104d3189eafb83f5cec5e5"}, + {file = "pydantic_core-2.33.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7edbc454a29fc6aeae1e1eecba4f07b63b8d76e76a748532233c4c167b4cb9ea"}, + {file = "pydantic_core-2.33.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad05b683963f69a1d5d2c2bdab1274a31221ca737dbbceaa32bcb67359453cdd"}, + {file = "pydantic_core-2.33.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df6a94bf9452c6da9b5d76ed229a5683d0306ccb91cca8e1eea883189780d568"}, + {file = "pydantic_core-2.33.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7965c13b3967909a09ecc91f21d09cfc4576bf78140b988904e94f130f188396"}, + {file = "pydantic_core-2.33.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3f1fdb790440a34f6ecf7679e1863b825cb5ffde858a9197f851168ed08371e5"}, + {file = "pydantic_core-2.33.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5277aec8d879f8d05168fdd17ae811dd313b8ff894aeeaf7cd34ad28b4d77e33"}, + {file = "pydantic_core-2.33.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8ab581d3530611897d863d1a649fb0644b860286b4718db919bfd51ece41f10b"}, + {file = "pydantic_core-2.33.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0483847fa9ad5e3412265c1bd72aad35235512d9ce9d27d81a56d935ef489672"}, + {file = "pydantic_core-2.33.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:de9e06abe3cc5ec6a2d5f75bc99b0bdca4f5c719a5b34026f8c57efbdecd2ee3"}, + {file = "pydantic_core-2.33.1.tar.gz", hash = "sha256:bcc9c6fdb0ced789245b02b7d6603e17d1563064ddcfc36f046b61c0c05dd9df"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pydub" +version = "0.25.1" +description = "Manipulate audio with an simple and easy high level interface" +optional = false +python-versions = "*" +groups = ["test"] +files = [ + {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, + {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, +] + +[[package]] +name = "pyee" +version = "11.1.1" +description = "A rough port of Node.js's EventEmitter to Python with a few tricks of its own" +optional = false +python-versions = ">=3.8" +groups = ["pyppeteer"] +files = [ + {file = "pyee-11.1.1-py3-none-any.whl", hash = "sha256:9e4cdd7c2f9fcf247db94bad39a260aceffefdbe52286ce71be01959de34a5c2"}, + {file = "pyee-11.1.1.tar.gz", hash = "sha256:82e1eb1853f8497c4ff1a0c7fa26b9cd2f1253e2b6ffb93b4700fda907017302"}, +] + +[package.dependencies] +typing-extensions = "*" + +[package.extras] +dev = ["black", "build", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio ; python_version >= \"3.4\"", "pytest-trio ; python_version >= \"3.7\"", "sphinx", "toml", "tox", "trio", "trio ; python_version > \"3.6\"", "trio-typing ; python_version > \"3.6\"", "twine", "twisted", "validate-pyproject[all]"] + +[[package]] +name = "pylint" +version = "3.0.3" +description = "python code static checker" +optional = false +python-versions = ">=3.8.0" +groups = ["dev", "test"] +files = [ + {file = "pylint-3.0.3-py3-none-any.whl", hash = "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810"}, + {file = "pylint-3.0.3.tar.gz", hash = "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b"}, +] + +[package.dependencies] +astroid = ">=3.0.1,<=3.1.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +optional = false +python-versions = ">=3.6" +groups = ["test"] +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + +[[package]] +name = "pyparsing" +version = "3.2.3" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"}, + {file = "pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyppeteer" +version = "2.0.0" +description = "Headless chrome/chromium automation library (unofficial port of puppeteer)" +optional = false +python-versions = ">=3.8,<4.0" +groups = ["pyppeteer"] +files = [ + {file = "pyppeteer-2.0.0-py3-none-any.whl", hash = "sha256:96f4c574fb36f1d15e02746303ab742b98941f0da58337187e7c1d2ef982adea"}, + {file = "pyppeteer-2.0.0.tar.gz", hash = "sha256:4af63473ff36a746a53347b2336a49efda669bcd781e400bc1799b81838358d9"}, +] + +[package.dependencies] +appdirs = ">=1.4.3,<2.0.0" +certifi = ">=2023" +importlib-metadata = ">=1.4" +pyee = ">=11.0.0,<12.0.0" +tqdm = ">=4.42.1,<5.0.0" +urllib3 = ">=1.25.8,<2.0.0" +websockets = ">=10.0,<11.0" + +[[package]] +name = "pytest" +version = "8.3.5" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, + {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.26.0" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "pytest_asyncio-0.26.0-py3-none-any.whl", hash = "sha256:7b51ed894f4fbea1340262bdae5135797ebbe21d8638978e35d31c6d19f72fb0"}, + {file = "pytest_asyncio-0.26.0.tar.gz", hash = "sha256:c4df2a697648241ff39e7f0e4a73050b03f123f760673956cf0d72a4990e312f"}, +] + +[package.dependencies] +pytest = ">=8.2,<9" +typing-extensions = {version = ">=4.12", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + +[[package]] +name = "pytest-cov" +version = "6.1.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "pytest_cov-6.1.0-py3-none-any.whl", hash = "sha256:cd7e1d54981d5185ef2b8d64b50172ce97e6f357e6df5cb103e828c7f993e201"}, + {file = "pytest_cov-6.1.0.tar.gz", hash = "sha256:ec55e828c66755e5b74a21bd7cc03c303a9f928389c0563e50ba454a6dbe71db"}, +] + +[package.dependencies] +coverage = {version = ">=7.5", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[package]] +name = "pytest-html" +version = "4.1.1" +description = "pytest plugin for generating HTML reports" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest_html-4.1.1-py3-none-any.whl", hash = "sha256:c8152cea03bd4e9bee6d525573b67bbc6622967b72b9628dda0ea3e2a0b5dd71"}, + {file = "pytest_html-4.1.1.tar.gz", hash = "sha256:70a01e8ae5800f4a074b56a4cb1025c8f4f9b038bba5fe31e3c98eb996686f07"}, +] + +[package.dependencies] +jinja2 = ">=3.0.0" +pytest = ">=7.0.0" +pytest-metadata = ">=2.0.0" + +[package.extras] +docs = ["pip-tools (>=6.13.0)"] +test = ["assertpy (>=1.1)", "beautifulsoup4 (>=4.11.1)", "black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "pytest-mock (>=3.7.0)", "pytest-rerunfailures (>=11.1.2)", "pytest-xdist (>=2.4.0)", "selenium (>=4.3.0)", "tox (>=3.24.5)"] + +[[package]] +name = "pytest-metadata" +version = "3.1.1" +description = "pytest plugin for test session metadata" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest_metadata-3.1.1-py3-none-any.whl", hash = "sha256:c8e0844db684ee1c798cfa38908d20d67d0463ecb6137c72e91f418558dd5f4b"}, + {file = "pytest_metadata-3.1.1.tar.gz", hash = "sha256:d2a29b0355fbc03f168aa96d41ff88b1a3b44a3b02acbe491801c98a048017c8"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] + +[[package]] +name = "pytest-mock" +version = "3.14.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, + {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, +] + +[package.dependencies] +pytest = ">=6.2.5" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pytest-timeout" +version = "2.3.1" +description = "pytest plugin to abort hanging tests" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "pytest-timeout-2.3.1.tar.gz", hash = "sha256:12397729125c6ecbdaca01035b9e5239d4db97352320af155b3f5de1ba5165d9"}, + {file = "pytest_timeout-2.3.1-py3-none-any.whl", hash = "sha256:68188cb703edfc6a18fad98dc25a3c61e9f24d644b0b70f33af545219fc7813e"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[[package]] +name = "pytest-xdist" +version = "3.6.1" +description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, + {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, +] + +[package.dependencies] +execnet = ">=2.1" +pytest = ">=7.0.0" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["test"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.1.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d"}, + {file = "python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.20" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"}, + {file = "python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13"}, +] + +[[package]] +name = "pytz" +version = "2025.2" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +groups = ["test"] +files = [ + {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, + {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, +] + +[[package]] +name = "pywin32" +version = "308" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +groups = ["test"] +markers = "sys_platform == \"win32\"" +files = [ + {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, + {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, + {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, + {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, + {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, + {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, + {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, + {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, + {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, + {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, + {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, + {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, + {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, + {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, + {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, + {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, + {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, + {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, +] + +[[package]] +name = "pyxdg" +version = "0.28" +description = "PyXDG contains implementations of freedesktop.org standards in python." +optional = false +python-versions = "*" +groups = ["test"] +markers = "sys_platform == \"linux\"" +files = [ + {file = "pyxdg-0.28-py2.py3-none-any.whl", hash = "sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab"}, + {file = "pyxdg-0.28.tar.gz", hash = "sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +groups = ["main", "dev", "test"] +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "rank-bm25" +version = "0.2.2" +description = "Various BM25 algorithms for document ranking" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "rank_bm25-0.2.2-py3-none-any.whl", hash = "sha256:7bd4a95571adadfc271746fa146a4bcfd89c0cf731e49c3d1ad863290adbe8ae"}, + {file = "rank_bm25-0.2.2.tar.gz", hash = "sha256:096ccef76f8188563419aaf384a02f0ea459503fdf77901378d4fd9d87e5e51d"}, +] + +[package.dependencies] +numpy = "*" + +[package.extras] +dev = ["pytest"] + +[[package]] +name = "referencing" +version = "0.36.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, + {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" +typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} + +[[package]] +name = "regex" +version = "2024.11.6" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, + {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, + {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, + {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, + {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, + {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, + {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, + {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, + {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, + {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, + {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, + {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, + {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, + {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rpds-py" +version = "0.24.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "rpds_py-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724"}, + {file = "rpds_py-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0"}, + {file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f"}, + {file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f"}, + {file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875"}, + {file = "rpds_py-0.24.0-cp310-cp310-win32.whl", hash = "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07"}, + {file = "rpds_py-0.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052"}, + {file = "rpds_py-0.24.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef"}, + {file = "rpds_py-0.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc"}, + {file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c"}, + {file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c"}, + {file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718"}, + {file = "rpds_py-0.24.0-cp311-cp311-win32.whl", hash = "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a"}, + {file = "rpds_py-0.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6"}, + {file = "rpds_py-0.24.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205"}, + {file = "rpds_py-0.24.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9"}, + {file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7"}, + {file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91"}, + {file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56"}, + {file = "rpds_py-0.24.0-cp312-cp312-win32.whl", hash = "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30"}, + {file = "rpds_py-0.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034"}, + {file = "rpds_py-0.24.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c"}, + {file = "rpds_py-0.24.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7"}, + {file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad"}, + {file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120"}, + {file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9"}, + {file = "rpds_py-0.24.0-cp313-cp313-win32.whl", hash = "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143"}, + {file = "rpds_py-0.24.0-cp313-cp313-win_amd64.whl", hash = "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a"}, + {file = "rpds_py-0.24.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114"}, + {file = "rpds_py-0.24.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7"}, + {file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d"}, + {file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797"}, + {file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c"}, + {file = "rpds_py-0.24.0-cp313-cp313t-win32.whl", hash = "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba"}, + {file = "rpds_py-0.24.0-cp313-cp313t-win_amd64.whl", hash = "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350"}, + {file = "rpds_py-0.24.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a36b452abbf29f68527cf52e181fced56685731c86b52e852053e38d8b60bc8d"}, + {file = "rpds_py-0.24.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b3b397eefecec8e8e39fa65c630ef70a24b09141a6f9fc17b3c3a50bed6b50e"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdabcd3beb2a6dca7027007473d8ef1c3b053347c76f685f5f060a00327b8b65"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5db385bacd0c43f24be92b60c857cf760b7f10d8234f4bd4be67b5b20a7c0b6b"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8097b3422d020ff1c44effc40ae58e67d93e60d540a65649d2cdaf9466030791"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493fe54318bed7d124ce272fc36adbf59d46729659b2c792e87c3b95649cdee9"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8aa362811ccdc1f8dadcc916c6d47e554169ab79559319ae9fae7d7752d0d60c"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d8f9a6e7fd5434817526815f09ea27f2746c4a51ee11bb3439065f5fc754db58"}, + {file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8205ee14463248d3349131bb8099efe15cd3ce83b8ef3ace63c7e976998e7124"}, + {file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:921ae54f9ecba3b6325df425cf72c074cd469dea843fb5743a26ca7fb2ccb149"}, + {file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32bab0a56eac685828e00cc2f5d1200c548f8bc11f2e44abf311d6b548ce2e45"}, + {file = "rpds_py-0.24.0-cp39-cp39-win32.whl", hash = "sha256:f5c0ed12926dec1dfe7d645333ea59cf93f4d07750986a586f511c0bc61fe103"}, + {file = "rpds_py-0.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:afc6e35f344490faa8276b5f2f7cbf71f88bc2cda4328e00553bd451728c571f"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e0f3ef95795efcd3b2ec3fe0a5bcfb5dadf5e3996ea2117427e524d4fbf309c6"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2c13777ecdbbba2077670285dd1fe50828c8742f6a4119dbef6f83ea13ad10fb"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79e8d804c2ccd618417e96720ad5cd076a86fa3f8cb310ea386a3e6229bae7d1"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd822f019ccccd75c832deb7aa040bb02d70a92eb15a2f16c7987b7ad4ee8d83"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0047638c3aa0dbcd0ab99ed1e549bbf0e142c9ecc173b6492868432d8989a046"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5b66d1b201cc71bc3081bc2f1fc36b0c1f268b773e03bbc39066651b9e18391"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbcbb6db5582ea33ce46a5d20a5793134b5365110d84df4e30b9d37c6fd40ad3"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63981feca3f110ed132fd217bf7768ee8ed738a55549883628ee3da75bb9cb78"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3a55fc10fdcbf1a4bd3c018eea422c52cf08700cf99c28b5cb10fe97ab77a0d3"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:c30ff468163a48535ee7e9bf21bd14c7a81147c0e58a36c1078289a8ca7af0bd"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:369d9c6d4c714e36d4a03957b4783217a3ccd1e222cdd67d464a3a479fc17796"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:24795c099453e3721fda5d8ddd45f5dfcc8e5a547ce7b8e9da06fecc3832e26f"}, + {file = "rpds_py-0.24.0.tar.gz", hash = "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e"}, +] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +groups = ["test"] +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "s3transfer" +version = "0.10.4" +description = "An Amazon S3 Transfer Manager" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, + {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, +] + +[package.dependencies] +botocore = ">=1.33.2,<2.0a.0" + +[package.extras] +crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] + +[[package]] +name = "setuptools" +version = "65.6.3" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54"}, + {file = "setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov ; platform_python_implementation != \"PyPy\"", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["test"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "starlette" +version = "0.46.1" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "starlette-0.46.1-py3-none-any.whl", hash = "sha256:77c74ed9d2720138b25875133f3a2dae6d854af2ec37dceb56aef370c1d8a227"}, + {file = "starlette-0.46.1.tar.gz", hash = "sha256:3c88d58ee4bd1bb807c0d1acb381838afc7752f9ddaec81bbe4383611d833230"}, +] + +[package.dependencies] +anyio = ">=3.6.2,<5" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] + +[[package]] +name = "tenacity" +version = "8.2.3" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, + {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, +] + +[package.extras] +doc = ["reno", "sphinx", "tornado (>=4.5)"] + +[[package]] +name = "tiktoken" +version = "0.7.0" +description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "tiktoken-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485f3cc6aba7c6b6ce388ba634fbba656d9ee27f766216f45146beb4ac18b25f"}, + {file = "tiktoken-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e54be9a2cd2f6d6ffa3517b064983fb695c9a9d8aa7d574d1ef3c3f931a99225"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79383a6e2c654c6040e5f8506f3750db9ddd71b550c724e673203b4f6b4b4590"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4511c52caacf3c4981d1ae2df85908bd31853f33d30b345c8b6830763f769c"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13c94efacdd3de9aff824a788353aa5749c0faee1fbe3816df365ea450b82311"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8e58c7eb29d2ab35a7a8929cbeea60216a4ccdf42efa8974d8e176d50c9a3df5"}, + {file = "tiktoken-0.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:21a20c3bd1dd3e55b91c1331bf25f4af522c525e771691adbc9a69336fa7f702"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10c7674f81e6e350fcbed7c09a65bca9356eaab27fb2dac65a1e440f2bcfe30f"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:084cec29713bc9d4189a937f8a35dbdfa785bd1235a34c1124fe2323821ee93f"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811229fde1652fedcca7c6dfe76724d0908775b353556d8a71ed74d866f73f7b"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b6e7dc2e7ad1b3757e8a24597415bafcfb454cebf9a33a01f2e6ba2e663992"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1063c5748be36344c7e18c7913c53e2cca116764c2080177e57d62c7ad4576d1"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20295d21419bfcca092644f7e2f2138ff947a6eb8cfc732c09cc7d76988d4a89"}, + {file = "tiktoken-0.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:959d993749b083acc57a317cbc643fb85c014d055b2119b739487288f4e5d1cb"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:71c55d066388c55a9c00f61d2c456a6086673ab7dec22dd739c23f77195b1908"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09ed925bccaa8043e34c519fbb2f99110bd07c6fd67714793c21ac298e449410"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03c6c40ff1db0f48a7b4d2dafeae73a5607aacb472fa11f125e7baf9dce73704"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20b5c6af30e621b4aca094ee61777a44118f52d886dbe4f02b70dfe05c15350"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d427614c3e074004efa2f2411e16c826f9df427d3c70a54725cae860f09e4bf4"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c46d7af7b8c6987fac9b9f61041b452afe92eb087d29c9ce54951280f899a97"}, + {file = "tiktoken-0.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bc603c30b9e371e7c4c7935aba02af5994a909fc3c0fe66e7004070858d3f8f"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2398fecd38c921bcd68418675a6d155fad5f5e14c2e92fcf5fe566fa5485a858"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f5f6afb52fb8a7ea1c811e435e4188f2bef81b5e0f7a8635cc79b0eef0193d6"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:861f9ee616766d736be4147abac500732b505bf7013cfaf019b85892637f235e"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54031f95c6939f6b78122c0aa03a93273a96365103793a22e1793ee86da31685"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fffdcb319b614cf14f04d02a52e26b1d1ae14a570f90e9b55461a72672f7b13d"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c72baaeaefa03ff9ba9688624143c858d1f6b755bb85d456d59e529e17234769"}, + {file = "tiktoken-0.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:131b8aeb043a8f112aad9f46011dced25d62629091e51d9dc1adbf4a1cc6aa98"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cabc6dc77460df44ec5b879e68692c63551ae4fae7460dd4ff17181df75f1db7"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8d57f29171255f74c0aeacd0651e29aa47dff6f070cb9f35ebc14c82278f3b25"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ee92776fdbb3efa02a83f968c19d4997a55c8e9ce7be821ceee04a1d1ee149c"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e215292e99cb41fbc96988ef62ea63bb0ce1e15f2c147a61acc319f8b4cbe5bf"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a81bac94769cab437dd3ab0b8a4bc4e0f9cf6835bcaa88de71f39af1791727a"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d6d73ea93e91d5ca771256dfc9d1d29f5a554b83821a1dc0891987636e0ae226"}, + {file = "tiktoken-0.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:2bcb28ddf79ffa424f171dfeef9a4daff61a94c631ca6813f43967cb263b83b9"}, + {file = "tiktoken-0.7.0.tar.gz", hash = "sha256:1077266e949c24e0291f6c350433c6f0971365ece2b173a23bc3b9f9defef6b6"}, +] + +[package.dependencies] +regex = ">=2022.1.18" +requests = ">=2.26.0" + +[package.extras] +blobfile = ["blobfile (>=2)"] + +[[package]] +name = "tomli" +version = "2.2.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +groups = ["dev", "test"] +markers = "python_version < \"3.11\"" +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] + +[[package]] +name = "tomlkit" +version = "0.13.2" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.8" +groups = ["dev", "test"] +files = [ + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +groups = ["pyppeteer"] +files = [ + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "tree-sitter" +version = "0.23.2" +description = "Python bindings to the Tree-sitter parsing library" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "tree-sitter-0.23.2.tar.gz", hash = "sha256:66bae8dd47f1fed7bdef816115146d3a41c39b5c482d7bad36d9ba1def088450"}, + {file = "tree_sitter-0.23.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3a937f5d8727bc1c74c4bf2a9d1c25ace049e8628273016ad0d45914ae904e10"}, + {file = "tree_sitter-0.23.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2c7eae7fe2af215645a38660d2d57d257a4c461fe3ec827cca99a79478284e80"}, + {file = "tree_sitter-0.23.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a71d607595270b6870eaf778a1032d146b2aa79bfcfa60f57a82a7b7584a4c7"}, + {file = "tree_sitter-0.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fe9b9ea7a0aa23b52fd97354da95d1b2580065bc12a4ac868f9164a127211d6"}, + {file = "tree_sitter-0.23.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d74d00a8021719eae14d10d1b1e28649e15d8b958c01c2b2c3dad7a2ebc4dbae"}, + {file = "tree_sitter-0.23.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6de18d8d8a7f67ab71f472d1fcb01cc506e080cbb5e13d52929e4b6fdce6bbee"}, + {file = "tree_sitter-0.23.2-cp310-cp310-win_amd64.whl", hash = "sha256:12b60dca70d2282af942b650a6d781be487485454668c7c956338a367b98cdee"}, + {file = "tree_sitter-0.23.2-cp310-cp310-win_arm64.whl", hash = "sha256:3346a4dd0447a42aabb863443b0fd8c92b909baf40ed2344fae4b94b625d5955"}, + {file = "tree_sitter-0.23.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91fda41d4f8824335cc43c64e2c37d8089c8c563bd3900a512d2852d075af719"}, + {file = "tree_sitter-0.23.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:92b2b489d5ce54b41f94c6f23fbaf592bd6e84dc2877048fd1cb060480fa53f7"}, + {file = "tree_sitter-0.23.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64859bd4aa1567d0d6016a811b2b49c59d4a4427d096e3d8c84b2521455f62b7"}, + {file = "tree_sitter-0.23.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:614590611636044e071d3a0b748046d52676dbda3bc9fa431216231e11dd98f7"}, + {file = "tree_sitter-0.23.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08466953c78ae57be61057188fb88c89791b0a562856010228e0ccf60e2ac453"}, + {file = "tree_sitter-0.23.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8a33f03a562de91f7fd05eefcedd8994a06cd44c62f7aabace811ad82bc11cbd"}, + {file = "tree_sitter-0.23.2-cp311-cp311-win_amd64.whl", hash = "sha256:03b70296b569ef64f7b92b42ca5da9bf86d81bee2afd480bea35092687f51dae"}, + {file = "tree_sitter-0.23.2-cp311-cp311-win_arm64.whl", hash = "sha256:7cb4bb953ea7c0b50eeafc4454783e030357179d2a93c3dd5ebed2da5588ddd0"}, + {file = "tree_sitter-0.23.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a014498b6a9e6003fae8c6eb72f5927d62da9dcb72b28b3ce8cd15c6ff6a6572"}, + {file = "tree_sitter-0.23.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:04f8699b131d4bcbe3805c37e4ef3d159ee9a82a0e700587625623999ba0ea53"}, + {file = "tree_sitter-0.23.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4471577df285059c71686ecb208bc50fb472099b38dcc8e849b0e86652891e87"}, + {file = "tree_sitter-0.23.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f342c925290dd4e20ecd5787ef7ae8749981597ab364783a1eb73173efe65226"}, + {file = "tree_sitter-0.23.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a4e9e53d07dd076bede72e4f7d3a0173d7b9ad6576572dd86da008a740a9bb22"}, + {file = "tree_sitter-0.23.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8caebe65bc358759dac2500d8f8feed3aed939c4ade9a684a1783fe07bc7d5db"}, + {file = "tree_sitter-0.23.2-cp312-cp312-win_amd64.whl", hash = "sha256:fc5a72eb50d43485000dbbb309acb350467b7467e66dc747c6bb82ce63041582"}, + {file = "tree_sitter-0.23.2-cp312-cp312-win_arm64.whl", hash = "sha256:a0320eb6c7993359c5f7b371d22719ccd273f440d41cf1bd65dac5e9587f2046"}, + {file = "tree_sitter-0.23.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:eff630dddee7ba05accb439b17e559e15ce13f057297007c246237ceb6306332"}, + {file = "tree_sitter-0.23.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4780ba8f3894f2dea869fad2995c2aceab3fd5ab9e6a27c45475d2acd7f7e84e"}, + {file = "tree_sitter-0.23.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b609460b8e3e256361fb12e94fae5b728cb835b16f0f9d590b5aadbf9d109b"}, + {file = "tree_sitter-0.23.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d070d8eaeaeb36cf535f55e5578fddbfc3bf53c1980f58bf1a99d57466b3b5"}, + {file = "tree_sitter-0.23.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:878580b2ad5054c410ba3418edca4d34c81cc26706114d8f5b5541688bc2d785"}, + {file = "tree_sitter-0.23.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:29224bdc2a3b9af535b7725e249d3ee291b2e90708e82832e73acc175e40dc48"}, + {file = "tree_sitter-0.23.2-cp313-cp313-win_amd64.whl", hash = "sha256:c58d89348162fbc3aea1fe6511a66ee189fc0e4e4bbe937026f29e4ecef17763"}, + {file = "tree_sitter-0.23.2-cp313-cp313-win_arm64.whl", hash = "sha256:0ff2037be5edab7801de3f6a721b9cf010853f612e2008ee454e0e0badb225a6"}, + {file = "tree_sitter-0.23.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a5db8e585205faef8bf219da77d8993e2ef04d08eda2e3c8ad7e4df8297ee344"}, + {file = "tree_sitter-0.23.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9dbd110a30cf28be5da734ae4cd0e9031768228dbf6a79f2973962aa51de4ec7"}, + {file = "tree_sitter-0.23.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569514b9a996a0fd458b3a891c46ca125298be0c03cf82f2b6f0c13d5d8f25dc"}, + {file = "tree_sitter-0.23.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a357ed98a74e47787b812df99a74a2c35c0fe11e55c2095cc01d1cad144ef552"}, + {file = "tree_sitter-0.23.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c2dfb8e8f760f4cc67888d03ef9e2dbd3353245f67f5efba375c2a14d944ac0e"}, + {file = "tree_sitter-0.23.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3ead958df87a21d706903987e665e9e0e5df7b2c5021ff69ea349826840adc6a"}, + {file = "tree_sitter-0.23.2-cp39-cp39-win_amd64.whl", hash = "sha256:611cae16be332213c0e6ece72c0bfca202e30ff320a8b309b1526c6cb79ee4ba"}, + {file = "tree_sitter-0.23.2-cp39-cp39-win_arm64.whl", hash = "sha256:b848e0fdd522fbb8888cdb4f4d93f8fad97ae10d70c122fb922e51363c7febcd"}, +] + +[package.extras] +docs = ["sphinx (>=7.3,<8.0)", "sphinx-book-theme"] +tests = ["tree-sitter-html (>=0.23.0)", "tree-sitter-javascript (>=0.23.0)", "tree-sitter-json (>=0.23.0)", "tree-sitter-python (>=0.23.0)", "tree-sitter-rust (>=0.23.0)"] + +[[package]] +name = "tree-sitter-python" +version = "0.23.6" +description = "Python grammar for tree-sitter" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "tree_sitter_python-0.23.6-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:28fbec8f74eeb2b30292d97715e60fac9ccf8a8091ce19b9d93e9b580ed280fb"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:680b710051b144fedf61c95197db0094f2245e82551bf7f0c501356333571f7a"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a9dcef55507b6567207e8ee0a6b053d0688019b47ff7f26edc1764b7f4dc0a4"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29dacdc0cd2f64e55e61d96c6906533ebb2791972bec988450c46cce60092f5d"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7e048733c36f564b379831689006801feb267d8194f9e793fbb395ef1723335d"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-win_amd64.whl", hash = "sha256:a24027248399fb41594b696f929f9956828ae7cc85596d9f775e6c239cd0c2be"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-win_arm64.whl", hash = "sha256:71334371bd73d5fe080aed39fbff49ed8efb9506edebe16795b0c7567ed6a272"}, + {file = "tree_sitter_python-0.23.6.tar.gz", hash = "sha256:354bfa0a2f9217431764a631516f85173e9711af2c13dbd796a8815acfe505d9"}, +] + +[package.extras] +core = ["tree-sitter (>=0.22,<1.0)"] + +[[package]] +name = "typing-extensions" +version = "4.13.1" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev", "pyppeteer", "test"] +files = [ + {file = "typing_extensions-4.13.1-py3-none-any.whl", hash = "sha256:4b6cf02909eb5495cfbc3f6e8fd49217e6cc7944e145cdda8caa3734777f9e69"}, + {file = "typing_extensions-4.13.1.tar.gz", hash = "sha256:98795af00fb9640edec5b8e31fc647597b4691f099ad75f469a2616be1a76dff"}, +] +markers = {dev = "python_version < \"3.11\""} + +[[package]] +name = "typing-inspection" +version = "0.4.0" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"}, + {file = "typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.0" + +[[package]] +name = "tzdata" +version = "2025.2" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +groups = ["test"] +files = [ + {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, + {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, +] + +[[package]] +name = "uc-micro-py" +version = "1.0.3" +description = "Micro subset of unicode data files for linkify-it-py projects." +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a"}, + {file = "uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5"}, +] + +[package.extras] +test = ["coverage", "pytest", "pytest-cov"] + +[[package]] +name = "urllib3" +version = "1.26.20" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main", "pyppeteer", "test"] +files = [ + {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, + {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, +] + +[package.extras] +brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "uvicorn" +version = "0.34.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4"}, + {file = "uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.6.3", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "uvloop" +version = "0.21.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +groups = ["test"] +markers = "platform_python_implementation != \"PyPy\" and sys_platform != \"win32\" and sys_platform != \"cygwin\"" +files = [ + {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, + {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, + {file = "uvloop-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26"}, + {file = "uvloop-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb"}, + {file = "uvloop-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f"}, + {file = "uvloop-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c"}, + {file = "uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8"}, + {file = "uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0"}, + {file = "uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e"}, + {file = "uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb"}, + {file = "uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6"}, + {file = "uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d"}, + {file = "uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c"}, + {file = "uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2"}, + {file = "uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d"}, + {file = "uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc"}, + {file = "uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb"}, + {file = "uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f"}, + {file = "uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281"}, + {file = "uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af"}, + {file = "uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6"}, + {file = "uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816"}, + {file = "uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc"}, + {file = "uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553"}, + {file = "uvloop-0.21.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414"}, + {file = "uvloop-0.21.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206"}, + {file = "uvloop-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe"}, + {file = "uvloop-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79"}, + {file = "uvloop-0.21.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a"}, + {file = "uvloop-0.21.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc"}, + {file = "uvloop-0.21.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b"}, + {file = "uvloop-0.21.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2"}, + {file = "uvloop-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0"}, + {file = "uvloop-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75"}, + {file = "uvloop-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd"}, + {file = "uvloop-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff"}, + {file = "uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3"}, +] + +[package.extras] +dev = ["Cython (>=3.0,<4.0)", "setuptools (>=60)"] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["aiohttp (>=3.10.5)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + +[[package]] +name = "virtualenv" +version = "20.30.0" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "virtualenv-20.30.0-py3-none-any.whl", hash = "sha256:e34302959180fca3af42d1800df014b35019490b119eba981af27f2fa486e5d6"}, + {file = "virtualenv-20.30.0.tar.gz", hash = "sha256:800863162bcaa5450a6e4d721049730e7f2dae07720e0902b0e4040bd6f9ada8"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] + +[[package]] +name = "watchfiles" +version = "1.0.4" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "watchfiles-1.0.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ba5bb3073d9db37c64520681dd2650f8bd40902d991e7b4cfaeece3e32561d08"}, + {file = "watchfiles-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f25d0ba0fe2b6d2c921cf587b2bf4c451860086534f40c384329fb96e2044d1"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47eb32ef8c729dbc4f4273baece89398a4d4b5d21a1493efea77a17059f4df8a"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:076f293100db3b0b634514aa0d294b941daa85fc777f9c698adb1009e5aca0b1"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eacd91daeb5158c598fe22d7ce66d60878b6294a86477a4715154990394c9b3"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13c2ce7b72026cfbca120d652f02c7750f33b4c9395d79c9790b27f014c8a5a2"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90192cdc15ab7254caa7765a98132a5a41471cf739513cc9bcf7d2ffcc0ec7b2"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278aaa395f405972e9f523bd786ed59dfb61e4b827856be46a42130605fd0899"}, + {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a462490e75e466edbb9fc4cd679b62187153b3ba804868452ef0577ec958f5ff"}, + {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8d0d0630930f5cd5af929040e0778cf676a46775753e442a3f60511f2409f48f"}, + {file = "watchfiles-1.0.4-cp310-cp310-win32.whl", hash = "sha256:cc27a65069bcabac4552f34fd2dce923ce3fcde0721a16e4fb1b466d63ec831f"}, + {file = "watchfiles-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:8b1f135238e75d075359cf506b27bf3f4ca12029c47d3e769d8593a2024ce161"}, + {file = "watchfiles-1.0.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2a9f93f8439639dc244c4d2902abe35b0279102bca7bbcf119af964f51d53c19"}, + {file = "watchfiles-1.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9eea33ad8c418847dd296e61eb683cae1c63329b6d854aefcd412e12d94ee235"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31f1a379c9dcbb3f09cf6be1b7e83b67c0e9faabed0471556d9438a4a4e14202"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab594e75644421ae0a2484554832ca5895f8cab5ab62de30a1a57db460ce06c6"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc2eb5d14a8e0d5df7b36288979176fbb39672d45184fc4b1c004d7c3ce29317"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f68d8e9d5a321163ddacebe97091000955a1b74cd43724e346056030b0bacee"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9ce064e81fe79faa925ff03b9f4c1a98b0bbb4a1b8c1b015afa93030cb21a49"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b77d5622ac5cc91d21ae9c2b284b5d5c51085a0bdb7b518dba263d0af006132c"}, + {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1941b4e39de9b38b868a69b911df5e89dc43767feeda667b40ae032522b9b5f1"}, + {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f8c4998506241dedf59613082d1c18b836e26ef2a4caecad0ec41e2a15e4226"}, + {file = "watchfiles-1.0.4-cp311-cp311-win32.whl", hash = "sha256:4ebbeca9360c830766b9f0df3640b791be569d988f4be6c06d6fae41f187f105"}, + {file = "watchfiles-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:05d341c71f3d7098920f8551d4df47f7b57ac5b8dad56558064c3431bdfc0b74"}, + {file = "watchfiles-1.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:32b026a6ab64245b584acf4931fe21842374da82372d5c039cba6bf99ef722f3"}, + {file = "watchfiles-1.0.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:229e6ec880eca20e0ba2f7e2249c85bae1999d330161f45c78d160832e026ee2"}, + {file = "watchfiles-1.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5717021b199e8353782dce03bd8a8f64438832b84e2885c4a645f9723bf656d9"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0799ae68dfa95136dde7c472525700bd48777875a4abb2ee454e3ab18e9fc712"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43b168bba889886b62edb0397cab5b6490ffb656ee2fcb22dec8bfeb371a9e12"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb2c46e275fbb9f0c92e7654b231543c7bbfa1df07cdc4b99fa73bedfde5c844"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:857f5fc3aa027ff5e57047da93f96e908a35fe602d24f5e5d8ce64bf1f2fc733"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55ccfd27c497b228581e2838d4386301227fc0cb47f5a12923ec2fe4f97b95af"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c11ea22304d17d4385067588123658e9f23159225a27b983f343fcffc3e796a"}, + {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:74cb3ca19a740be4caa18f238298b9d472c850f7b2ed89f396c00a4c97e2d9ff"}, + {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7cce76c138a91e720d1df54014a047e680b652336e1b73b8e3ff3158e05061e"}, + {file = "watchfiles-1.0.4-cp312-cp312-win32.whl", hash = "sha256:b045c800d55bc7e2cadd47f45a97c7b29f70f08a7c2fa13241905010a5493f94"}, + {file = "watchfiles-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:c2acfa49dd0ad0bf2a9c0bb9a985af02e89345a7189be1efc6baa085e0f72d7c"}, + {file = "watchfiles-1.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:22bb55a7c9e564e763ea06c7acea24fc5d2ee5dfc5dafc5cfbedfe58505e9f90"}, + {file = "watchfiles-1.0.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:8012bd820c380c3d3db8435e8cf7592260257b378b649154a7948a663b5f84e9"}, + {file = "watchfiles-1.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa216f87594f951c17511efe5912808dfcc4befa464ab17c98d387830ce07b60"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c9953cf85529c05b24705639ffa390f78c26449e15ec34d5339e8108c7c407"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cf684aa9bba4cd95ecb62c822a56de54e3ae0598c1a7f2065d51e24637a3c5d"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f44a39aee3cbb9b825285ff979ab887a25c5d336e5ec3574f1506a4671556a8d"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38320582736922be8c865d46520c043bff350956dfc9fbaee3b2df4e1740a4b"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39f4914548b818540ef21fd22447a63e7be6e24b43a70f7642d21f1e73371590"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f12969a3765909cf5dc1e50b2436eb2c0e676a3c75773ab8cc3aa6175c16e902"}, + {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0986902677a1a5e6212d0c49b319aad9cc48da4bd967f86a11bde96ad9676ca1"}, + {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:308ac265c56f936636e3b0e3f59e059a40003c655228c131e1ad439957592303"}, + {file = "watchfiles-1.0.4-cp313-cp313-win32.whl", hash = "sha256:aee397456a29b492c20fda2d8961e1ffb266223625346ace14e4b6d861ba9c80"}, + {file = "watchfiles-1.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:d6097538b0ae5c1b88c3b55afa245a66793a8fec7ada6755322e465fb1a0e8cc"}, + {file = "watchfiles-1.0.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:d3452c1ec703aa1c61e15dfe9d482543e4145e7c45a6b8566978fbb044265a21"}, + {file = "watchfiles-1.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7b75fee5a16826cf5c46fe1c63116e4a156924d668c38b013e6276f2582230f0"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e997802d78cdb02623b5941830ab06f8860038faf344f0d288d325cc9c5d2ff"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0611d244ce94d83f5b9aff441ad196c6e21b55f77f3c47608dcf651efe54c4a"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9745a4210b59e218ce64c91deb599ae8775c8a9da4e95fb2ee6fe745fc87d01a"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4810ea2ae622add560f4aa50c92fef975e475f7ac4900ce5ff5547b2434642d8"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:740d103cd01458f22462dedeb5a3382b7f2c57d07ff033fbc9465919e5e1d0f3"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbd912a61543a36aef85e34f212e5d2486e7c53ebfdb70d1e0b060cc50dd0bf"}, + {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0bc80d91ddaf95f70258cf78c471246846c1986bcc5fd33ccc4a1a67fcb40f9a"}, + {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab0311bb2ffcd9f74b6c9de2dda1612c13c84b996d032cd74799adb656af4e8b"}, + {file = "watchfiles-1.0.4-cp39-cp39-win32.whl", hash = "sha256:02a526ee5b5a09e8168314c905fc545c9bc46509896ed282aeb5a8ba9bd6ca27"}, + {file = "watchfiles-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:a5ae5706058b27c74bac987d615105da17724172d5aaacc6c362a40599b6de43"}, + {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdcc92daeae268de1acf5b7befcd6cfffd9a047098199056c72e4623f531de18"}, + {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8d3d9203705b5797f0af7e7e5baa17c8588030aaadb7f6a86107b7247303817"}, + {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdef5a1be32d0b07dcea3318a0be95d42c98ece24177820226b56276e06b63b0"}, + {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:342622287b5604ddf0ed2d085f3a589099c9ae8b7331df3ae9845571586c4f3d"}, + {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9fe37a2de80aa785d340f2980276b17ef697ab8db6019b07ee4fd28a8359d2f3"}, + {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9d1ef56b56ed7e8f312c934436dea93bfa3e7368adfcf3df4c0da6d4de959a1e"}, + {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b42cac65beae3a362629950c444077d1b44f1790ea2772beaea95451c086bb"}, + {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e0227b8ed9074c6172cf55d85b5670199c99ab11fd27d2c473aa30aec67ee42"}, + {file = "watchfiles-1.0.4.tar.gz", hash = "sha256:6ba473efd11062d73e4f00c2b730255f9c1bdd73cd5f9fe5b5da8dbd4a717205"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + +[[package]] +name = "websockets" +version = "10.4" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.7" +groups = ["pyppeteer", "test"] +files = [ + {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, + {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, + {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, + {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, + {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, + {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, + {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, + {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, + {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, + {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, + {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, + {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, + {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, + {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, + {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, + {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, + {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, + {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, + {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, + {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, + {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, + {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, + {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, + {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, +] + +[[package]] +name = "werkzeug" +version = "3.1.3" +description = "The comprehensive WSGI web application library." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, + {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, +] + +[package.dependencies] +MarkupSafe = ">=2.1.1" + +[package.extras] +watchdog = ["watchdog (>=2.3)"] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +groups = ["main"] +markers = "sys_platform == \"win32\"" +files = [ + {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"}, + {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"}, +] + +[package.extras] +dev = ["black (>=19.3b0) ; python_version >= \"3.6\"", "pytest (>=4.6.2)"] + +[[package]] +name = "wrapt" +version = "1.17.2" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"}, + {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"}, + {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"}, + {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"}, + {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"}, + {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"}, + {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"}, + {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"}, + {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"}, + {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"}, + {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"}, + {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"}, + {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"}, + {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"}, + {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"}, + {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"}, + {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"}, +] + +[[package]] +name = "yarl" +version = "1.18.3" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690"}, + {file = "yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6"}, + {file = "yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a"}, + {file = "yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1"}, + {file = "yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285"}, + {file = "yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2"}, + {file = "yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8"}, + {file = "yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d"}, + {file = "yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1"}, + {file = "yarl-1.18.3-cp39-cp39-win32.whl", hash = "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5"}, + {file = "yarl-1.18.3-cp39-cp39-win_amd64.whl", hash = "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9"}, + {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"}, + {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.0" + +[[package]] +name = "zipp" +version = "3.21.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.9" +groups = ["pyppeteer", "test"] +files = [ + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, +] +markers = {test = "python_version == \"3.9\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + +[metadata] +lock-version = "2.1" +python-versions = ">=3.9,<3.12" +content-hash = "2a63e2506ab3c4c0a2c89495a12ecdae555575e3d8103ef34e591c96d85dcf74" diff --git a/metagpt/management/__init__.py b/metagpt/core/prompts/__init__.py similarity index 78% rename from metagpt/management/__init__.py rename to metagpt/core/prompts/__init__.py index 7ea13b3287..93b945019a 100644 --- a/metagpt/management/__init__.py +++ b/metagpt/core/prompts/__init__.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- """ -@Time : 2023/4/30 20:58 +@Time : 2023/5/30 09:51 @Author : alexanderwu @File : __init__.py """ diff --git a/metagpt/prompts/di/role_zero.py b/metagpt/core/prompts/role_zero.py similarity index 99% rename from metagpt/prompts/di/role_zero.py rename to metagpt/core/prompts/role_zero.py index 5e3eb0a98b..32cf5b253d 100644 --- a/metagpt/prompts/di/role_zero.py +++ b/metagpt/core/prompts/role_zero.py @@ -1,4 +1,4 @@ -from metagpt.const import EXPERIENCE_MASK +from metagpt.core.const import EXPERIENCE_MASK ROLE_INSTRUCTION = """ Based on the context, write a plan or modify an existing plan to achieve the goal. A plan consists of one to 3 tasks. diff --git a/tests/metagpt/document_store/__init__.py b/metagpt/core/provider/__init__.py similarity index 78% rename from tests/metagpt/document_store/__init__.py rename to metagpt/core/provider/__init__.py index 5b08190fff..8bcb1dfafd 100644 --- a/tests/metagpt/document_store/__init__.py +++ b/metagpt/core/provider/__init__.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- """ -@Time : 2023/5/27 20:19 +@Time : 2023/5/5 22:59 @Author : alexanderwu @File : __init__.py """ diff --git a/metagpt/provider/base_llm.py b/metagpt/core/provider/base_llm.py similarity index 97% rename from metagpt/provider/base_llm.py rename to metagpt/core/provider/base_llm.py index 6560fc7ddd..742004be46 100644 --- a/metagpt/provider/base_llm.py +++ b/metagpt/core/provider/base_llm.py @@ -22,14 +22,14 @@ wait_random_exponential, ) -from metagpt.configs.compress_msg_config import CompressType -from metagpt.configs.llm_config import LLMConfig -from metagpt.const import IMAGES, LLM_API_TIMEOUT, USE_CONFIG_TIMEOUT -from metagpt.logs import logger -from metagpt.provider.constant import MULTI_MODAL_MODELS -from metagpt.utils.common import log_and_reraise -from metagpt.utils.cost_manager import CostManager, Costs -from metagpt.utils.token_counter import TOKEN_MAX +from metagpt.core.configs.compress_msg_config import CompressType +from metagpt.core.configs.llm_config import LLMConfig +from metagpt.core.const import IMAGES, LLM_API_TIMEOUT, USE_CONFIG_TIMEOUT +from metagpt.core.logs import logger +from metagpt.core.provider.constant import MULTI_MODAL_MODELS +from metagpt.core.utils.common import log_and_reraise +from metagpt.core.utils.cost_manager import CostManager, Costs +from metagpt.core.utils.token_counter import TOKEN_MAX class BaseLLM(ABC): @@ -91,7 +91,7 @@ def support_image_input(self) -> bool: def format_msg(self, messages: Union[str, "Message", list[dict], list["Message"], list[str]]) -> list[dict]: """convert messages to list[dict].""" - from metagpt.schema import Message + from metagpt.core.schema import Message if not isinstance(messages, list): messages = [messages] diff --git a/metagpt/provider/constant.py b/metagpt/core/provider/constant.py similarity index 100% rename from metagpt/provider/constant.py rename to metagpt/core/provider/constant.py diff --git a/metagpt/provider/general_api_base.py b/metagpt/core/provider/general_api_base.py similarity index 100% rename from metagpt/provider/general_api_base.py rename to metagpt/core/provider/general_api_base.py diff --git a/metagpt/provider/general_api_requestor.py b/metagpt/core/provider/general_api_requestor.py similarity index 97% rename from metagpt/provider/general_api_requestor.py rename to metagpt/core/provider/general_api_requestor.py index b8da1565dc..2d1703f76a 100644 --- a/metagpt/provider/general_api_requestor.py +++ b/metagpt/core/provider/general_api_requestor.py @@ -8,8 +8,8 @@ import aiohttp import requests -from metagpt.logs import logger -from metagpt.provider.general_api_base import APIRequestor, OpenAIResponse +from metagpt.core.logs import logger +from metagpt.core.provider.general_api_base import APIRequestor, OpenAIResponse def parse_stream_helper(line: bytes) -> Optional[bytes]: diff --git a/metagpt/provider/human_provider.py b/metagpt/core/provider/human_provider.py similarity index 89% rename from metagpt/provider/human_provider.py rename to metagpt/core/provider/human_provider.py index a16a49c206..ed11cac494 100644 --- a/metagpt/provider/human_provider.py +++ b/metagpt/core/provider/human_provider.py @@ -5,10 +5,10 @@ """ from typing import Optional -from metagpt.configs.llm_config import LLMConfig -from metagpt.const import LLM_API_TIMEOUT, USE_CONFIG_TIMEOUT -from metagpt.logs import logger -from metagpt.provider.base_llm import BaseLLM +from metagpt.core.configs.llm_config import LLMConfig +from metagpt.core.const import LLM_API_TIMEOUT, USE_CONFIG_TIMEOUT +from metagpt.core.logs import logger +from metagpt.core.provider.base_llm import BaseLLM class HumanProvider(BaseLLM): diff --git a/metagpt/provider/llm_provider_registry.py b/metagpt/core/provider/llm_provider_registry.py similarity index 91% rename from metagpt/provider/llm_provider_registry.py rename to metagpt/core/provider/llm_provider_registry.py index 7f86185902..9caf39214a 100644 --- a/metagpt/provider/llm_provider_registry.py +++ b/metagpt/core/provider/llm_provider_registry.py @@ -5,8 +5,8 @@ @Author : alexanderwu @File : llm_provider_registry.py """ -from metagpt.configs.llm_config import LLMConfig, LLMType -from metagpt.provider.base_llm import BaseLLM +from metagpt.core.configs.llm_config import LLMConfig, LLMType +from metagpt.core.provider.base_llm import BaseLLM class LLMProviderRegistry: diff --git a/examples/stanford_town/__init__.py b/metagpt/core/provider/postprocess/__init__.py similarity index 100% rename from examples/stanford_town/__init__.py rename to metagpt/core/provider/postprocess/__init__.py diff --git a/metagpt/provider/postprocess/base_postprocess_plugin.py b/metagpt/core/provider/postprocess/base_postprocess_plugin.py similarity index 98% rename from metagpt/provider/postprocess/base_postprocess_plugin.py rename to metagpt/core/provider/postprocess/base_postprocess_plugin.py index 48130ede8e..68fdabf0d2 100644 --- a/metagpt/provider/postprocess/base_postprocess_plugin.py +++ b/metagpt/core/provider/postprocess/base_postprocess_plugin.py @@ -4,7 +4,7 @@ from typing import Union -from metagpt.utils.repair_llm_raw_output import ( +from metagpt.core.utils.repair_llm_raw_output import ( RepairType, extract_content_from_output, repair_llm_raw_output, diff --git a/metagpt/provider/postprocess/llm_output_postprocess.py b/metagpt/core/provider/postprocess/llm_output_postprocess.py similarity index 85% rename from metagpt/provider/postprocess/llm_output_postprocess.py rename to metagpt/core/provider/postprocess/llm_output_postprocess.py index 2537d114a2..070c8fed8a 100644 --- a/metagpt/provider/postprocess/llm_output_postprocess.py +++ b/metagpt/core/provider/postprocess/llm_output_postprocess.py @@ -4,7 +4,9 @@ from typing import Union -from metagpt.provider.postprocess.base_postprocess_plugin import BasePostProcessPlugin +from metagpt.core.provider.postprocess.base_postprocess_plugin import ( + BasePostProcessPlugin, +) def llm_output_postprocess( diff --git a/metagpt/core/pyproject.toml b/metagpt/core/pyproject.toml new file mode 100644 index 0000000000..0346bc19a6 --- /dev/null +++ b/metagpt/core/pyproject.toml @@ -0,0 +1,67 @@ +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +# 包基本信息 +[tool.poetry] +name = "metagpt-core" +version = "1.0.0" +description = "The core package of The Multi-Agent Framework" +authors = ["Alexander Wu "] +readme = "README.md" +license = "MIT" +repository = "https://github.com/geekan/MetaGPT" +keywords = ["metagpt", "core", "llm", "multi-agent", "multi-role", "programming", "gpt", "metaprogramming"] +classifiers = [ + "Development Status :: 4 - Beta", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "License :: OSI Approved :: MIT License", +] +# 简化包配置,只包含当前目录下的Python文件 +packages = [ + { include = "metagpt/core/**/*.py", from = "../.." } +] + +[tool.poetry.dependencies] +python = ">=3.9,<3.12" +aiohttp = "3.8.6" +loguru = "0.6.0" +pydantic = ">=2.5.3" +PyYAML = "6.0.1" +setuptools = "65.6.3" +tenacity = "8.2.3" +tiktoken = "0.7.0" +aiofiles = "23.2.1" +rank-bm25 = "0.2.2" +tree_sitter = "~0.23.2" +tree_sitter_python = "~0.23.2" + +# 可选依赖 +[tool.poetry.group.pyppeteer.dependencies] +pyppeteer = ">=1.0.2" + +[tool.poetry.group.test.dependencies] +pytest = "*" +pytest-asyncio = "*" +pytest-cov = "*" +pytest-mock = "*" +pytest-html = "*" +pytest-xdist = "*" +pytest-timeout = "*" +connexion = {extras = ["uvicorn"], version = "^3.0.5"} +azure-cognitiveservices-speech = "^1.31.0" +aioboto3 = "^12.4.0" +gradio = "3.0.0" +google-api-core = "2.17.1" +protobuf = "^4.25.5" +pylint = "3.0.3" +pybrowsers = "*" + +[tool.poetry.group.dev.dependencies] +pylint = "^3.0.3" +black = "^23.3.0" +isort = "^5.12.0" +pre-commit = "^3.6.0" diff --git a/metagpt/core/roles/__init__.py b/metagpt/core/roles/__init__.py new file mode 100644 index 0000000000..aeecee9115 --- /dev/null +++ b/metagpt/core/roles/__init__.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2023/5/11 14:43 +@Author : alexanderwu +@File : __init__.py +""" + +from metagpt.core.roles.role import Role +from metagpt.core.roles.base_role_zero import BaseRoleZero + +__all__ = ["Role", "BaseRoleZero"] diff --git a/metagpt/core/roles/base_role_zero.py b/metagpt/core/roles/base_role_zero.py new file mode 100644 index 0000000000..7957e69e76 --- /dev/null +++ b/metagpt/core/roles/base_role_zero.py @@ -0,0 +1,173 @@ +from __future__ import annotations + +from datetime import datetime +from typing import Annotated, Callable, Literal, Optional + +from pydantic import Field, model_validator + +from metagpt.core.actions import Action +from metagpt.core.exp_pool import exp_cache +from metagpt.core.exp_pool.context_builders import RoleZeroContextBuilder +from metagpt.core.exp_pool.serializers import RoleZeroSerializer +from metagpt.core.logs import logger +from metagpt.core.memory.role_zero_memory import RoleZeroLongTermMemory +from metagpt.core.prompts.role_zero import ( + CMD_PROMPT, + QUICK_THINK_EXAMPLES, + QUICK_THINK_SYSTEM_PROMPT, + ROLE_INSTRUCTION, + SYSTEM_PROMPT, +) +from metagpt.core.roles.role import Role +from metagpt.core.schema import AIMessage, Message +from metagpt.core.strategy.experience_retriever import DummyExpRetriever, ExpRetriever +from metagpt.core.tools.tool_recommend_base import ToolRecommender + + +class BaseRoleZero(Role): + """A role who can think and act dynamically""" + + # Basic Info + name: str = "Zero" + profile: str = "RoleZero" + goal: str = "" + system_msg: Optional[list[str]] = None # Use None to conform to the default value at llm.aask + system_prompt: str = SYSTEM_PROMPT # Use None to conform to the default value at llm.aask + cmd_prompt: str = CMD_PROMPT + cmd_prompt_current_state: str = "" + instruction: str = ROLE_INSTRUCTION + task_type_desc: Optional[str] = None + + # React Mode + react_mode: Literal["react"] = "react" + max_react_loop: int = 50 # used for react mode + + # Tools + tools: list[str] = [] # Use special symbol [""] to indicate use of all registered tools + tool_recommender: Optional[ToolRecommender] = None + tool_execution_map: Annotated[dict[str, Callable], Field(exclude=True)] = {} + special_tool_commands: list[str] = ["Plan.finish_current_task", "end", "Terminal.run_command", "RoleZero.ask_human"] + # List of exclusive tool commands. + # If multiple instances of these commands appear, only the first occurrence will be retained. + exclusive_tool_commands: list[str] = [ + "Editor.edit_file_by_replace", + "Editor.insert_content_at_line", + "Editor.append_file", + "Editor.open_file", + ] + + # Experience + experience_retriever: Annotated[ExpRetriever, Field(exclude=True)] = DummyExpRetriever() + + # Others + observe_all_msg_from_buffer: bool = True + command_rsp: str = "" # the raw string containing the commands + commands: list[dict] = [] # commands to be executed + memory_k: int = 200 # number of memories (messages) to use as historical context + use_fixed_sop: bool = False + respond_language: str = "" # Language for responding humans and publishing messages. + use_summary: bool = True # whether to summarize at the end + + @model_validator(mode="after") + def set_plan_and_tool(self) -> "BaseRoleZero": + """Initialize plan and tool related attributes""" + return self + + @model_validator(mode="after") + def set_tool_execution(self) -> "BaseRoleZero": + """Initialize tool execution mapping""" + return self + + @model_validator(mode="after") + def set_longterm_memory(self) -> "BaseRoleZero": + """Set up long-term memory for the role if enabled in the configuration. + + If `enable_longterm_memory` is True, set up long-term memory. + The role name will be used as the collection name. + """ + if self.config.role_zero.enable_longterm_memory: + # Use config.role_zero to initialize long-term memory + self.rc.memory = RoleZeroLongTermMemory( + **self.rc.memory.model_dump(), + persist_path=self.config.role_zero.longterm_memory_persist_path, + collection_name=self.name.replace(" ", ""), + memory_k=self.config.role_zero.memory_k, + similarity_top_k=self.config.role_zero.similarity_top_k, + use_llm_ranker=self.config.role_zero.use_llm_ranker, + ) + logger.info(f"Long-term memory set for role '{self.name}'") + + return self + + async def _think(self) -> bool: + return super()._think() + + @exp_cache(context_builder=RoleZeroContextBuilder(), serializer=RoleZeroSerializer()) + async def llm_cached_aask(self, *, req: list[dict], system_msgs: list[str], **kwargs) -> str: + """Use `exp_cache` to automatically manage experiences. + + The `RoleZeroContextBuilder` attempts to add experiences to `req`. + The `RoleZeroSerializer` extracts essential parts of `req` for the experience pool, trimming lengthy entries to retain only necessary parts. + """ + return await self.llm.aask(req, system_msgs=system_msgs) + + def _get_prefix(self) -> str: + time_info = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + return super()._get_prefix() + f" The current time is {time_info}." + + async def _act(self) -> Message: + return await super()._act() + + async def _react(self) -> Message: + # NOTE: Diff 1: Each time landing here means news is observed, set todo to allow news processing in _think + self._set_state(0) + + # problems solvable by quick thinking doesn't need to a formal think-act cycle + quick_rsp, _ = await self._quick_think() + if quick_rsp: + return quick_rsp + + actions_taken = 0 + rsp = AIMessage(content="No actions taken yet", cause_by=Action) # will be overwritten after Role _act + while actions_taken < self.rc.max_react_loop: + # NOTE: Diff 2: Keep observing within _react, news will go into memory, allowing adapting to new info + await self._observe() + + # think + has_todo = await self._think() + if not has_todo: + break + # act + logger.debug(f"{self._setting}: {self.rc.state=}, will do {self.rc.todo}") + rsp = await self._act() + actions_taken += 1 + + # post-check + if self.rc.max_react_loop >= 10 and actions_taken >= self.rc.max_react_loop: + # If max_react_loop is a small value (e.g. < 10), it is intended to be reached and make the agent stop + logger.warning(f"reached max_react_loop: {actions_taken}") + human_rsp = await self.ask_human( + "I have reached my max action rounds, do you want me to continue? Yes or no" + ) + if "yes" in human_rsp.lower(): + actions_taken = 0 + return rsp # return output from the last action + + def format_quick_system_prompt(self) -> str: + """Format the system prompt for quick thinking.""" + return QUICK_THINK_SYSTEM_PROMPT.format(examples=QUICK_THINK_EXAMPLES, role_info=self._get_prefix()) + + async def _quick_think(self): + pass + + def _is_special_command(self, cmd) -> bool: + return cmd["command_name"] in self.special_tool_commands + + async def ask_human(self, question: str): + raise NotImplementedError + + async def reply_to_human(self, content: str): + raise NotImplementedError + + async def _end(self, **kwarg): + pass diff --git a/metagpt/roles/role.py b/metagpt/core/roles/role.py similarity index 96% rename from metagpt/roles/role.py rename to metagpt/core/roles/role.py index 49b1d1787e..ae88820fb2 100644 --- a/metagpt/roles/role.py +++ b/metagpt/core/roles/role.py @@ -27,16 +27,16 @@ from pydantic import BaseModel, ConfigDict, Field, SerializeAsAny, model_validator -from metagpt.actions import Action, ActionOutput -from metagpt.actions.action_node import ActionNode -from metagpt.actions.add_requirement import UserRequirement -from metagpt.base import BaseEnvironment, BaseRole -from metagpt.const import MESSAGE_ROUTE_TO_SELF -from metagpt.context_mixin import ContextMixin -from metagpt.logs import logger -from metagpt.memory import Memory -from metagpt.provider import HumanProvider -from metagpt.schema import ( +from metagpt.core.actions import Action, ActionOutput +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.actions.add_requirement import UserRequirement +from metagpt.core.base import BaseEnvironment +from metagpt.core.const import MESSAGE_ROUTE_TO_SELF +from metagpt.core.context_mixin import ContextMixin +from metagpt.core.logs import logger +from metagpt.core.memory import Memory +from metagpt.core.provider.human_provider import HumanProvider +from metagpt.core.schema import ( AIMessage, Message, MessageQueue, @@ -44,9 +44,9 @@ Task, TaskResult, ) -from metagpt.strategy.planner import Planner -from metagpt.utils.common import any_to_name, any_to_str, role_raise_decorator -from metagpt.utils.repair_llm_raw_output import extract_state_value_from_output +from metagpt.core.strategy.planner import BasePlanner +from metagpt.core.utils.common import any_to_name, any_to_str, role_raise_decorator +from metagpt.core.utils.repair_llm_raw_output import extract_state_value_from_output PREFIX_TEMPLATE = """You are a {profile}, named {name}, your goal is {goal}. """ CONSTRAINT_TEMPLATE = "the constraint is {constraints}. " @@ -122,7 +122,7 @@ def history(self) -> list[Message]: return self.memory.get() -class Role(BaseRole, SerializationMixin, ContextMixin, BaseModel): +class Role(SerializationMixin, ContextMixin, BaseModel): """Role/Agent""" model_config = ConfigDict(arbitrary_types_allowed=True, extra="allow") @@ -149,7 +149,7 @@ class Role(BaseRole, SerializationMixin, ContextMixin, BaseModel): actions: list[SerializeAsAny[Action]] = Field(default=[], validate_default=True) rc: RoleContext = Field(default_factory=RoleContext) addresses: set[str] = set() - planner: Planner = Field(default_factory=Planner) + planner: BasePlanner = Field(default_factory=BasePlanner) # builtin variables recovered: bool = False # to tag if a recovered role @@ -279,7 +279,7 @@ def _set_react_mode(self, react_mode: str, max_react_loop: int = 1, auto_run: bo if react_mode == RoleReactMode.REACT: self.rc.max_react_loop = max_react_loop elif react_mode == RoleReactMode.PLAN_AND_ACT: - self.planner = Planner(goal=self.goal, working_memory=self.rc.working_memory, auto_run=auto_run) + self.planner = BasePlanner(goal=self.goal, working_memory=self.rc.working_memory, auto_run=auto_run) def _watch(self, actions: Iterable[Type[Action]] | Iterable[Action]): """Watch Actions of interest. Role will select Messages caused by these Actions from its personal message diff --git a/metagpt/schema.py b/metagpt/core/schema.py similarity index 87% rename from metagpt/schema.py rename to metagpt/core/schema.py index 52badcc21a..e79afe1065 100644 --- a/metagpt/schema.py +++ b/metagpt/core/schema.py @@ -25,7 +25,7 @@ from enum import Enum from json import JSONDecodeError from pathlib import Path -from typing import Any, Dict, Iterable, List, Optional, Type, TypeVar, Union +from typing import Any, Dict, Iterable, List, Literal, Optional, Type, TypeVar, Union from pydantic import ( BaseModel, @@ -37,8 +37,8 @@ field_validator, ) -from metagpt.base.base_serialization import BaseSerialization -from metagpt.const import ( +from metagpt.core.base.base_serialization import BaseSerialization +from metagpt.core.const import ( AGENT, MESSAGE_ROUTE_CAUSE_BY, MESSAGE_ROUTE_FROM, @@ -48,10 +48,9 @@ SYSTEM_DESIGN_FILE_REPO, TASK_FILE_REPO, ) -from metagpt.logs import logger -from metagpt.repo_parser import DotClassInfo -from metagpt.tools.tool_registry import register_tool -from metagpt.utils.common import ( +from metagpt.core.logs import logger +from metagpt.core.tools.tool_registry import register_tool +from metagpt.core.utils.common import ( CodeParser, any_to_str, any_to_str_set, @@ -60,9 +59,9 @@ read_json_file, write_json_file, ) -from metagpt.utils.exceptions import handle_exception -from metagpt.utils.report import TaskReporter -from metagpt.utils.serialize import ( +from metagpt.core.utils.exceptions import handle_exception +from metagpt.core.utils.report import TaskReporter +from metagpt.core.utils.serialize import ( actionoutout_schema_to_mapping, actionoutput_mapping_to_str, actionoutput_str_to_mapping, @@ -130,6 +129,36 @@ def get_serialization_path(cls) -> str: return str(SERDESER_PATH / f"{cls.__qualname__}.json") +class CodeSummarizeContext(BaseModel): + design_filename: str = "" + task_filename: str = "" + codes_filenames: List[str] = Field(default_factory=list) + reason: str = "" + + @staticmethod + def loads(filenames: List) -> CodeSummarizeContext: + ctx = CodeSummarizeContext() + for filename in filenames: + if Path(filename).is_relative_to(SYSTEM_DESIGN_FILE_REPO): + ctx.design_filename = str(filename) + continue + if Path(filename).is_relative_to(TASK_FILE_REPO): + ctx.task_filename = str(filename) + continue + return ctx + + def __hash__(self): + return hash((self.design_filename, self.task_filename)) + + +class CodePlanAndChangeContext(BaseModel): + requirement: str = "" + issue: str = "" + prd_filename: str = "" + design_filename: str = "" + task_filename: str = "" + + class SimpleMessage(BaseModel): content: str role: str @@ -216,11 +245,236 @@ def to_action_output(self) -> "ActionOutput": :return: A string representing action output. """ - from metagpt.actions.action_output import ActionOutput + from metagpt.core.actions.action_output import ActionOutput return ActionOutput(content=self.model_dump_json(), instruct_content=self) +@register_tool( + include_functions=[ + "append_task", + "reset_task", + "replace_task", + "finish_current_task", + ] +) +class Plan(BaseModel): + """Plan is a sequence of tasks towards a goal.""" + + goal: str + context: str = "" + tasks: list[Task] = [] + task_map: dict[str, Task] = {} + current_task_id: str = "" + + def _topological_sort(self, tasks: list[Task]): + task_map = {task.task_id: task for task in tasks} + dependencies = {task.task_id: set(task.dependent_task_ids) for task in tasks} + sorted_tasks = [] + visited = set() + + def visit(task_id): + if task_id in visited: + return + visited.add(task_id) + for dependent_id in dependencies.get(task_id, []): + visit(dependent_id) + sorted_tasks.append(task_map[task_id]) + + for task in tasks: + visit(task.task_id) + + return sorted_tasks + + def add_tasks(self, tasks: list[Task]): + """ + Integrates new tasks into the existing plan, ensuring dependency order is maintained. + + This method performs two primary functions based on the current state of the task list: + 1. If there are no existing tasks, it topologically sorts the provided tasks to ensure + correct execution order based on dependencies, and sets these as the current tasks. + 2. If there are existing tasks, it merges the new tasks with the existing ones. It maintains + any common prefix of tasks (based on task_id and instruction) and appends the remainder + of the new tasks. The current task is updated to the first unfinished task in this merged list. + + Args: + tasks (list[Task]): A list of tasks (may be unordered) to add to the plan. + + Returns: + None: The method updates the internal state of the plan but does not return anything. + """ + if not tasks: + return + + # Topologically sort the new tasks to ensure correct dependency order + new_tasks = self._topological_sort(tasks) + + if not self.tasks: + # If there are no existing tasks, set the new tasks as the current tasks + self.tasks = new_tasks + + else: + # Find the length of the common prefix between existing and new tasks + prefix_length = 0 + for old_task, new_task in zip(self.tasks, new_tasks): + if old_task.task_id != new_task.task_id or old_task.instruction != new_task.instruction: + break + prefix_length += 1 + + # Combine the common prefix with the remainder of the new tasks + final_tasks = self.tasks[:prefix_length] + new_tasks[prefix_length:] + self.tasks = final_tasks + + # Update current_task_id to the first unfinished task in the merged list + self._update_current_task() + + # Update the task map for quick access to tasks by ID + self.task_map = {task.task_id: task for task in self.tasks} + + def reset_task(self, task_id: str): + """ + Reset a task based on task_id, i.e. set Task.is_finished=False and request redo. This also resets all tasks depending on it. + + Args: + task_id (str): The ID of the task to be reset. + """ + if task_id in self.task_map: + task = self.task_map[task_id] + task.reset() + # reset all downstream tasks that are dependent on the reset task + for dep_task in self.tasks: + if task_id in dep_task.dependent_task_ids: + # FIXME: if LLM generates cyclic tasks, this will result in infinite recursion + self.reset_task(dep_task.task_id) + + self._update_current_task() + + def _replace_task(self, new_task: Task): + """ + Replace an existing task with the new input task based on task_id, and reset all tasks depending on it. + + Args: + new_task (Task): The new task that will replace an existing one. + + Returns: + None + """ + assert new_task.task_id in self.task_map + # Replace the task in the task map and the task list + self.task_map[new_task.task_id] = new_task + for i, task in enumerate(self.tasks): + if task.task_id == new_task.task_id: + self.tasks[i] = new_task + break + + # Reset dependent tasks + for task in self.tasks: + if new_task.task_id in task.dependent_task_ids: + self.reset_task(task.task_id) + + self._update_current_task() + + def _append_task(self, new_task: Task): + """ + Append a new task to the end of existing task sequences + + Args: + new_task (Task): The new task to be appended to the existing task sequence + + Returns: + None + """ + # assert not self.has_task_id(new_task.task_id), "Task already in current plan, use replace_task instead" + if self.has_task_id(new_task.task_id): + logger.warning( + "Task already in current plan, should use replace_task instead. Overwriting the existing task." + ) + + assert all( + [self.has_task_id(dep_id) for dep_id in new_task.dependent_task_ids] + ), "New task has unknown dependencies" + + # Existing tasks do not depend on the new task, it's fine to put it to the end of the sorted task sequence + self.tasks.append(new_task) + self.task_map[new_task.task_id] = new_task + self._update_current_task() + + def has_task_id(self, task_id: str) -> bool: + return task_id in self.task_map + + def _update_current_task(self): + self.tasks = self._topological_sort(self.tasks) + # Update the task map for quick access to tasks by ID + self.task_map = {task.task_id: task for task in self.tasks} + + current_task_id = "" + for task in self.tasks: + if not task.is_finished: + current_task_id = task.task_id + break + self.current_task_id = current_task_id + TaskReporter().report({"tasks": [i.model_dump() for i in self.tasks], "current_task_id": current_task_id}) + + @property + def current_task(self) -> Task: + """Find current task to execute + + Returns: + Task: the current task to be executed + """ + return self.task_map.get(self.current_task_id, None) + + def finish_current_task(self): + """Finish current task, set Task.is_finished=True, set current task to next task""" + if self.current_task_id: + self.current_task.is_finished = True + self._update_current_task() # set to next task + + def finish_all_tasks(self): + "Finish all tasks." + while self.current_task: + self.finish_current_task() + + def is_plan_finished(self) -> bool: + """Check if all tasks are finished""" + return all(task.is_finished for task in self.tasks) + + def get_finished_tasks(self) -> list[Task]: + """return all finished tasks in correct linearized order + + Returns: + list[Task]: list of finished tasks + """ + return [task for task in self.tasks if task.is_finished] + + def append_task( + self, task_id: str, dependent_task_ids: list[str], instruction: str, assignee: str, task_type: str = "" + ): + """ + Append a new task with task_id (number) to the end of existing task sequences. + If dependent_task_ids is not empty, the task will depend on the tasks with the ids in the list. + Note that the assignee should be the 'name' of the role. + """ + new_task = Task( + task_id=task_id, + dependent_task_ids=dependent_task_ids, + instruction=instruction, + assignee=assignee, + task_type=task_type, + ) + return self._append_task(new_task) + + def replace_task(self, task_id: str, new_dependent_task_ids: list[str], new_instruction: str, new_assignee: str): + """Replace an existing task (can be current task) based on task_id, and reset all tasks depending on it.""" + new_task = Task( + task_id=task_id, + dependent_task_ids=new_dependent_task_ids, + instruction=new_instruction, + assignee=new_assignee, + ) + return self._replace_task(new_task) + + class Resource(BaseModel): """Used by `Message`.`parse_resources`""" @@ -253,7 +507,9 @@ def check_instruct_content(cls, ic: Any) -> BaseModel: if "mapping" in ic: # compatible with custom-defined ActionOutput mapping = actionoutput_str_to_mapping(ic["mapping"]) - actionnode_class = import_class("ActionNode", "metagpt.actions.action_node") # avoid circular import + actionnode_class = import_class( + "ActionNode", "metagpt.core.actions.action_node" + ) # avoid circular import ic_obj = actionnode_class.create_model_class(class_name=ic["class"], mapping=mapping) elif "module" in ic: # subclasses of BaseModel @@ -266,7 +522,9 @@ def check_instruct_content(cls, ic: Any) -> BaseModel: @field_validator("cause_by", mode="before") @classmethod def check_cause_by(cls, cause_by: Any) -> str: - return any_to_str(cause_by if cause_by else import_class("UserRequirement", "metagpt.actions.add_requirement")) + return any_to_str( + cause_by if cause_by else import_class("UserRequirement", "metagpt.core.actions.add_requirement") + ) @field_validator("sent_from", mode="before") @classmethod @@ -289,7 +547,7 @@ def ser_instruct_content(self, ic: BaseModel) -> Union[dict, None]: # compatible with custom-defined ActionOutput schema = ic.model_json_schema() ic_type = str(type(ic)) - if " bool: - return task_id in self.task_map - - def _update_current_task(self): - self.tasks = self._topological_sort(self.tasks) - # Update the task map for quick access to tasks by ID - self.task_map = {task.task_id: task for task in self.tasks} - - current_task_id = "" - for task in self.tasks: - if not task.is_finished: - current_task_id = task.task_id - break - self.current_task_id = current_task_id - TaskReporter().report({"tasks": [i.model_dump() for i in self.tasks], "current_task_id": current_task_id}) - - @property - def current_task(self) -> Task: - """Find current task to execute - - Returns: - Task: the current task to be executed - """ - return self.task_map.get(self.current_task_id, None) - - def finish_current_task(self): - """Finish current task, set Task.is_finished=True, set current task to next task""" - if self.current_task_id: - self.current_task.is_finished = True - self._update_current_task() # set to next task - - def finish_all_tasks(self): - "Finish all tasks." - while self.current_task: - self.finish_current_task() - - def is_plan_finished(self) -> bool: - """Check if all tasks are finished""" - return all(task.is_finished for task in self.tasks) - - def get_finished_tasks(self) -> list[Task]: - """return all finished tasks in correct linearized order - - Returns: - list[Task]: list of finished tasks - """ - return [task for task in self.tasks if task.is_finished] - - def append_task( - self, task_id: str, dependent_task_ids: list[str], instruction: str, assignee: str, task_type: str = "" - ): - """ - Append a new task with task_id (number) to the end of existing task sequences. - If dependent_task_ids is not empty, the task will depend on the tasks with the ids in the list. - Note that the assignee should be the 'name' of the role. - """ - new_task = Task( - task_id=task_id, - dependent_task_ids=dependent_task_ids, - instruction=instruction, - assignee=assignee, - task_type=task_type, - ) - return self._append_task(new_task) - - def replace_task(self, task_id: str, new_dependent_task_ids: list[str], new_instruction: str, new_assignee: str): - """Replace an existing task (can be current task) based on task_id, and reset all tasks depending on it.""" - new_task = Task( - task_id=task_id, - dependent_task_ids=new_dependent_task_ids, - instruction=new_instruction, - assignee=new_assignee, - ) - return self._replace_task(new_task) - - class MessageQueue(BaseModel): """Message queue which supports asynchronous updates.""" @@ -827,124 +860,6 @@ class RunCodeResult(BaseContext): stderr: str -class CodeSummarizeContext(BaseModel): - design_filename: str = "" - task_filename: str = "" - codes_filenames: List[str] = Field(default_factory=list) - reason: str = "" - - @staticmethod - def loads(filenames: List) -> CodeSummarizeContext: - ctx = CodeSummarizeContext() - for filename in filenames: - if Path(filename).is_relative_to(SYSTEM_DESIGN_FILE_REPO): - ctx.design_filename = str(filename) - continue - if Path(filename).is_relative_to(TASK_FILE_REPO): - ctx.task_filename = str(filename) - continue - return ctx - - def __hash__(self): - return hash((self.design_filename, self.task_filename)) - - -class CodePlanAndChangeContext(BaseModel): - requirement: str = "" - issue: str = "" - prd_filename: str = "" - design_filename: str = "" - task_filename: str = "" - - -# mermaid class view -class UMLClassMeta(BaseModel): - name: str = "" - visibility: str = "" - - @staticmethod - def name_to_visibility(name: str) -> str: - if name == "__init__": - return "+" - if name.startswith("__"): - return "-" - elif name.startswith("_"): - return "#" - return "+" - - -class UMLClassAttribute(UMLClassMeta): - value_type: str = "" - default_value: str = "" - - def get_mermaid(self, align=1) -> str: - content = "".join(["\t" for i in range(align)]) + self.visibility - if self.value_type: - content += self.value_type.replace(" ", "") + " " - name = self.name.split(":", 1)[1] if ":" in self.name else self.name - content += name - if self.default_value: - content += "=" - if self.value_type not in ["str", "string", "String"]: - content += self.default_value - else: - content += '"' + self.default_value.replace('"', "") + '"' - # if self.abstraction: - # content += "*" - # if self.static: - # content += "$" - return content - - -class UMLClassMethod(UMLClassMeta): - args: List[UMLClassAttribute] = Field(default_factory=list) - return_type: str = "" - - def get_mermaid(self, align=1) -> str: - content = "".join(["\t" for i in range(align)]) + self.visibility - name = self.name.split(":", 1)[1] if ":" in self.name else self.name - content += name + "(" + ",".join([v.get_mermaid(align=0) for v in self.args]) + ")" - if self.return_type: - content += " " + self.return_type.replace(" ", "") - # if self.abstraction: - # content += "*" - # if self.static: - # content += "$" - return content - - -class UMLClassView(UMLClassMeta): - attributes: List[UMLClassAttribute] = Field(default_factory=list) - methods: List[UMLClassMethod] = Field(default_factory=list) - - def get_mermaid(self, align=1) -> str: - content = "".join(["\t" for i in range(align)]) + "class " + self.name + "{\n" - for v in self.attributes: - content += v.get_mermaid(align=align + 1) + "\n" - for v in self.methods: - content += v.get_mermaid(align=align + 1) + "\n" - content += "".join(["\t" for i in range(align)]) + "}\n" - return content - - @classmethod - def load_dot_class_info(cls, dot_class_info: DotClassInfo) -> UMLClassView: - visibility = UMLClassView.name_to_visibility(dot_class_info.name) - class_view = cls(name=dot_class_info.name, visibility=visibility) - for i in dot_class_info.attributes.values(): - visibility = UMLClassAttribute.name_to_visibility(i.name) - attr = UMLClassAttribute(name=i.name, visibility=visibility, value_type=i.type_, default_value=i.default_) - class_view.attributes.append(attr) - for i in dot_class_info.methods.values(): - visibility = UMLClassMethod.name_to_visibility(i.name) - method = UMLClassMethod(name=i.name, visibility=visibility, return_type=i.return_args.type_) - for j in i.args: - arg = UMLClassAttribute(name=j.name, value_type=j.type_, default_value=j.default_) - method.args.append(arg) - method.return_type = i.return_args.type_ - class_view.methods.append(method) - return class_view - - class BaseEnum(Enum): """Base class for enums.""" @@ -974,3 +889,20 @@ class LongTermMemoryItem(BaseModel): def rag_key(self) -> str: return self.message.content + + +class Point(BaseModel): + id: int = Field(default=0, description="ID of the point.") + text: str = Field(default="", description="Content of the point.") + language: Literal["Python", "Java"] = Field( + default="Python", description="The programming language that the point corresponds to." + ) + file_path: str = Field(default="", description="The file that the points come from.") + start_line: int = Field(default=0, description="The starting line number that the point refers to.") + end_line: int = Field(default=0, description="The ending line number that the point refers to.") + detail: str = Field(default="", description="File content from start_line to end_line.") + yes_example: str = Field(default="", description="yes of point examples") + no_example: str = Field(default="", description="no of point examples") + + def rag_key(self) -> str: + return self.text diff --git a/metagpt/strategy/experience_retriever.py b/metagpt/core/strategy/experience_retriever.py similarity index 100% rename from metagpt/strategy/experience_retriever.py rename to metagpt/core/strategy/experience_retriever.py diff --git a/metagpt/core/strategy/planner.py b/metagpt/core/strategy/planner.py new file mode 100644 index 0000000000..df40a1fcae --- /dev/null +++ b/metagpt/core/strategy/planner.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +import json +from typing import List + +from pydantic import BaseModel, Field + +from metagpt.core.memory import Memory +from metagpt.core.schema import Message, Plan, Task, TaskResult + +STRUCTURAL_CONTEXT = """ +## User Requirement +{user_requirement} +## Context +{context} +## Current Plan +{tasks} +## Current Task +{current_task} +""" + +PLAN_STATUS = """ +## Finished Tasks +### code +```python +{code_written} +``` + +### execution result +{task_results} + +## Current Task +{current_task} + +## Finished Section of Current Task +### code +```python +{current_task_code} +``` +### execution result +{current_task_result} + +## Task Guidance +Write code for the incomplete sections of 'Current Task'. And avoid duplicating code from 'Finished Tasks' and 'Finished Section of Current Task', such as repeated import of packages, reading data, etc. +Specifically, {guidance} +""" + + +class BasePlanner(BaseModel): + plan: Plan + working_memory: Memory = Field( + default_factory=Memory + ) # memory for working on each task, discarded each time a task is done + auto_run: bool = False + + def __init__(self, goal: str = "", plan: Plan = None, **kwargs): + plan = plan or Plan(goal=goal) + super().__init__(plan=plan, **kwargs) + + @property + def current_task(self): + return self.plan.current_task + + @property + def current_task_id(self): + return self.plan.current_task_id + + def get_useful_memories(self, task_exclude_field=None) -> list[Message]: + """find useful memories only to reduce context length and improve performance""" + user_requirement = self.plan.goal + context = self.plan.context + tasks = [task.model_dump(exclude=task_exclude_field) for task in self.plan.tasks] + tasks = json.dumps(tasks, indent=4, ensure_ascii=False) + current_task = self.plan.current_task.model_dump_json() if self.plan.current_task else {} + context = STRUCTURAL_CONTEXT.format( + user_requirement=user_requirement, context=context, tasks=tasks, current_task=current_task + ) + context_msg = [Message(content=context, role="user")] + + return context_msg + self.working_memory.get() + + async def update_plan(self, goal: str = "", max_tasks: int = 3, max_retries: int = 3): + pass + + async def process_task_result(self, task_result: TaskResult): + # ask for acceptance, users can other refuse and change tasks in the plan + pass + + async def confirm_task(self, task: Task, task_result: TaskResult, review: str): + pass + + def get_plan_status(self, exclude: List[str] = None) -> str: + # prepare components of a plan status + pass diff --git a/metagpt/core/tools/__init__.py b/metagpt/core/tools/__init__.py new file mode 100644 index 0000000000..1242f47adb --- /dev/null +++ b/metagpt/core/tools/__init__.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2023/4/29 15:35 +@Author : alexanderwu +@File : __init__.py +""" + +from metagpt.core.tools.tool_registry import TOOL_REGISTRY + +_ = TOOL_REGISTRY # Avoid pre-commit error + + +__all__ = ["TOOL_REGISTRY"] diff --git a/metagpt/tools/tool_data_type.py b/metagpt/core/tools/base.py similarity index 100% rename from metagpt/tools/tool_data_type.py rename to metagpt/core/tools/base.py diff --git a/metagpt/tools/tool_convert.py b/metagpt/core/tools/tool_convert.py similarity index 98% rename from metagpt/tools/tool_convert.py rename to metagpt/core/tools/tool_convert.py index a84cbeea07..561beefbf7 100644 --- a/metagpt/tools/tool_convert.py +++ b/metagpt/core/tools/tool_convert.py @@ -1,7 +1,7 @@ import ast import inspect -from metagpt.utils.parse_docstring import GoogleDocstringParser, remove_spaces +from metagpt.core.utils.parse_docstring import GoogleDocstringParser, remove_spaces PARSER = GoogleDocstringParser diff --git a/metagpt/core/tools/tool_recommend_base.py b/metagpt/core/tools/tool_recommend_base.py new file mode 100644 index 0000000000..8f2bca6848 --- /dev/null +++ b/metagpt/core/tools/tool_recommend_base.py @@ -0,0 +1,163 @@ +from __future__ import annotations + +import json +import traceback + +from pydantic import BaseModel, field_validator + +from metagpt.core.llm import LLM +from metagpt.core.logs import logger +from metagpt.core.prompts.role_zero import JSON_REPAIR_PROMPT +from metagpt.core.schema import Plan +from metagpt.core.tools import TOOL_REGISTRY +from metagpt.core.tools.base import Tool +from metagpt.core.tools.tool_registry import validate_tool_names +from metagpt.core.utils.common import CodeParser +from metagpt.core.utils.repair_llm_raw_output import RepairType, repair_llm_raw_output + +TOOL_INFO_PROMPT = """ +## Capabilities +- You can utilize pre-defined tools in any code lines from 'Available Tools' in the form of Python class or function. +- You can freely combine the use of any other public packages, like sklearn, numpy, pandas, etc.. + +## Available Tools: +Each tool is described in JSON format. When you call a tool, import the tool from its path first. +{tool_schemas} +""" + +TOOL_RECOMMENDATION_PROMPT = """ +## User Requirement: +{current_task} + +## Task +Recommend up to {topk} tools from 'Available Tools' that can help solve the 'User Requirement'. + +## Available Tools: +{available_tools} + +## Tool Selection and Instructions: +- Select tools most relevant to completing the 'User Requirement'. +- If you believe that no tools are suitable, indicate with an empty list. +- Only list the names of the tools, not the full schema of each tool. +- Ensure selected tools are listed in 'Available Tools'. +- Output a json list of tool names: +```json +["tool_name1", "tool_name2", ...] +``` +""" + + +class ToolRecommender(BaseModel): + """ + The default ToolRecommender: + 1. Recall: To be implemented in subclasses. Recall tools based on the given context and plan. + 2. Rank: Use LLM to select final candidates from recalled set. + """ + + tools: dict[str, Tool] = {} + force: bool = False # whether to forcedly recommend the specified tools + + @field_validator("tools", mode="before") + @classmethod + def validate_tools(cls, v: list[str]) -> dict[str, Tool]: + # If `v` is already a dictionary (e.g., during deserialization), return it as is. + if isinstance(v, dict): + return v + + # One can use special symbol [""] to indicate use of all registered tools + if v == [""]: + return TOOL_REGISTRY.get_all_tools() + else: + return validate_tool_names(v) + + async def recommend_tools( + self, context: str = "", plan: Plan = None, recall_topk: int = 20, topk: int = 5 + ) -> list[Tool]: + """ + Recommends a list of tools based on the given context and plan. The recommendation process includes two stages: recall from a large pool and rank the recalled tools to select the final set. + + Args: + context (str): The context for tool recommendation. + plan (Plan): The plan for tool recommendation. + recall_topk (int): The number of tools to recall in the initial step. + topk (int): The number of tools to return after rank as final recommendations. + + Returns: + list[Tool]: A list of recommended tools. + """ + + if not self.tools: + return [] + + if self.force or (not context and not plan): + # directly use what users have specified as result for forced recommendation; + # directly use the whole set if there is no useful information + return list(self.tools.values()) + + recalled_tools = await self.recall_tools(context=context, plan=plan, topk=recall_topk) + if not recalled_tools: + return [] + + ranked_tools = await self.rank_tools(recalled_tools=recalled_tools, context=context, plan=plan, topk=topk) + + logger.info(f"Recommended tools: \n{[tool.name for tool in ranked_tools]}") + + return ranked_tools + + async def get_recommended_tool_info(self, fixed: list[str] = None, **kwargs) -> str: + """ + Wrap recommended tools with their info in a string, which can be used directly in a prompt. + """ + recommended_tools = await self.recommend_tools(**kwargs) + if fixed: + recommended_tools.extend([self.tools[tool_name] for tool_name in fixed if tool_name in self.tools]) + if not recommended_tools: + return "" + tool_schemas = {tool.name: tool.schemas for tool in recommended_tools} + return TOOL_INFO_PROMPT.format(tool_schemas=tool_schemas) + + async def recall_tools(self, context: str = "", plan: Plan = None, topk: int = 20) -> list[Tool]: + """ + Retrieves a list of relevant tools from a large pool, based on the given context and plan. + """ + raise NotImplementedError + + async def rank_tools( + self, recalled_tools: list[Tool], context: str = "", plan: Plan = None, topk: int = 5 + ) -> list[Tool]: + """ + Default rank methods for a ToolRecommender. Use LLM to rank the recalled tools based on the given context, plan, and topk value. + """ + current_task = plan.current_task.instruction if plan else context + + available_tools = {tool.name: tool.schemas["description"] for tool in recalled_tools} + prompt = TOOL_RECOMMENDATION_PROMPT.format( + current_task=current_task, + available_tools=available_tools, + topk=topk, + ) + rsp = await LLM().aask(prompt, stream=False) + + try: + ranked_tools = CodeParser.parse_code(block=None, lang="json", text=rsp) + ranked_tools = json.loads( + repair_llm_raw_output(output=ranked_tools, req_keys=[None], repair_type=RepairType.JSON) + ) + except json.JSONDecodeError: + ranked_tools = await LLM().aask(msg=JSON_REPAIR_PROMPT.format(json_data=rsp)) + ranked_tools = json.loads(CodeParser.parse_code(block=None, lang="json", text=ranked_tools)) + except Exception: + tb = traceback.format_exc() + print(tb) + + # 为了对LLM不按格式生成进行容错 + if isinstance(ranked_tools, dict): + ranked_tools = list(ranked_tools.values())[0] + + if not isinstance(ranked_tools, list): + logger.warning(f"Invalid rank result: {ranked_tools}, will use the recalled tools instead.") + ranked_tools = list(available_tools.keys()) + + valid_tools = validate_tool_names(ranked_tools) + + return list(valid_tools.values())[:topk] diff --git a/metagpt/tools/tool_registry.py b/metagpt/core/tools/tool_registry.py similarity index 97% rename from metagpt/tools/tool_registry.py rename to metagpt/core/tools/tool_registry.py index 49820b458e..aae94374ab 100644 --- a/metagpt/tools/tool_registry.py +++ b/metagpt/core/tools/tool_registry.py @@ -15,13 +15,13 @@ from pydantic import BaseModel -from metagpt.const import TOOL_SCHEMA_PATH -from metagpt.logs import logger -from metagpt.tools.tool_convert import ( +from metagpt.core.const import TOOL_SCHEMA_PATH +from metagpt.core.logs import logger +from metagpt.core.tools.base import Tool, ToolSchema +from metagpt.core.tools.tool_convert import ( convert_code_to_tool_schema, convert_code_to_tool_schema_ast, ) -from metagpt.tools.tool_data_type import Tool, ToolSchema class ToolRegistry(BaseModel): diff --git a/metagpt/utils/async_helper.py b/metagpt/core/utils/async_helper.py similarity index 100% rename from metagpt/utils/async_helper.py rename to metagpt/core/utils/async_helper.py diff --git a/metagpt/utils/common.py b/metagpt/core/utils/common.py similarity index 99% rename from metagpt/utils/common.py rename to metagpt/core/utils/common.py index cf2aa58bab..85584421a1 100644 --- a/metagpt/utils/common.py +++ b/metagpt/core/utils/common.py @@ -45,10 +45,10 @@ from pydantic_core import to_jsonable_python from tenacity import RetryCallState, RetryError, _utils -from metagpt.const import MARKDOWN_TITLE_PREFIX, MESSAGE_ROUTE_TO_ALL -from metagpt.logs import logger -from metagpt.utils.exceptions import handle_exception -from metagpt.utils.json_to_markdown import json_to_markdown +from metagpt.core.const import MARKDOWN_TITLE_PREFIX, MESSAGE_ROUTE_TO_ALL +from metagpt.core.logs import logger +from metagpt.core.utils.exceptions import handle_exception +from metagpt.core.utils.json_to_markdown import json_to_markdown def check_cmd_exists(command) -> int: diff --git a/metagpt/utils/cost_manager.py b/metagpt/core/utils/cost_manager.py similarity index 97% rename from metagpt/utils/cost_manager.py rename to metagpt/core/utils/cost_manager.py index 05df1e09a0..d1d9a331ef 100644 --- a/metagpt/utils/cost_manager.py +++ b/metagpt/core/utils/cost_manager.py @@ -11,8 +11,8 @@ from pydantic import BaseModel -from metagpt.logs import logger -from metagpt.utils.token_counter import FIREWORKS_GRADE_TOKEN_COSTS, TOKEN_COSTS +from metagpt.core.logs import logger +from metagpt.core.utils.token_counter import FIREWORKS_GRADE_TOKEN_COSTS, TOKEN_COSTS class Costs(NamedTuple): diff --git a/metagpt/utils/custom_decoder.py b/metagpt/core/utils/custom_decoder.py similarity index 100% rename from metagpt/utils/custom_decoder.py rename to metagpt/core/utils/custom_decoder.py diff --git a/metagpt/utils/exceptions.py b/metagpt/core/utils/exceptions.py similarity index 98% rename from metagpt/utils/exceptions.py rename to metagpt/core/utils/exceptions.py index 70ed459106..c92761a13d 100644 --- a/metagpt/utils/exceptions.py +++ b/metagpt/core/utils/exceptions.py @@ -12,7 +12,7 @@ import traceback from typing import Any, Callable, Tuple, Type, TypeVar, Union -from metagpt.logs import logger +from metagpt.core.logs import logger ReturnType = TypeVar("ReturnType") diff --git a/metagpt/utils/human_interaction.py b/metagpt/core/utils/human_interaction.py similarity index 95% rename from metagpt/utils/human_interaction.py rename to metagpt/core/utils/human_interaction.py index 3b245cac86..7e30e832fb 100644 --- a/metagpt/utils/human_interaction.py +++ b/metagpt/core/utils/human_interaction.py @@ -7,8 +7,8 @@ from pydantic import BaseModel -from metagpt.logs import logger -from metagpt.utils.common import import_class +from metagpt.core.logs import logger +from metagpt.core.utils.common import import_class class HumanInteraction(object): @@ -37,7 +37,7 @@ def check_input_type(self, input_str: str, req_type: Type) -> Tuple[bool, Any]: except Exception: return False, None - actionnode_class = import_class("ActionNode", "metagpt.actions.action_node") # avoid circular import + actionnode_class = import_class("ActionNode", "metagpt.core.actions.action_node") # avoid circular import tmp_key = "tmp" tmp_cls = actionnode_class.create_model_class(class_name=tmp_key.upper(), mapping={tmp_key: (req_type, ...)}) try: diff --git a/metagpt/utils/json_to_markdown.py b/metagpt/core/utils/json_to_markdown.py similarity index 100% rename from metagpt/utils/json_to_markdown.py rename to metagpt/core/utils/json_to_markdown.py diff --git a/metagpt/core/utils/parse_docstring.py b/metagpt/core/utils/parse_docstring.py new file mode 100644 index 0000000000..5df4d66712 --- /dev/null +++ b/metagpt/core/utils/parse_docstring.py @@ -0,0 +1,43 @@ +import re +from typing import Tuple + + +def remove_spaces(text): + return re.sub(r"\s+", " ", text).strip() if text else "" + + +class DocstringParser: + @staticmethod + def parse(docstring: str) -> Tuple[str, str]: + """Parse the docstring and return the overall description and the parameter description. + + Args: + docstring (str): The docstring to be parsed. + + Returns: + Tuple[str, str]: A tuple of (overall description, parameter description) + """ + + +class reSTDocstringParser(DocstringParser): + """A parser for reStructuredText (reST) docstring""" + + +class GoogleDocstringParser(DocstringParser): + """A parser for Google-stype docstring""" + + @staticmethod + def parse(docstring: str) -> Tuple[str, str]: + if not docstring: + return "", "" + + docstring = remove_spaces(docstring) + + if "Args:" in docstring: + overall_desc, param_desc = docstring.split("Args:") + param_desc = "Args:" + param_desc + else: + overall_desc = docstring + param_desc = "" + + return overall_desc, param_desc diff --git a/metagpt/utils/repair_llm_raw_output.py b/metagpt/core/utils/repair_llm_raw_output.py similarity index 99% rename from metagpt/utils/repair_llm_raw_output.py rename to metagpt/core/utils/repair_llm_raw_output.py index 5c57693f74..1a3265615c 100644 --- a/metagpt/utils/repair_llm_raw_output.py +++ b/metagpt/core/utils/repair_llm_raw_output.py @@ -9,9 +9,9 @@ import regex as re from tenacity import RetryCallState, retry, stop_after_attempt, wait_fixed -from metagpt.config2 import Config -from metagpt.logs import logger -from metagpt.utils.custom_decoder import CustomDecoder +from metagpt.core.config2 import Config +from metagpt.core.logs import logger +from metagpt.core.utils.custom_decoder import CustomDecoder class RepairType(Enum): diff --git a/metagpt/utils/report.py b/metagpt/core/utils/report.py similarity index 98% rename from metagpt/utils/report.py rename to metagpt/core/utils/report.py index 0ae19beba8..bf556fb1ae 100644 --- a/metagpt/utils/report.py +++ b/metagpt/core/utils/report.py @@ -12,11 +12,11 @@ from playwright.sync_api import Page as SyncPage from pydantic import BaseModel, Field, PrivateAttr -from metagpt.const import METAGPT_REPORTER_DEFAULT_URL -from metagpt.logs import create_llm_stream_queue, get_llm_stream_queue +from metagpt.core.const import METAGPT_REPORTER_DEFAULT_URL +from metagpt.core.logs import create_llm_stream_queue, get_llm_stream_queue if typing.TYPE_CHECKING: - from metagpt.roles.role import Role + from metagpt.core.roles.role import Role try: import requests_unixsocket as requests diff --git a/metagpt/utils/sanitize.py b/metagpt/core/utils/sanitize.py similarity index 100% rename from metagpt/utils/sanitize.py rename to metagpt/core/utils/sanitize.py diff --git a/metagpt/core/utils/serialize.py b/metagpt/core/utils/serialize.py new file mode 100644 index 0000000000..390dc75d94 --- /dev/null +++ b/metagpt/core/utils/serialize.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# @Desc : the implement of serialization and deserialization + +import copy +import pickle + +from metagpt.core.utils.common import import_class + + +def actionoutout_schema_to_mapping(schema: dict) -> dict: + """ + directly traverse the `properties` in the first level. + schema structure likes + ``` + { + "title":"prd", + "type":"object", + "properties":{ + "Original Requirements":{ + "title":"Original Requirements", + "type":"string" + }, + }, + "required":[ + "Original Requirements", + ] + } + ``` + """ + mapping = dict() + for field, property in schema["properties"].items(): + if property["type"] == "string": + mapping[field] = (str, ...) + elif property["type"] == "array" and property["items"]["type"] == "string": + mapping[field] = (list[str], ...) + elif property["type"] == "array" and property["items"]["type"] == "array": + # here only consider the `list[list[str]]` situation + mapping[field] = (list[list[str]], ...) + return mapping + + +def actionoutput_mapping_to_str(mapping: dict) -> dict: + new_mapping = {} + for key, value in mapping.items(): + new_mapping[key] = str(value) + return new_mapping + + +def actionoutput_str_to_mapping(mapping: dict) -> dict: + new_mapping = {} + for key, value in mapping.items(): + if value == "(, Ellipsis)": + new_mapping[key] = (str, ...) + else: + new_mapping[key] = eval(value) # `"'(list[str], Ellipsis)"` to `(list[str], ...)` + return new_mapping + + +def serialize_message(message: "Message"): + message_cp = copy.deepcopy(message) # avoid `instruct_content` value update by reference + ic = message_cp.instruct_content + if ic: + # model create by pydantic create_model like `pydantic.main.prd`, can't pickle.dump directly + schema = ic.model_json_schema() + mapping = actionoutout_schema_to_mapping(schema) + + message_cp.instruct_content = {"class": schema["title"], "mapping": mapping, "value": ic.model_dump()} + msg_ser = pickle.dumps(message_cp) + + return msg_ser + + +def deserialize_message(message_ser: str) -> "Message": + message = pickle.loads(message_ser) + if message.instruct_content: + ic = message.instruct_content + actionnode_class = import_class("ActionNode", "metagpt.core.actions.action_node") # avoid circular import + ic_obj = actionnode_class.create_model_class(class_name=ic["class"], mapping=ic["mapping"]) + ic_new = ic_obj(**ic["value"]) + message.instruct_content = ic_new + + return message diff --git a/metagpt/utils/token_counter.py b/metagpt/core/utils/token_counter.py similarity index 99% rename from metagpt/utils/token_counter.py rename to metagpt/core/utils/token_counter.py index 80bdacae56..a83b5baa7c 100644 --- a/metagpt/utils/token_counter.py +++ b/metagpt/core/utils/token_counter.py @@ -13,7 +13,7 @@ import anthropic import tiktoken -from metagpt.logs import logger +from metagpt.core.logs import logger TOKEN_COSTS = { "anthropic/claude-3.5-sonnet": {"prompt": 0.003, "completion": 0.015}, diff --git a/metagpt/utils/yaml_model.py b/metagpt/core/utils/yaml_model.py similarity index 100% rename from metagpt/utils/yaml_model.py rename to metagpt/core/utils/yaml_model.py diff --git a/metagpt/document.py b/metagpt/document.py index 4a8bb68d5c..8bdb449984 100644 --- a/metagpt/document.py +++ b/metagpt/document.py @@ -17,7 +17,7 @@ from pydantic import BaseModel, ConfigDict, Field from tqdm import tqdm -from metagpt.logs import logger +from metagpt.core.logs import logger from metagpt.repo_parser import RepoParser diff --git a/metagpt/document_store/faiss_store.py b/metagpt/document_store/faiss_store.py index b196bef270..016c10ca66 100644 --- a/metagpt/document_store/faiss_store.py +++ b/metagpt/document_store/faiss_store.py @@ -16,9 +16,9 @@ from llama_index.core.storage import StorageContext from llama_index.vector_stores.faiss import FaissVectorStore +from metagpt.core.logs import logger from metagpt.document import IndexableDocument from metagpt.document_store.base_store import LocalStore -from metagpt.logs import logger from metagpt.utils.embedding import get_embedding diff --git a/metagpt/environment/__init__.py b/metagpt/environment/__init__.py index b1d77b3a83..3c1e652b6b 100644 --- a/metagpt/environment/__init__.py +++ b/metagpt/environment/__init__.py @@ -3,11 +3,6 @@ # @Desc : from metagpt.environment.base_env import Environment - -# 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"] +__all__ = ["SoftwareEnv", "Environment"] diff --git a/metagpt/environment/android/__init__.py b/metagpt/environment/android/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/environment/android/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : diff --git a/metagpt/environment/android/android_env.py b/metagpt/environment/android/android_env.py deleted file mode 100644 index 66672d219e..0000000000 --- a/metagpt/environment/android/android_env.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : MG Android Env - -from pydantic import Field - -from metagpt.environment.android.android_ext_env import AndroidExtEnv -from metagpt.environment.base_env import Environment - - -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 deleted file mode 100644 index 63a421fa2f..0000000000 --- a/metagpt/environment/android/android_ext_env.py +++ /dev/null @@ -1,375 +0,0 @@ -#!/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/const.py b/metagpt/environment/android/const.py deleted file mode 100644 index 8811289bf0..0000000000 --- a/metagpt/environment/android/const.py +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : - -# For Android Assistant Agent -ADB_EXEC_FAIL = "FAILED" diff --git a/metagpt/environment/android/env_space.py b/metagpt/environment/android/env_space.py deleted file mode 100644 index 8225f01278..0000000000 --- a/metagpt/environment/android/env_space.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/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.base.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 deleted file mode 100644 index 9158d5f626..0000000000 --- a/metagpt/environment/android/grounding_dino_config.py +++ /dev/null @@ -1,43 +0,0 @@ -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 deleted file mode 100644 index e8886b540a..0000000000 --- a/metagpt/environment/android/text_icon_localization.py +++ /dev/null @@ -1,368 +0,0 @@ -# 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/base_env.py b/metagpt/environment/base_env.py index 03a4760c91..8765c20ef5 100644 --- a/metagpt/environment/base_env.py +++ b/metagpt/environment/base_env.py @@ -11,18 +11,19 @@ from gymnasium.core import ActType, ObsType from pydantic import BaseModel, ConfigDict, Field, SerializeAsAny, model_validator -from metagpt.base import BaseEnvironment, BaseRole -from metagpt.base.base_env_space import BaseEnvAction, BaseEnvObsParams -from metagpt.context import Context +from metagpt.core.base import BaseEnvironment +from metagpt.core.base.base_env_space import BaseEnvAction, BaseEnvObsParams +from metagpt.core.context import Context +from metagpt.core.logs import logger +from metagpt.core.memory import Memory +from metagpt.core.roles import Role +from metagpt.core.schema import Message +from metagpt.core.utils.common import get_function_schema, is_coroutine_func, is_send_to from metagpt.environment.api.env_api import ( EnvAPIAbstract, ReadAPIRegistry, WriteAPIRegistry, ) -from metagpt.logs import logger -from metagpt.memory import Memory -from metagpt.schema import Message -from metagpt.utils.common import get_function_schema, is_coroutine_func, is_send_to from metagpt.utils.git_repository import GitRepository @@ -129,8 +130,8 @@ class Environment(ExtEnv): model_config = ConfigDict(arbitrary_types_allowed=True) desc: str = Field(default="") # 环境描述 - roles: dict[str, SerializeAsAny[BaseRole]] = Field(default_factory=dict, validate_default=True) - member_addrs: Dict[BaseRole, Set] = Field(default_factory=dict, exclude=True) + roles: dict[str, SerializeAsAny[Role]] = Field(default_factory=dict, validate_default=True) + member_addrs: Dict[Role, Set] = Field(default_factory=dict, exclude=True) history: Memory = Field(default_factory=Memory) # For debug context: Context = Field(default_factory=Context, exclude=True) @@ -153,7 +154,7 @@ def init_roles(self): self.add_roles(self.roles.values()) return self - def add_role(self, role: BaseRole): + def add_role(self, role: Role): """增加一个在当前环境的角色 Add a role in the current environment """ @@ -161,7 +162,7 @@ def add_role(self, role: BaseRole): role.set_env(self) role.context = self.context - def add_roles(self, roles: Iterable[BaseRole]): + def add_roles(self, roles: Iterable[Role]): """增加一批在当前环境的角色 Add a batch of characters in the current environment """ @@ -210,13 +211,13 @@ async def run(self, k=1): await asyncio.gather(*futures) logger.debug(f"is idle: {self.is_idle}") - def get_roles(self) -> dict[str, BaseRole]: + def get_roles(self) -> dict[str, Role]: """获得环境内的所有角色 Process all Role runs at once """ return self.roles - def get_role(self, name: str) -> BaseRole: + def get_role(self, name: str) -> Role: """获得环境内的指定角色 get all the environment roles """ diff --git a/metagpt/environment/mgx/mgx_env.py b/metagpt/environment/mgx/mgx_env.py index a8fc0df9f4..f27959927a 100644 --- a/metagpt/environment/mgx/mgx_env.py +++ b/metagpt/environment/mgx/mgx_env.py @@ -1,11 +1,11 @@ from __future__ import annotations -from metagpt.const import AGENT, IMAGES, MESSAGE_ROUTE_TO_ALL, TEAMLEADER_NAME +from metagpt.core.const import AGENT, IMAGES, MESSAGE_ROUTE_TO_ALL, TEAMLEADER_NAME +from metagpt.core.logs import get_human_input +from metagpt.core.roles import Role +from metagpt.core.schema import Message, SerializationMixin +from metagpt.core.utils.common import extract_and_encode_images from metagpt.environment.base_env import Environment -from metagpt.logs import get_human_input -from metagpt.roles import Role -from metagpt.schema import Message, SerializationMixin -from metagpt.utils.common import extract_and_encode_images class MGXEnv(Environment, SerializationMixin): diff --git a/metagpt/environment/minecraft/__init__.py b/metagpt/environment/minecraft/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/environment/minecraft/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : diff --git a/metagpt/environment/minecraft/const.py b/metagpt/environment/minecraft/const.py deleted file mode 100644 index 8ac15decc8..0000000000 --- a/metagpt/environment/minecraft/const.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : - -from metagpt.const import METAGPT_ROOT - -# For Minecraft Game Agent -MC_CKPT_DIR = METAGPT_ROOT / "data/minecraft/ckpt" -MC_LOG_DIR = METAGPT_ROOT / "logs" -MC_DEFAULT_WARMUP = { - "context": 15, - "biome": 10, - "time": 15, - "nearby_blocks": 0, - "other_blocks": 10, - "nearby_entities": 5, - "health": 15, - "hunger": 15, - "position": 0, - "equipment": 0, - "inventory": 0, - "optional_inventory_items": 7, - "chests": 0, - "completed_tasks": 0, - "failed_tasks": 0, -} -MC_CURRICULUM_OB = [ - "context", - "biome", - "time", - "nearby_blocks", - "other_blocks", - "nearby_entities", - "health", - "hunger", - "position", - "equipment", - "inventory", - "chests", - "completed_tasks", - "failed_tasks", -] -MC_CORE_INVENTORY_ITEMS = r".*_log|.*_planks|stick|crafting_table|furnace" -r"|cobblestone|dirt|coal|.*_pickaxe|.*_sword|.*_axe", # curriculum_agent: only show these items in inventory before optional_inventory_items reached in warm up diff --git a/metagpt/environment/minecraft/minecraft_env.py b/metagpt/environment/minecraft/minecraft_env.py deleted file mode 100644 index 9c42949a6f..0000000000 --- a/metagpt/environment/minecraft/minecraft_env.py +++ /dev/null @@ -1,388 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : MG Minecraft Env -# refs to `voyager voyager.py` - -import json -import re -import time -from typing import Any, Iterable - -from llama_index.vector_stores.chroma import ChromaVectorStore -from pydantic import ConfigDict, Field - -from metagpt.config2 import Config -from metagpt.environment.base_env import Environment -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(MinecraftExtEnv, Environment): - """MinecraftEnv, including shared memory of cache and information between roles""" - - model_config = ConfigDict(arbitrary_types_allowed=True) - - event: dict[str, Any] = Field(default_factory=dict) - current_task: str = Field(default="Mine 1 wood log") - task_execution_time: float = Field(default=float) - context: str = Field(default="You can mine one of oak, birch, spruce, jungle, acacia, dark oak, or mangrove logs.") - code: str = Field(default="") - program_code: str = Field(default="") # write in skill/code/*.js - program_name: str = Field(default="") - critique: str = Field(default="") - skills: dict = Field(default_factory=dict) # for skills.json - retrieve_skills: list[str] = Field(default_factory=list) - event_summary: str = Field(default="") - - qa_cache: dict[str, str] = Field(default_factory=dict) - completed_tasks: list[str] = Field(default_factory=list) # Critique things - failed_tasks: list[str] = Field(default_factory=list) - - skill_desp: str = Field(default="") - - chest_memory: dict[str, Any] = Field(default_factory=dict) # eg: {'(1344, 64, 1381)': 'Unknown'} - chest_observation: str = Field(default="") # eg: "Chests: None\n\n" - - runtime_status: bool = False # equal to action execution status: success or failed - - vectordb: ChromaVectorStore = Field(default_factory=ChromaVectorStore) - - qa_cache_questions_vectordb: ChromaVectorStore = Field(default_factory=ChromaVectorStore) - - @property - def progress(self): - # return len(self.completed_tasks) + 10 # Test only - return len(self.completed_tasks) - - @property - def programs(self): - programs = "" - if self.code == "": - return programs # TODO: maybe fix 10054 now, a better way is isolating env.step() like voyager - for skill_name, entry in self.skills.items(): - programs += f"{entry['code']}\n\n" - for primitives in load_mc_skills_code(): # TODO add skills_dir - programs += f"{primitives}\n\n" - return programs - - def set_mc_port(self, mc_port): - super().set_mc_port(mc_port) - self.set_mc_resume() - - def set_mc_resume(self): - self.qa_cache_questions_vectordb = ChromaVectorStore( - collection_name="qa_cache_questions_vectordb", - persist_dir=f"{MC_CKPT_DIR}/curriculum/vectordb", - ) - - self.vectordb = ChromaVectorStore( - collection_name="skill_vectordb", - persist_dir=f"{MC_CKPT_DIR}/skill/vectordb", - ) - - if Config.default().resume: - logger.info(f"Loading Action Developer from {MC_CKPT_DIR}/action") - self.chest_memory = read_json_file(f"{MC_CKPT_DIR}/action/chest_memory.json") - - logger.info(f"Loading Curriculum Agent from {MC_CKPT_DIR}/curriculum") - self.completed_tasks = read_json_file(f"{MC_CKPT_DIR}/curriculum/completed_tasks.json") - self.failed_tasks = read_json_file(f"{MC_CKPT_DIR}/curriculum/failed_tasks.json") - - logger.info(f"Loading Skill Manager from {MC_CKPT_DIR}/skill\033[0m") - self.skills = read_json_file(f"{MC_CKPT_DIR}/skill/skills.json") - - logger.info(f"Loading Qa Cache from {MC_CKPT_DIR}/curriculum\033[0m") - self.qa_cache = read_json_file(f"{MC_CKPT_DIR}/curriculum/qa_cache.json") - - if self.vectordb._collection.count() == 0: - logger.info(self.vectordb._collection.count()) - # Set vdvs for skills & qa_cache - skill_desps = [skill["description"] for program_name, skill in self.skills.items()] - program_names = [program_name for program_name, skill in self.skills.items()] - metadatas = [{"name": program_name} for program_name in program_names] - # add vectordb from file - self.vectordb.add_texts( - texts=skill_desps, - ids=program_names, - metadatas=metadatas, - ) - self.vectordb.persist() - - logger.info(self.qa_cache_questions_vectordb._collection.count()) - if self.qa_cache_questions_vectordb._collection.count() == 0: - questions = [question for question, answer in self.qa_cache.items()] - - self.qa_cache_questions_vectordb.add_texts(texts=questions) - - self.qa_cache_questions_vectordb.persist() - - logger.info( - f"INIT_CHECK: There are {self.vectordb._collection.count()} skills in vectordb and {len(self.skills)} skills in skills.json." - ) - # Check if Skill Manager's vectordb right using - assert self.vectordb._collection.count() == len(self.skills), ( - f"Skill Manager's vectordb is not synced with skills.json.\n" - f"There are {self.vectordb._collection.count()} skills in vectordb but {len(self.skills)} skills in skills.json.\n" - f"Did you set resume=False when initializing the manager?\n" - f"You may need to manually delete the vectordb directory for running from scratch." - ) - - logger.info( - f"INIT_CHECK: There are {self.qa_cache_questions_vectordb._collection.count()} qa_cache in vectordb and {len(self.qa_cache)} questions in qa_cache.json." - ) - assert self.qa_cache_questions_vectordb._collection.count() == len(self.qa_cache), ( - f"Curriculum Agent's qa cache question vectordb is not synced with qa_cache.json.\n" - f"There are {self.qa_cache_questions_vectordb._collection.count()} questions in vectordb " - f"but {len(self.qa_cache)} questions in qa_cache.json.\n" - f"Did you set resume=False when initializing the agent?\n" - f"You may need to manually delete the qa cache question vectordb directory for running from scratch.\n" - ) - - def register_roles(self, roles: Iterable["Minecraft"]): - for role in roles: - role.set_memory(self) - - def update_event(self, event: dict): - if self.event == event: - return - self.event = event - self.update_chest_memory(event) - self.update_chest_observation() - # self.event_summary = self.summarize_chatlog(event) - - def update_task(self, task: str): - self.current_task = task - - def update_context(self, context: str): - self.context = context - - def update_program_code(self, program_code: str): - self.program_code = program_code - - def update_code(self, code: str): - self.code = code # action_developer.gen_action_code to HERE - - def update_program_name(self, program_name: str): - self.program_name = program_name - - def update_critique(self, critique: str): - self.critique = critique # critic_agent.check_task_success to HERE - - def append_skill(self, skill: dict): - self.skills[self.program_name] = skill # skill_manager.retrieve_skills to HERE - - def update_retrieve_skills(self, retrieve_skills: list): - self.retrieve_skills = retrieve_skills - - def update_skill_desp(self, skill_desp: str): - self.skill_desp = skill_desp - - async def update_qa_cache(self, qa_cache: dict): - self.qa_cache = qa_cache - - def update_chest_memory(self, events: dict): - """ - Input: events: Dict - Result: self.chest_memory update & save to json - """ - nearbyChests = events[-1][1]["nearbyChests"] - for position, chest in nearbyChests.items(): - if position in self.chest_memory: - if isinstance(chest, dict): - self.chest_memory[position] = chest - if chest == "Invalid": - logger.info(f"Action Developer removing chest {position}: {chest}") - self.chest_memory.pop(position) - else: - if chest != "Invalid": - logger.info(f"Action Developer saving chest {position}: {chest}") - self.chest_memory[position] = chest - - write_json_file(f"{MC_CKPT_DIR}/action/chest_memory.json", self.chest_memory) - - def update_chest_observation(self): - """ - update chest_memory to chest_observation. - Refer to @ https://github.com/MineDojo/Voyager/blob/main/voyager/agents/action.py - """ - - chests = [] - for chest_position, chest in self.chest_memory.items(): - if isinstance(chest, dict) and len(chest) > 0: - chests.append(f"{chest_position}: {chest}") - for chest_position, chest in self.chest_memory.items(): - if isinstance(chest, dict) and len(chest) == 0: - chests.append(f"{chest_position}: Empty") - for chest_position, chest in self.chest_memory.items(): - if isinstance(chest, str): - assert chest == "Unknown" - chests.append(f"{chest_position}: Unknown items inside") - assert len(chests) == len(self.chest_memory) - if chests: - chests = "\n".join(chests) - self.chest_observation = f"Chests:\n{chests}\n\n" - else: - self.chest_observation = "Chests: None\n\n" - - def summarize_chatlog(self, events): - def filter_item(message: str): - craft_pattern = r"I cannot make \w+ because I need: (.*)" - craft_pattern2 = r"I cannot make \w+ because there is no crafting table nearby" - mine_pattern = r"I need at least a (.*) to mine \w+!" - if re.match(craft_pattern, message): - self.event_summary = re.match(craft_pattern, message).groups()[0] - elif re.match(craft_pattern2, message): - self.event_summary = "a nearby crafting table" - elif re.match(mine_pattern, message): - self.event_summary = re.match(mine_pattern, message).groups()[0] - else: - self.event_summary = "" - return self.event_summary - - chatlog = set() - for event_type, event in events: - if event_type == "onChat": - item = filter_item(event["onChat"]) - if item: - chatlog.add(item) - self.event_summary = "I also need " + ", ".join(chatlog) + "." if chatlog else "" - - def reset_block_info(self): - # revert all the placing event in the last step - pass - - def update_exploration_progress(self, success: bool): - """ - Split task into completed_tasks or failed_tasks - Args: info = { - "task": self.task, - "success": success, - "conversations": self.conversations, - } - """ - self.runtime_status = success - task = self.current_task - if task.startswith("Deposit useless items into the chest at"): - return - if success: - logger.info(f"Completed task {task}.") - self.completed_tasks.append(task) - else: - logger.info(f"Failed to complete task {task}. Skipping to next task.") - self.failed_tasks.append(task) - # when not success, below to update event! - # revert all the placing event in the last step - blocks = [] - positions = [] - for event_type, event in self.event: - if event_type == "onSave" and event["onSave"].endswith("_placed"): - block = event["onSave"].split("_placed")[0] - position = event["status"]["position"] - blocks.append(block) - positions.append(position) - new_events = self._step( - f"await givePlacedItemBack(bot, {json.dumps(blocks)}, {json.dumps(positions)})", - programs=self.programs, - ) - self.event[-1][1]["inventory"] = new_events[-1][1]["inventory"] - self.event[-1][1]["voxels"] = new_events[-1][1]["voxels"] - - self.save_sorted_tasks() - - def save_sorted_tasks(self): - updated_completed_tasks = [] - # record repeated failed tasks - updated_failed_tasks = self.failed_tasks - # dedup but keep order - for task in self.completed_tasks: - if task not in updated_completed_tasks: - updated_completed_tasks.append(task) - - # remove completed tasks from failed tasks - for task in updated_completed_tasks: - while task in updated_failed_tasks: - updated_failed_tasks.remove(task) - - self.completed_tasks = updated_completed_tasks - self.failed_tasks = updated_failed_tasks - - # dump to json - write_json_file(f"{MC_CKPT_DIR}/curriculum/completed_tasks.json", self.completed_tasks) - write_json_file(f"{MC_CKPT_DIR}/curriculum/failed_tasks.json", self.failed_tasks) - - async def on_event_retrieve(self, *args): - """ - Retrieve Minecraft events. - - Returns: - list: A list of Minecraft events. - - Raises: - Exception: If there is an issue retrieving events. - """ - try: - self._reset( - options={ - "mode": "soft", - "wait_ticks": 20, - } - ) - # 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}');") - 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( - options={ - "mode": "hard", - "wait_ticks": 20, - "inventory": self.event[-1][1]["inventory"], - "equipment": self.event[-1][1]["status"]["equipment"], - "position": self.event[-1][1]["status"]["position"], - } - ) - self.update_event(events) - logger.error(f"Failed to retrieve Minecraft events: {str(e)}") - return events - - async def on_event_execute(self, *args): - """ - Execute Minecraft events. - - This function is used to obtain events from the Minecraft environment. Check the implementation in - the 'voyager/env/bridge.py step()' function to capture events generated within the game. - - Returns: - list: A list of Minecraft events. - - Raises: - Exception: If there is an issue retrieving events. - """ - try: - events = self._step( - code=self.code, - programs=self.programs, - ) - 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( - options={ - "mode": "hard", - "wait_ticks": 20, - "inventory": self.event[-1][1]["inventory"], - "equipment": self.event[-1][1]["status"]["equipment"], - "position": self.event[-1][1]["status"]["position"], - } - ) - self.update_event(events) - logger.error(f"Failed to execute Minecraft events: {str(e)}") - return events diff --git a/metagpt/environment/minecraft/minecraft_ext_env.py b/metagpt/environment/minecraft/minecraft_ext_env.py deleted file mode 100644 index fb43e97c9e..0000000000 --- a/metagpt/environment/minecraft/minecraft_ext_env.py +++ /dev/null @@ -1,195 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : The Minecraft external environment to integrate with Minecraft game -# refs to `voyager bridge.py` - -import json -import time -from typing import Any, Optional - -import requests -from pydantic import ConfigDict, Field, model_validator - -from metagpt.base.base_env_space import BaseEnvAction, BaseEnvObsParams -from metagpt.environment.base_env import ExtEnv, mark_as_writeable -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.process_monitor import SubprocessMonitor -from metagpt.logs import logger - - -class MinecraftExtEnv(ExtEnv): - model_config = ConfigDict(arbitrary_types_allowed=True) - - mc_port: Optional[int] = Field(default=None) - server_host: str = Field(default="http://127.0.0.1") - server_port: str = Field(default=3000) - request_timeout: int = Field(default=600) - - mineflayer: Optional[SubprocessMonitor] = Field(default=None, validate_default=True) - - has_reset: bool = Field(default=False) - reset_options: Optional[dict] = Field(default=None) - connected: bool = Field(default=False) - 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}" - - @model_validator(mode="after") - def _post_init_ext_env(self): - if not self.mineflayer: - self.mineflayer = SubprocessMonitor( - commands=[ - "node", - METAGPT_ROOT.joinpath("metagpt", "environment", "minecraft", "mineflayer", "index.js"), - str(self.server_port), - ], - name="mineflayer", - ready_match=r"Server started on port (\d+)", - ) - if not self.warm_up: - warm_up = MC_DEFAULT_WARMUP - if "optional_inventory_items" in warm_up: - assert MC_CORE_INVENTORY_ITEMS is not None - # self.core_inv_items_regex = re.compile(MC_CORE_INVENTORY_ITEMS) - self.warm_up["optional_inventory_items"] = warm_up["optional_inventory_items"] - else: - self.warm_up["optional_inventory_items"] = 0 - for key in MC_CURRICULUM_OB: - self.warm_up[key] = warm_up.get(key, MC_DEFAULT_WARMUP[key]) - self.warm_up["nearby_blocks"] = 0 - self.warm_up["inventory"] = 0 - self.warm_up["completed_tasks"] = 0 - self.warm_up["failed_tasks"] = 0 - - # init ckpt sub-forders - MC_CKPT_DIR.joinpath("curriculum/vectordb").mkdir(parents=True, exist_ok=True) - MC_CKPT_DIR.joinpath("action").mkdir(exist_ok=True) - MC_CKPT_DIR.joinpath("skill/code").mkdir(parents=True, exist_ok=True) - MC_CKPT_DIR.joinpath("skill/description").mkdir(exist_ok=True) - MC_CKPT_DIR.joinpath("skill/vectordb").mkdir(exist_ok=True) - - def set_mc_port(self, mc_port: int): - self.mc_port = mc_port - - @mark_as_writeable - def close(self) -> bool: - self.unpause() - if self.connected: - res = requests.post(f"{self.server}/stop") - if res.status_code == 200: - self.connected = False - self.mineflayer.stop() - return not self.connected - - @mark_as_writeable - def check_process(self) -> dict: - retry = 0 - while not self.mineflayer.is_running: - logger.info("Mineflayer process has exited, restarting") - self.mineflayer.run() - if not self.mineflayer.is_running: - if retry > 3: - logger.error("Mineflayer process failed to start") - raise {} - else: - retry += 1 - continue - logger.info(self.mineflayer.ready_line) - res = requests.post( - f"{self.server}/start", - json=self.reset_options, - timeout=self.request_timeout, - ) - if res.status_code != 200: - self.mineflayer.stop() - logger.error(f"Minecraft server reply with code {res.status_code}") - raise {} - return res.json() - - @mark_as_writeable - def _reset(self, *, seed=None, options=None) -> dict: - if options is None: - options = {} - if options.get("inventory", {}) and options.get("mode", "hard") != "hard": - logger.error("inventory can only be set when options is hard") - raise {} - - self.reset_options = { - "port": self.mc_port, - "reset": options.get("mode", "hard"), - "inventory": options.get("inventory", {}), - "equipment": options.get("equipment", []), - "spread": options.get("spread", False), - "waitTicks": options.get("wait_ticks", 5), - "position": options.get("position", None), - } - - self.unpause() - self.mineflayer.stop() - time.sleep(1) # wait for mineflayer to exit - - returned_data = self.check_process() - self.has_reset = True - self.connected = True - # All the reset in step will be soft - self.reset_options["reset"] = "soft" - self.pause() - return json.loads(returned_data) - - @mark_as_writeable - def _step(self, code: str, programs: str = "") -> dict: - if not self.has_reset: - raise RuntimeError("Environment has not been reset yet") - self.check_process() - self.unpause() - data = { - "code": code, - "programs": programs, - } - res = requests.post(f"{self.server}/step", json=data, timeout=self.request_timeout) - if res.status_code != 200: - raise RuntimeError("Failed to step Minecraft server") - returned_data = res.json() - self.pause() - return json.loads(returned_data) - - @mark_as_writeable - def pause(self) -> bool: - if self.mineflayer.is_running and not self.server_paused: - res = requests.post(f"{self.server}/pause") - if res.status_code == 200: - self.server_paused = True - return self.server_paused - - @mark_as_writeable - def unpause(self) -> bool: - if self.mineflayer.is_running and self.server_paused: - res = requests.post(f"{self.server}/pause") - if res.status_code == 200: - self.server_paused = False - else: - logger.info(f"mineflayer pause result: {res.json()}") - return self.server_paused diff --git a/metagpt/environment/minecraft/mineflayer/.gitignore b/metagpt/environment/minecraft/mineflayer/.gitignore deleted file mode 100644 index 0fd4684103..0000000000 --- a/metagpt/environment/minecraft/mineflayer/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!/lib \ No newline at end of file diff --git a/metagpt/environment/minecraft/mineflayer/.prettierignore b/metagpt/environment/minecraft/mineflayer/.prettierignore deleted file mode 100644 index 1b07c39e9b..0000000000 --- a/metagpt/environment/minecraft/mineflayer/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -# Ignore artifacts: -build -coverage \ No newline at end of file diff --git a/metagpt/environment/minecraft/mineflayer/.prettierrc.json b/metagpt/environment/minecraft/mineflayer/.prettierrc.json deleted file mode 100644 index 0a02bcefda..0000000000 --- a/metagpt/environment/minecraft/mineflayer/.prettierrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "tabWidth": 4 -} diff --git a/metagpt/environment/minecraft/mineflayer/index.js b/metagpt/environment/minecraft/mineflayer/index.js deleted file mode 100644 index 7fb0a8787f..0000000000 --- a/metagpt/environment/minecraft/mineflayer/index.js +++ /dev/null @@ -1,425 +0,0 @@ -const fs = require("fs"); -const express = require("express"); -const bodyParser = require("body-parser"); -const mineflayer = require("mineflayer"); - -const skills = require("./lib/skillLoader"); -const { initCounter, getNextTime } = require("./lib/utils"); -const obs = require("./lib/observation/base"); -const OnChat = require("./lib/observation/onChat"); -const OnError = require("./lib/observation/onError"); -const { Voxels, BlockRecords } = require("./lib/observation/voxels"); -const Status = require("./lib/observation/status"); -const Inventory = require("./lib/observation/inventory"); -const OnSave = require("./lib/observation/onSave"); -const Chests = require("./lib/observation/chests"); -const { plugin: tool } = require("mineflayer-tool"); - -let bot = null; - -const app = express(); - -app.use(bodyParser.json({ limit: "50mb" })); -app.use(bodyParser.urlencoded({ limit: "50mb", extended: false })); - -app.post("/start", (req, res) => { - if (bot) onDisconnect("Restarting bot"); - bot = null; - console.log(req.body); - bot = mineflayer.createBot({ - host: "localhost", // minecraft server ip - port: req.body.port, // minecraft server port - username: "bot", - disableChatSigning: true, - checkTimeoutInterval: 60 * 60 * 1000, - }); - bot.once("error", onConnectionFailed); - - // Event subscriptions - bot.waitTicks = req.body.waitTicks; - bot.globalTickCounter = 0; - bot.stuckTickCounter = 0; - bot.stuckPosList = []; - bot.iron_pickaxe = false; - - bot.on("kicked", onDisconnect); - - // mounting will cause physicsTick to stop - bot.on("mount", () => { - bot.dismount(); - }); - - bot.once("spawn", async () => { - bot.removeListener("error", onConnectionFailed); - let itemTicks = 1; - if (req.body.reset === "hard") { - bot.chat("/clear @s"); - bot.chat("/kill @s"); - const inventory = req.body.inventory ? req.body.inventory : {}; - const equipment = req.body.equipment - ? req.body.equipment - : [null, null, null, null, null, null]; - for (let key in inventory) { - bot.chat(`/give @s minecraft:${key} ${inventory[key]}`); - itemTicks += 1; - } - const equipmentNames = [ - "armor.head", - "armor.chest", - "armor.legs", - "armor.feet", - "weapon.mainhand", - "weapon.offhand", - ]; - for (let i = 0; i < 6; i++) { - if (i === 4) continue; - if (equipment[i]) { - bot.chat( - `/item replace entity @s ${equipmentNames[i]} with minecraft:${equipment[i]}` - ); - itemTicks += 1; - } - } - } - - if (req.body.position) { - bot.chat( - `/tp @s ${req.body.position.x} ${req.body.position.y} ${req.body.position.z}` - ); - } - - // if iron_pickaxe is in bot's inventory - if ( - bot.inventory.items().find((item) => item.name === "iron_pickaxe") - ) { - bot.iron_pickaxe = true; - } - - const { pathfinder } = require("mineflayer-pathfinder"); - const tool = require("mineflayer-tool").plugin; - const collectBlock = require("mineflayer-collectblock").plugin; - const pvp = require("mineflayer-pvp").plugin; - const minecraftHawkEye = require("minecrafthawkeye"); - bot.loadPlugin(pathfinder); - bot.loadPlugin(tool); - bot.loadPlugin(collectBlock); - bot.loadPlugin(pvp); - bot.loadPlugin(minecraftHawkEye); - - // bot.collectBlock.movements.digCost = 0; - // bot.collectBlock.movements.placeCost = 0; - - obs.inject(bot, [ - OnChat, - OnError, - Voxels, - Status, - Inventory, - OnSave, - Chests, - BlockRecords, - ]); - skills.inject(bot); - - if (req.body.spread) { - bot.chat(`/spreadplayers ~ ~ 0 300 under 80 false @s`); - await bot.waitForTicks(bot.waitTicks); - } - - await bot.waitForTicks(bot.waitTicks * itemTicks); - res.json(bot.observe()); - - initCounter(bot); - bot.chat("/gamerule keepInventory true"); - bot.chat("/gamerule doDaylightCycle false"); - }); - - function onConnectionFailed(e) { - console.log(e); - bot = null; - res.status(400).json({ error: e }); - } - function onDisconnect(message) { - if (bot.viewer) { - bot.viewer.close(); - } - bot.end(); - console.log(message); - bot = null; - } -}); - -app.post("/step", async (req, res) => { - // import useful package - let response_sent = false; - function otherError(err) { - console.log("Uncaught Error"); - bot.emit("error", handleError(err)); - bot.waitForTicks(bot.waitTicks).then(() => { - if (!response_sent) { - response_sent = true; - res.json(bot.observe()); - } - }); - } - - process.on("uncaughtException", otherError); - - const mcData = require("minecraft-data")(bot.version); - mcData.itemsByName["leather_cap"] = mcData.itemsByName["leather_helmet"]; - mcData.itemsByName["leather_tunic"] = - mcData.itemsByName["leather_chestplate"]; - mcData.itemsByName["leather_pants"] = - mcData.itemsByName["leather_leggings"]; - mcData.itemsByName["leather_boots"] = mcData.itemsByName["leather_boots"]; - mcData.itemsByName["lapis_lazuli_ore"] = mcData.itemsByName["lapis_ore"]; - mcData.blocksByName["lapis_lazuli_ore"] = mcData.blocksByName["lapis_ore"]; - const { - Movements, - goals: { - Goal, - GoalBlock, - GoalNear, - GoalXZ, - GoalNearXZ, - GoalY, - GoalGetToBlock, - GoalLookAtBlock, - GoalBreakBlock, - GoalCompositeAny, - GoalCompositeAll, - GoalInvert, - GoalFollow, - GoalPlaceBlock, - }, - pathfinder, - Move, - ComputedPath, - PartiallyComputedPath, - XZCoordinates, - XYZCoordinates, - SafeBlock, - GoalPlaceBlockOptions, - } = require("mineflayer-pathfinder"); - const { Vec3 } = require("vec3"); - - // Set up pathfinder - const movements = new Movements(bot, mcData); - bot.pathfinder.setMovements(movements); - - bot.globalTickCounter = 0; - bot.stuckTickCounter = 0; - bot.stuckPosList = []; - - function onTick() { - bot.globalTickCounter++; - if (bot.pathfinder.isMoving()) { - bot.stuckTickCounter++; - if (bot.stuckTickCounter >= 100) { - onStuck(1.5); - bot.stuckTickCounter = 0; - } - } - } - - bot.on("physicTick", onTick); - - // initialize fail count - let _craftItemFailCount = 0; - let _killMobFailCount = 0; - let _mineBlockFailCount = 0; - let _placeItemFailCount = 0; - let _smeltItemFailCount = 0; - - // Retrieve array form post bod - const code = req.body.code; - const programs = req.body.programs; - bot.cumulativeObs = []; - await bot.waitForTicks(bot.waitTicks); - const r = await evaluateCode(code, programs); - process.off("uncaughtException", otherError); - if (r !== "success") { - bot.emit("error", handleError(r)); - } - await returnItems(); - // wait for last message - await bot.waitForTicks(bot.waitTicks); - if (!response_sent) { - response_sent = true; - res.json(bot.observe()); - } - bot.removeListener("physicTick", onTick); - - async function evaluateCode(code, programs) { - // Echo the code produced for players to see it. Don't echo when the bot code is already producing dialog or it will double echo - try { - await eval("(async () => {" + programs + "\n" + code + "})()"); - return "success"; - } catch (err) { - return err; - } - } - - function onStuck(posThreshold) { - const currentPos = bot.entity.position; - bot.stuckPosList.push(currentPos); - - // Check if the list is full - if (bot.stuckPosList.length === 5) { - const oldestPos = bot.stuckPosList[0]; - const posDifference = currentPos.distanceTo(oldestPos); - - if (posDifference < posThreshold) { - teleportBot(); // execute the function - } - - // Remove the oldest time from the list - bot.stuckPosList.shift(); - } - } - - function teleportBot() { - const blocks = bot.findBlocks({ - matching: (block) => { - return block.type === 0; - }, - maxDistance: 1, - count: 27, - }); - - if (blocks) { - // console.log(blocks.length); - const randomIndex = Math.floor(Math.random() * blocks.length); - const block = blocks[randomIndex]; - bot.chat(`/tp @s ${block.x} ${block.y} ${block.z}`); - } else { - bot.chat("/tp @s ~ ~1.25 ~"); - } - } - - function returnItems() { - bot.chat("/gamerule doTileDrops false"); - const crafting_table = bot.findBlock({ - matching: mcData.blocksByName.crafting_table.id, - maxDistance: 128, - }); - if (crafting_table) { - bot.chat( - `/setblock ${crafting_table.position.x} ${crafting_table.position.y} ${crafting_table.position.z} air destroy` - ); - bot.chat("/give @s crafting_table"); - } - const furnace = bot.findBlock({ - matching: mcData.blocksByName.furnace.id, - maxDistance: 128, - }); - if (furnace) { - bot.chat( - `/setblock ${furnace.position.x} ${furnace.position.y} ${furnace.position.z} air destroy` - ); - bot.chat("/give @s furnace"); - } - if (bot.inventoryUsed() >= 32) { - // if chest is not in bot's inventory - if (!bot.inventory.items().find((item) => item.name === "chest")) { - bot.chat("/give @s chest"); - } - } - // if iron_pickaxe not in bot's inventory and bot.iron_pickaxe - if ( - bot.iron_pickaxe && - !bot.inventory.items().find((item) => item.name === "iron_pickaxe") - ) { - bot.chat("/give @s iron_pickaxe"); - } - bot.chat("/gamerule doTileDrops true"); - } - - function handleError(err) { - let stack = err.stack; - if (!stack) { - return err; - } - console.log(stack); - const final_line = stack.split("\n")[1]; - const regex = /:(\d+):\d+\)/; - - const programs_length = programs.split("\n").length; - let match_line = null; - for (const line of stack.split("\n")) { - const match = regex.exec(line); - if (match) { - const line_num = parseInt(match[1]); - if (line_num >= programs_length) { - match_line = line_num - programs_length; - break; - } - } - } - if (!match_line) { - return err.message; - } - let f_line = final_line.match( - /\((?.*):(?\d+):(?\d+)\)/ - ); - if (f_line && f_line.groups && fs.existsSync(f_line.groups.file)) { - const { file, line, pos } = f_line.groups; - const f = fs.readFileSync(file, "utf8").split("\n"); - // let filename = file.match(/(?<=node_modules\\)(.*)/)[1]; - let source = file + `:${line}\n${f[line - 1].trim()}\n `; - - const code_source = - "at " + - code.split("\n")[match_line - 1].trim() + - " in your code"; - return source + err.message + "\n" + code_source; - } else if ( - f_line && - f_line.groups && - f_line.groups.file.includes("") - ) { - const { file, line, pos } = f_line.groups; - let source = - "Your code" + - `:${match_line}\n${code.split("\n")[match_line - 1].trim()}\n `; - let code_source = ""; - if (line < programs_length) { - source = - "In your program code: " + - programs.split("\n")[line - 1].trim() + - "\n"; - code_source = `at line ${match_line}:${code - .split("\n") - [match_line - 1].trim()} in your code`; - } - return source + err.message + "\n" + code_source; - } - return err.message; - } -}); - -app.post("/stop", (req, res) => { - bot.end(); - res.json({ - message: "Bot stopped", - }); -}); - -app.post("/pause", (req, res) => { - if (!bot) { - res.status(400).json({ error: "Bot not spawned" }); - return; - } - bot.chat("/pause"); - bot.waitForTicks(bot.waitTicks).then(() => { - res.json({ message: "Success" }); - }); -}); - -// Server listening to PORT 3000 - -const DEFAULT_PORT = 3000; -const PORT = process.argv[2] || DEFAULT_PORT; -app.listen(PORT, () => { - console.log(`Server started on port ${PORT}`); -}); diff --git a/metagpt/environment/minecraft/mineflayer/lib/observation/base.js b/metagpt/environment/minecraft/mineflayer/lib/observation/base.js deleted file mode 100644 index b661a24b57..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/observation/base.js +++ /dev/null @@ -1,45 +0,0 @@ -class Observation { - constructor(bot) { - if (new.target === Observation) { - throw new TypeError( - "Cannot instantiate abstract class Observation" - ); - } - - this.bot = bot; - this.name = "Observation"; - } - - observe() { - throw new TypeError("Method 'observe()' must be implemented."); - } - - reset() {} -} - -function inject(bot, obs_list) { - bot.obsList = []; - bot.cumulativeObs = []; - bot.eventMemory = {}; - obs_list.forEach((obs) => { - bot.obsList.push(new obs(bot)); - }); - bot.event = function (event_name) { - let result = {}; - bot.obsList.forEach((obs) => { - if (obs.name.startsWith("on") && obs.name !== event_name) { - return; - } - result[obs.name] = obs.observe(); - }); - bot.cumulativeObs.push([event_name, result]); - }; - bot.observe = function () { - bot.event("observe"); - const result = bot.cumulativeObs; - bot.cumulativeObs = []; - return JSON.stringify(result); - }; -} - -module.exports = { Observation, inject }; diff --git a/metagpt/environment/minecraft/mineflayer/lib/observation/chests.js b/metagpt/environment/minecraft/mineflayer/lib/observation/chests.js deleted file mode 100644 index 842bd171d5..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/observation/chests.js +++ /dev/null @@ -1,31 +0,0 @@ -const { Observation } = require("./base"); - -class Chests extends Observation { - constructor(bot) { - super(bot); - this.name = "nearbyChests"; - this.chestsItems = {}; - bot.on("closeChest", (chestItems, position) => { - this.chestsItems[position] = chestItems; - }); - bot.on("removeChest", (chestPosition) => { - this.chestsItems[chestPosition] = "Invalid"; - }); - } - - observe() { - const chests = this.bot.findBlocks({ - matching: this.bot.registry.blocksByName.chest.id, - maxDistance: 16, - count: 999, - }); - chests.forEach((chest) => { - if (!this.chestsItems.hasOwnProperty(chest)) { - this.chestsItems[chest] = "Unknown"; - } - }); - return this.chestsItems; - } -} - -module.exports = Chests; diff --git a/metagpt/environment/minecraft/mineflayer/lib/observation/inventory.js b/metagpt/environment/minecraft/mineflayer/lib/observation/inventory.js deleted file mode 100644 index 0645d1bfa0..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/observation/inventory.js +++ /dev/null @@ -1,39 +0,0 @@ -const { Observation } = require("./base"); - -class Inventory extends Observation { - constructor(bot) { - super(bot); - this.name = "inventory"; - } - - observe() { - return listItems(this.bot); - } -} - -function listItems(bot) { - const items = getInventoryItems(bot); - return items.reduce(itemToDict, {}); -} - -function getInventoryItems(bot) { - const inventory = bot.currentWindow || bot.inventory; - return inventory.items(); -} - -function itemToDict(acc, cur) { - if (cur.name && cur.count) { - //if both name and count property are defined - if (acc[cur.name]) { - //if the item is already in the dict - acc[cur.name] += cur.count; - } else { - //if the item is not in the dict - acc[cur.name] = cur.count; - } - } - return acc; -} - -//export modules -module.exports = Inventory; diff --git a/metagpt/environment/minecraft/mineflayer/lib/observation/onChat.js b/metagpt/environment/minecraft/mineflayer/lib/observation/onChat.js deleted file mode 100644 index 54b411e2ad..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/observation/onChat.js +++ /dev/null @@ -1,26 +0,0 @@ -const Observation = require("./base.js").Observation; - -class onChat extends Observation { - constructor(bot) { - super(bot); - this.name = "onChat"; - this.obs = ""; - bot.on("chatEvent", (username, message) => { - // Save entity status to local variable - if (message.startsWith("/")) { - return; - } - - this.obs += message; - this.bot.event(this.name); - }); - } - - observe() { - const result = this.obs; - this.obs = ""; - return result; - } -} - -module.exports = onChat; diff --git a/metagpt/environment/minecraft/mineflayer/lib/observation/onError.js b/metagpt/environment/minecraft/mineflayer/lib/observation/onError.js deleted file mode 100644 index ac8fed9e51..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/observation/onError.js +++ /dev/null @@ -1,22 +0,0 @@ -const Observation = require("./base.js").Observation; - -class onError extends Observation { - constructor(bot) { - super(bot); - this.name = "onError"; - this.obs = null; - bot.on("error", (err) => { - // Save entity status to local variable - this.obs = err; - this.bot.event(this.name); - }); - } - - observe() { - const result = this.obs; - this.obs = null; - return result; - } -} - -module.exports = onError; diff --git a/metagpt/environment/minecraft/mineflayer/lib/observation/onSave.js b/metagpt/environment/minecraft/mineflayer/lib/observation/onSave.js deleted file mode 100644 index e5983590ff..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/observation/onSave.js +++ /dev/null @@ -1,22 +0,0 @@ -const Observation = require("./base.js").Observation; - -class onSave extends Observation { - constructor(bot) { - super(bot); - this.name = "onSave"; - this.obs = null; - bot.on("save", (eventName) => { - // Save entity status to local variable - this.obs = eventName; - this.bot.event(this.name); - }); - } - - observe() { - const result = this.obs; - this.obs = null; - return result; - } -} - -module.exports = onSave; diff --git a/metagpt/environment/minecraft/mineflayer/lib/observation/status.js b/metagpt/environment/minecraft/mineflayer/lib/observation/status.js deleted file mode 100644 index b031fbcf20..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/observation/status.js +++ /dev/null @@ -1,103 +0,0 @@ -const Observation = require("./base.js").Observation; - -class Status extends Observation { - constructor(bot) { - super(bot); - this.name = "status"; - } - - observe() { - return { - health: this.bot.health, - food: this.bot.food, - saturation: this.bot.foodSaturation, - oxygen: this.bot.oxygenLevel, - position: this.bot.entity.position, - velocity: this.bot.entity.velocity, - yaw: this.bot.entity.yaw, - pitch: this.bot.entity.pitch, - onGround: this.bot.entity.onGround, - equipment: this.getEquipment(), - name: this.bot.entity.username, - timeSinceOnGround: this.bot.entity.timeSinceOnGround, - isInWater: this.bot.entity.isInWater, - isInLava: this.bot.entity.isInLava, - isInWeb: this.bot.entity.isInWeb, - isCollidedHorizontally: this.bot.entity.isCollidedHorizontally, - isCollidedVertically: this.bot.entity.isCollidedVertically, - biome: this.bot.blockAt(this.bot.entity.position) - ? this.bot.blockAt(this.bot.entity.position).biome.name - : "None", - entities: this.getEntities(), - timeOfDay: this.getTime(), - inventoryUsed: this.bot.inventoryUsed(), - elapsedTime: this.bot.globalTickCounter, - }; - } - - itemToObs(item) { - if (!item) return null; - return item.name; - } - - getTime() { - const timeOfDay = this.bot.time.timeOfDay; - let time = ""; - if (timeOfDay < 1000) { - time = "sunrise"; - } else if (timeOfDay < 6000) { - time = "day"; - } else if (timeOfDay < 12000) { - time = "noon"; - } else if (timeOfDay < 13000) { - time = "sunset"; - } else if (timeOfDay < 18000) { - time = "night"; - } else if (timeOfDay < 22000) { - time = "midnight"; - } else { - time = "sunrise"; - } - return time; - } - - // For each item in equipment, if it exists, return the name of the item - // otherwise return null - getEquipment() { - const slots = this.bot.inventory.slots; - const mainHand = this.bot.heldItem; - return slots - .slice(5, 9) - .concat(mainHand, slots[45]) - .map(this.itemToObs); - } - - getEntities() { - const entities = this.bot.entities; - if (!entities) return {}; - // keep all monsters in one list, keep other mobs in another list - const mobs = {}; - for (const id in entities) { - const entity = entities[id]; - if (!entity.displayName) continue; - if (entity.name === "player" || entity.name === "item") continue; - if (entity.position.distanceTo(this.bot.entity.position) < 32) { - if (!mobs[entity.name]) { - mobs[entity.name] = entity.position.distanceTo( - this.bot.entity.position - ); - } else if ( - mobs[entity.name] > - entity.position.distanceTo(this.bot.entity.position) - ) { - mobs[entity.name] = entity.position.distanceTo( - this.bot.entity.position - ); - } - } - } - return mobs; - } -} - -module.exports = Status; diff --git a/metagpt/environment/minecraft/mineflayer/lib/observation/voxels.js b/metagpt/environment/minecraft/mineflayer/lib/observation/voxels.js deleted file mode 100644 index ecb0c14b70..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/observation/voxels.js +++ /dev/null @@ -1,67 +0,0 @@ -// Blocks = require("./blocks") -const { Observation } = require("./base"); - -class Voxels extends Observation { - constructor(bot) { - super(bot); - this.name = "voxels"; - } - - observe() { - return Array.from(getSurroundingBlocks(this.bot, 8, 2, 8)); - } -} - -class BlockRecords extends Observation { - constructor(bot) { - super(bot); - this.name = "blockRecords"; - this.records = new Set(); - this.tick = 0; - bot.on("physicsTick", () => { - this.tick++; - if (this.tick >= 100) { - const items = getInventoryItems(this.bot); - getSurroundingBlocks(this.bot, 8, 2, 8).forEach((block) => { - if (!items.has(block)) this.records.add(block); - }); - this.tick = 0; - } - }); - } - - observe() { - return Array.from(this.records); - } - - reset() { - this.records = new Set(); - } -} - -function getSurroundingBlocks(bot, x_distance, y_distance, z_distance) { - const surroundingBlocks = new Set(); - - for (let x = -x_distance; x <= x_distance; x++) { - for (let y = -y_distance; y <= y_distance; y++) { - for (let z = -z_distance; z <= z_distance; z++) { - const block = bot.blockAt(bot.entity.position.offset(x, y, z)); - if (block && block.type !== 0) { - surroundingBlocks.add(block.name); - } - } - } - } - // console.log(surroundingBlocks); - return surroundingBlocks; -} - -function getInventoryItems(bot) { - const items = new Set(); - bot.inventory.items().forEach((item) => { - if (item) items.add(item.name); - }); - return items; -} - -module.exports = { Voxels, BlockRecords }; diff --git a/metagpt/environment/minecraft/mineflayer/lib/skillLoader.js b/metagpt/environment/minecraft/mineflayer/lib/skillLoader.js deleted file mode 100644 index d78cf78209..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/skillLoader.js +++ /dev/null @@ -1,79 +0,0 @@ -function inject(bot) { - bot._sleep = bot.sleep; - bot.sleep = async (bedBlock) => { - await bot.waitForTicks(20); - await bot._sleep(bedBlock); - await bot.waitForTicks(135); - }; - - bot._fish = bot.fish; - bot.fish = async () => { - if (bot.heldItem?.name !== "fishing_rod") { - bot.chat("I'm not holding a fishing rod!"); - return; - } - let timeout = null; - await Promise.race([ - bot._fish(), - new Promise( - (resolve, reject) => - (timeout = setTimeout(() => { - bot.activateItem(); - reject( - new Error( - "Finishing timeout, make sure you get to and look at a water block!" - ) - ); - }, 60000)) - ), - ]); - clearTimeout(timeout); - await bot.waitForTicks(20); - }; - - bot._consume = bot.consume; - bot.consume = async () => { - // action_count.activateItem++; - await bot._consume(); - await bot.waitForTicks(20); - }; - - bot._useOn = bot.useOn; - bot.useOn = async (entity) => { - if (entity.position.distanceTo(bot.entity.position) > 6) { - bot.chat("Please goto a place near the entity first!"); - return; - } - await bot._useOn(entity); - await bot.waitForTicks(20); - }; - - bot._activateBlock = bot.activateBlock; - bot.activateBlock = async (block) => { - if (block.position.distanceTo(bot.entity.position) > 6) { - bot.chat("Please goto a place near the block first!"); - return; - } - // action_count.activateBlock++; - await bot._activateBlock(block); - }; - - bot._chat = bot.chat; - bot.chat = (message) => { - // action_count.chat++; - bot.emit("chatEvent", "bot", message); - bot._chat(message); - }; - - bot.inventoryUsed = () => { - return bot.inventory.slots.slice(9, 45).filter((item) => item !== null) - .length; - }; - - bot.save = function (eventName) { - bot.emit("save", eventName); - }; -} - -// export all control_primitives -module.exports = { inject }; diff --git a/metagpt/environment/minecraft/mineflayer/lib/utils.js b/metagpt/environment/minecraft/mineflayer/lib/utils.js deleted file mode 100644 index 68af307960..0000000000 --- a/metagpt/environment/minecraft/mineflayer/lib/utils.js +++ /dev/null @@ -1,31 +0,0 @@ -let gameTimeCounter = 0; -let gameTimeList = []; -const initCounter = (bot) => { - gameTimeList = []; - for (let i = 0; i < 13000; i += 1000) { - gameTimeList.push(i); - } - for (let i = 13000; i < 24000; i += 2000) { - gameTimeList.push(i); - } - const timeOfDay = bot.time.timeOfDay; - for (let i = 0; i < gameTimeList.length; i++) { - if (gameTimeList[i] > timeOfDay) { - gameTimeCounter = i - 1; - break; - } - } -}; - -const getNextTime = () => { - gameTimeCounter++; - if (gameTimeCounter >= gameTimeList.length) { - gameTimeCounter = 0; - } - return gameTimeList[gameTimeCounter]; -}; - -module.exports = { - initCounter, - getNextTime, -}; diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/.gitignore b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/.gitignore deleted file mode 100644 index 0578fdca38..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/.gitignore +++ /dev/null @@ -1,107 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -lib/ -package-lock.json diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/LICENSE b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/LICENSE deleted file mode 100644 index f2896b56e4..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 TheDudeFromCI - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/README.md b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/README.md deleted file mode 100644 index 555acb761e..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/README.md +++ /dev/null @@ -1,89 +0,0 @@ -

mineflayer-collectblock

-

A small utility plugin for allowing users to collect blocks using a higher level API.

- -

- - - - - - -

- ---- -## This is a modified version to better support Voyager - -## Showcase - -You can see a video of the plugin in action, [here.](https://youtu.be/5T_rcCnNnf4) -The source code of the bot in the video can be seen in the examples folder, [here.](https://github.com/TheDudeFromCI/mineflayer-collectblock/blob/master/examples/collector.js) - -### Description - -This plugin is a wrapper for mineflayer that allows for easier API usage when collecting blocks or item drops. This plugin is designed to reduce some of the boilerplate code based around the act of pathfinding to a block _(handled by_ ***mineflayer-pathfinder***_)_, selecting the best tool to mine that block _(handled by_ ***mineflayer-tool***_)_, actually mining it, then moving to collect the item drops from that block. This plugin allows for all of that basic concept to be wrapped up into a single API function. - -In addition to the usage above, some additional quality of life features are available in this plugin. These include the ability to automatically deposit items into a chest when the bot's inventory is full, collecting new tools from a chest if the bot doesn't currently have a required tool _(also handled by_ ***mineflayer-tool***_)_, and allowing for queueing of multiple blocks or item drops to the collection task, so they can be processed later. - -### Getting Started - -This plugin is built using Node and can be installed using: -```bash -npm install --save mineflayer-collectblock -``` - -### Simple Bot - -The brief description goes here. - -```js -// Create your bot -const mineflayer = require("mineflayer") -const bot = mineflayer.createBot({ - host: 'localhost', - username: 'Player', -}) -let mcData - -// Load collect block -bot.loadPlugin(require('mineflayer-collectblock').plugin) - -async function collectGrass() { - // Find a nearby grass block - const grass = bot.findBlock({ - matching: mcData.blocksByName.grass_block.id, - maxDistance: 64 - }) - - if (grass) { - // If we found one, collect it. - try { - await bot.collectBlock.collect(grass) - collectGrass() // Collect another grass block - } catch (err) { - console.log(err) // Handle errors, if any - } - } -} - -// On spawn, start collecting all nearby grass -bot.once('spawn', () => { - mcData = require('minecraft-data')(bot.version) - collectGrass() -}) -``` - -### Documentation - -[API](https://github.com/TheDudeFromCI/mineflayer-collectblock/blob/master/docs/api.md) - -[Examples](https://github.com/TheDudeFromCI/mineflayer-collectblock/tree/master/examples) - -### License - -This project uses the [MIT](https://github.com/TheDudeFromCI/mineflayer-collectblock/blob/master/LICENSE) license. - -### Contributions - -This project is accepting PRs and Issues. See something you think can be improved? Go for it! Any and all help is highly appreciated! - -For larger changes, it is recommended to discuss these changes in the issues tab before writing any code. It's also preferred to make many smaller PRs than one large one, where applicable. diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/_config.yml b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/_config.yml deleted file mode 100644 index c4192631f2..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-cayman \ No newline at end of file diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/docs/api.md b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/docs/api.md deleted file mode 100644 index 66d8a3ecc4..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/docs/api.md +++ /dev/null @@ -1,52 +0,0 @@ -# API - -Welcome to the *mineflayer-collectblock* API documentation page. - -## Table of Contents - -- [1. Summary](#1-summary) -- [Properties](#properties) - - [`bot.collectblock.movements: Movements`](#botcollectblockmovements-movements) -- [Functions](#functions) - - [collect](#collect) - - [Options:](#options) - -## 1. Summary - -The collect block plugin is a utility plugin that can be used to help make collecting blocks and item drops very easy, using only a single API call. No need to worry about pathfinding to the block, selecting the right tool, or moving to pick up the item drop after mining. - -## Properties - -### `bot.collectblock.movements: Movements` - -The movements object used by the pathfinder plugin to define the movement configuration. This object is passed to the pathfinder plugin when any API from this plugin is called in order to control how pathfinding should work when collecting the given blocks or item. - -If set to null, the pathfinder plugin movements is not updated. - -Defaults to a new movements object instance. - -## Functions - -### collect - -Usage: `bot.collectblock.collect(target: Collectable | Collectable[], options?: CollectOptions, cb: (err?: Error) => void): void` - -Causes the bot to collect the given block, item drop, or list of those. If the target is a block, the bot will move to the block, mine it, and pick up the item drop. If the target is an item drop, the bot will move to the item drop and pick it up. If the target is a list of collectables, the bot will move from target to target in order of closest to furthest and collect each target in turn. - -#### Options: - - * `append: boolean` - - If true, the target(s) will be appended to the existing target list instead of starting a new task. Defaults to false. - - * `ignoreNoPath: boolean` - - If true, errors will not be thrown when a path to the target block cannot be found. The bot will attempt to choose the best available position it can find, instead. Errors are still thrown if the bot cannot interact with the block from it's final location. Defaults to false. - - * `chestLocations: Vec3[]` - - Gets the list of chest locations to use when storing items after the bot's inventory becomes full. If undefined, it defaults to the chest location list on the bot.collectBlock plugin. - - * `itemFilter: ItemFilter` - - When transferring items to a chest, this filter is used to determine what items are allowed to be moved, and what items aren't allowed to be moved. Defaults to the item filter specified on the bot.collectBlock plugin. \ No newline at end of file diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/collector.js b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/collector.js deleted file mode 100644 index b9bb8faf9e..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/collector.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * This bot example show how to direct a bot to collect a specific block type - * or a group of nearby blocks of that type. - */ - -const mineflayer = require('mineflayer') -const collectBlock = require('mineflayer-collectblock').plugin - -if (process.argv.length < 4 || process.argv.length > 6) { - console.log('Usage : node collector.js [] []') - process.exit(1) -} - -const bot = mineflayer.createBot({ - host: process.argv[2], - port: process.argv[3], - username: process.argv[4] || 'collector', - password: process.argv[5] -}) - -bot.loadPlugin(collectBlock) - -let mcData -bot.once('spawn', () => { - mcData = require('minecraft-data')(bot.version) -}) - -bot.on('chat', async (username, message) => { - const args = message.split(' ') - if (args[0] !== 'collect') return - - let count = 1 - if (args.length === 3) count = parseInt(args[1]) - - let type = args[1] - if (args.length === 3) type = args[2] - - const blockType = mcData.blocksByName[type] - if (!blockType) { - return - } - - const blocks = bot.findBlocks({ - matching: blockType.id, - maxDistance: 64, - count: count - }) - - if (blocks.length === 0) { - bot.chat("I don't see that block nearby.") - return - } - - const targets = [] - for (let i = 0; i < Math.min(blocks.length, count); i++) { - targets.push(bot.blockAt(blocks[i])) - } - - bot.chat(`Found ${targets.length} ${type}(s)`) - - try { - await bot.collectBlock.collect(targets) - // All blocks have been collected. - bot.chat('Done') - } catch (err) { - // An error occurred, report it. - bot.chat(err.message) - console.log(err) - } -}) diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/oreMiner.js b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/oreMiner.js deleted file mode 100644 index 6accac88fd..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/oreMiner.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * This bot example shows how to collect a vein of ores quickly after only finding a single block. - * This makes it easy to collect a vein of ores or mine a tree without looking for every block in the - * area. - */ - -const mineflayer = require('mineflayer') -const collectBlock = require('mineflayer-collectblock').plugin - -if (process.argv.length < 4 || process.argv.length > 6) { - console.log('Usage : node oreMiner.js [] []') - process.exit(1) -} - -const bot = mineflayer.createBot({ - host: process.argv[2], - port: process.argv[3], - username: process.argv[4] || 'oreMiner', - password: process.argv[5] -}) - -bot.loadPlugin(collectBlock) - -let mcData -bot.once('spawn', () => { - mcData = require('minecraft-data')(bot.version) -}) - -bot.on('chat', async (username, message) => { - const args = message.split(' ') - if (args[0] !== 'collect') return - - const blockType = mcData.blocksByName[args[1]] - if (!blockType) { - bot.chat(`I don't know any blocks named ${args[1]}.`) - return - } - - const block = bot.findBlock({ - matching: blockType.id, - maxDistance: 64 - }) - - if (!block) { - bot.chat("I don't see that block nearby.") - return - } - - const targets = bot.collectBlock.findFromVein(block) - try { - await bot.collectBlock.collect(targets) - // All blocks have been collected. - bot.chat('Done') - } catch (err) { - // An error occurred, report it. - bot.chat(err.message) - console.log(err) - } -}) diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/storageBot.js b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/storageBot.js deleted file mode 100644 index b6f9971f25..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/examples/storageBot.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * This bot example shows how to use the chest filling mechanic of the plugin. - * Simply provide a given storage chest, and the bot will automatically try and - * store it's inventory in that chest when the bot's inventory becomes full. - */ - -if (process.argv.length < 4 || process.argv.length > 6) { - console.log('Usage : node storageBot.js [] []') - process.exit(1) -} - -// Load your libraries -const mineflayer = require('mineflayer') -const collectBlock = require('mineflayer-collectblock').plugin - -// Create your bot -const bot = mineflayer.createBot({ - host: process.argv[2], - port: parseInt(process.argv[3]), - username: process.argv[4] ? process.argv[4] : 'storageBot', - password: process.argv[5] -}) - -// Load the collect block plugin -bot.loadPlugin(collectBlock) - -// Load mcData on login -let mcData -bot.once('login', () => { - mcData = require('minecraft-data')(bot.version) -}) - -// On spawn, try to find any nearby chests and save those as storage locations. -// When the bot's inventory becomes too full, it will empty it's inventory into -// these chests before collecting more resources. If a chest gets full, it moves -// to the next one in order until it's inventory is empty or it runs out of chests. -bot.once('spawn', () => { - bot.collectBlock.chestLocations = bot.findBlocks({ - matching: mcData.blocksByName.chest.id, - maxDistance: 16, - count: 999999 // Get as many chests as we can - }) - - if (bot.collectBlock.chestLocations.length === 0) { - bot.chat("I don't see any chests nearby.") - } else { - for (const chestPos of bot.collectBlock.chestLocations) { - bot.chat(`I found a chest at ${chestPos}`) - } - } -}) - -// Wait for someone to say something -bot.on('chat', async (username, message) => { - // If the player says something start starts with "collect" - // Otherwise, do nothing - const args = message.split(' ') - if (args[0] !== 'collect') return - - // If the player specifies a number, collect that many. Otherwise, default to 1. - let count = 1 - if (args.length === 3) count = parseInt(args[1]) - - // If a number was given the item number is the 3rd arg, not the 2nd. - let type = args[1] - if (args.length === 3) type = args[2] - - // Get the id of that block type for this version of Minecraft. - const blockType = mcData.blocksByName[type] - if (!blockType) { - bot.chat(`I don't know any blocks named ${type}.`) - return - } - - // Find all nearby blocks of that type, up to the given count, within 64 blocks. - const blocks = bot.findBlocks({ - matching: blockType.id, - maxDistance: 64, - count: count - }) - - // Complain if we can't find any nearby blocks of that type. - if (blocks.length === 0) { - bot.chat("I don't see that block nearby.") - return - } - - // Convert the block position array into a block array to pass to collect block. - const targets = [] - for (let i = 0; i < Math.min(blocks.length, count); i++) { - targets.push(bot.blockAt(blocks[i])) - } - - // Announce what we found. - bot.chat(`Found ${targets.length} ${type}(s)`) - - // Tell the bot to collect all of the given blocks in the block list. - try { - await bot.collectBlock.collect(targets) - // All blocks have been collected. - bot.chat('Done') - } catch (err) { - // An error occurred, report it. - bot.chat(err.message) - console.log(err) - } -}) diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/package.json b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/package.json deleted file mode 100644 index 0f59e7aa6a..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "mineflayer-collectblock", - "version": "1.4.1", - "description": "A simple utility plugin for Mineflayer that add a higher level API for collecting blocks.", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "scripts": { - "build": "ts-standard && tsc && require-self", - "clean": "rm -rf lib", - "test": "test" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/TheDudeFromCI/mineflayer-collectblock.git" - }, - "keywords": [ - "mineflayer", - "plugin", - "api", - "utility", - "helper", - "collect" - ], - "author": "TheDudeFromCI", - "license": "MIT", - "bugs": { - "url": "https://github.com/TheDudeFromCI/mineflayer-collectblock/issues" - }, - "homepage": "https://github.com/TheDudeFromCI/mineflayer-collectblock#readme", - "dependencies": { - "mineflayer": "^4.0.0", - "mineflayer-pathfinder": "^2.1.1", - "mineflayer-tool": "^1.1.0" - }, - "devDependencies": { - "@types/node": "^18.6.4", - "require-self": "^0.2.3", - "ts-standard": "^11.0.0", - "typescript": "^4.1.3" - }, - "files": [ - "lib/**/*" - ] -} diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/BlockVeins.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/BlockVeins.ts deleted file mode 100644 index ae5542ce3a..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/BlockVeins.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Bot } from 'mineflayer' -import { Block } from 'prismarine-block' - -export function findFromVein (bot: Bot, block: Block, maxBlocks: number, maxDistance: number, floodRadius: number): Block[] { - const targets: Block[] = [] - const open: Block[] = [block] - const type = block.type - const center = block.position - - for (let i = 0; i < maxBlocks; i++) { - const next = open.pop() - if (next == null) break - - targets.push(next) - - for (let x = -floodRadius; x <= floodRadius; x++) { - for (let y = -floodRadius; y <= floodRadius; y++) { - for (let z = -floodRadius; z <= floodRadius; z++) { - const neighborPos = next.position.offset(x, y, z) - if (neighborPos.manhattanDistanceTo(center) > maxDistance) continue - - const neighbor = bot.blockAt(neighborPos) - if (neighbor == null || neighbor.type !== type) continue - - if (targets.includes(neighbor)) continue - if (open.includes(neighbor)) continue - - open.push(neighbor) - } - } - } - } - - return targets -} diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/CollectBlock.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/CollectBlock.ts deleted file mode 100644 index d2be87822f..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/CollectBlock.ts +++ /dev/null @@ -1,451 +0,0 @@ -import { Bot } from "mineflayer"; -import { Block } from "prismarine-block"; -import { Movements, goals } from "mineflayer-pathfinder"; -import { TemporarySubscriber } from "./TemporarySubscriber"; -import { Entity } from "prismarine-entity"; -import { error } from "./Util"; -import { Vec3 } from "vec3"; -import { emptyInventoryIfFull, ItemFilter } from "./Inventory"; -import { findFromVein } from "./BlockVeins"; -import { Collectable, Targets } from "./Targets"; -import { Item } from "prismarine-item"; -import mcDataLoader from "minecraft-data"; -import { once } from "events"; -import { callbackify } from "util"; - -export type Callback = (err?: Error) => void; - -async function collectAll( - bot: Bot, - options: CollectOptionsFull -): Promise { - let success_count = 0; - while (!options.targets.empty) { - await emptyInventoryIfFull( - bot, - options.chestLocations, - options.itemFilter - ); - const closest = options.targets.getClosest(); - if (closest == null) break; - switch (closest.constructor.name) { - case "Block": { - try { - if (success_count >= options.count) { - break; - } - await bot.tool.equipForBlock( - closest as Block, - equipToolOptions - ); - const goal = new goals.GoalLookAtBlock( - closest.position, - bot.world - ); - await bot.pathfinder.goto(goal); - await mineBlock(bot, closest as Block, options); - success_count++; - // TODO: options.ignoreNoPath - } catch (err) { - // @ts-ignore - // console.log(err.stack) - // bot.pathfinder.stop() - // bot.waitForTicks(10) - try { - bot.pathfinder.setGoal(null); - } catch (err) {} - if (options.ignoreNoPath) { - // @ts-ignore - if (err.name === "Invalid block") { - console.log( - `Block ${closest.name} at ${closest.position} is not valid! Skip it!` - ); - } // @ts-ignore - else if (err.name === "Unsafe block") { - console.log( - `${closest.name} at ${closest.position} is not safe to break! Skip it!` - ); - // @ts-ignore - } else if (err.name === "NoItem") { - const properties = - bot.registry.blocksByName[closest.name]; - const leastTool = Object.keys( - properties.harvestTools - )[0]; - const item = bot.registry.items[leastTool]; - bot.chat( - `I need at least a ${item.name} to mine ${closest.name}! Skip it!` - ); - return; - } else if ( - // @ts-ignore - err.name === "NoPath" || - // @ts-ignore - err.name === "Timeout" - ) { - if ( - bot.entity.position.distanceTo( - closest.position - ) < 0.5 - ) { - await mineBlock(bot, closest as Block, options); - break; - } - console.log( - `No path to ${closest.name} at ${closest.position}! Skip it!` - ); - // @ts-ignore - } else if (err.message === "Digging aborted") { - console.log(`Digging aborted! Skip it!`); - } else { - // @ts-ignore - bot.chat(`Error: ${err.message}`); - } - break; - } - throw err; - } - break; - } - case "Entity": { - // Don't collect any entities that are marked as 'invalid' - if (!(closest as Entity).isValid) break; - try { - const tempEvents = new TemporarySubscriber(bot); - const waitForPickup = new Promise( - (resolve, reject) => { - const timeout = setTimeout(() => { - // After 10 seconds, reject the promise - clearTimeout(timeout); - tempEvents.cleanup(); - reject(new Error("Failed to pickup item")); - }, 10000); - tempEvents.subscribeTo( - "entityGone", - (entity: Entity) => { - if (entity === closest) { - clearTimeout(timeout); - tempEvents.cleanup(); - resolve(); - } - } - ); - } - ); - bot.pathfinder.setGoal( - new goals.GoalFollow(closest as Entity, 0) - ); - // await bot.pathfinder.goto(new goals.GoalBlock(closest.position.x, closest.position.y, closest.position.z)) - await waitForPickup; - } catch (err) { - // @ts-ignore - console.log(err.stack); - try { - bot.pathfinder.setGoal(null); - } catch (err) {} - if (options.ignoreNoPath) { - // @ts-ignore - if (err.message === "Failed to pickup item") { - bot.chat(`Failed to pickup item! Skip it!`); - } - break; - } - throw err; - } - break; - } - default: { - throw error( - "UnknownType", - `Target ${closest.constructor.name} is not a Block or Entity!` - ); - } - } - options.targets.removeTarget(closest); - } - bot.chat(`Collect finish!`); -} - -const equipToolOptions = { - requireHarvest: true, - getFromChest: false, - maxTools: 2, -}; - -async function mineBlock( - bot: Bot, - block: Block, - options: CollectOptionsFull -): Promise { - if ( - bot.blockAt(block.position)?.type !== block.type || - bot.blockAt(block.position)?.type === 0 - ) { - options.targets.removeTarget(block); - throw error("Invalid block", "Block is not valid!"); - // @ts-expect-error - } else if (!bot.pathfinder.movements.safeToBreak(block)) { - options.targets.removeTarget(block); - throw error("Unsafe block", "Block is not safe to break!"); - } - - await bot.tool.equipForBlock(block, equipToolOptions); - - if (!block.canHarvest(bot.heldItem ? bot.heldItem.type : bot.heldItem)) { - options.targets.removeTarget(block); - throw error("NoItem", "Bot does not have a harvestable tool!"); - } - - const tempEvents = new TemporarySubscriber(bot); - tempEvents.subscribeTo("itemDrop", (entity: Entity) => { - if ( - entity.position.distanceTo(block.position.offset(0.5, 0.5, 0.5)) <= - 0.5 - ) { - options.targets.appendTarget(entity); - } - }); - try { - await bot.dig(block); - // Waiting for items to drop - await new Promise((resolve) => { - let remainingTicks = 10; - tempEvents.subscribeTo("physicTick", () => { - remainingTicks--; - if (remainingTicks <= 0) { - tempEvents.cleanup(); - resolve(); - } - }); - }); - } finally { - tempEvents.cleanup(); - } -} - -/** - * A set of options to apply when collecting the given targets. - */ -export interface CollectOptions { - /** - * If true, the target(s) will be appended to the existing target list instead of - * starting a new task. Defaults to false. - */ - append?: boolean; - - /** - * If true, errors will not be thrown when a path to the target block cannot - * be found. The bot will attempt to choose the best available position it - * can find, instead. Errors are still thrown if the bot cannot interact with - * the block from it's final location. Defaults to false. - */ - ignoreNoPath?: boolean; - - /** - * Gets the list of chest locations to use when storing items after the bot's - * inventory becomes full. If undefined, it defaults to the chest location - * list on the bot.collectBlock plugin. - */ - chestLocations?: Vec3[]; - - /** - * When transferring items to a chest, this filter is used to determine what - * items are allowed to be moved, and what items aren't allowed to be moved. - * Defaults to the item filter specified on the bot.collectBlock plugin. - */ - itemFilter?: ItemFilter; - - /** - * The total number of items to collect - */ - count?: number; -} - -/** - * A version of collect options where all values are assigned. - */ -interface CollectOptionsFull { - append: boolean; - ignoreNoPath: boolean; - chestLocations: Vec3[]; - itemFilter: ItemFilter; - targets: Targets; - count: number; -} - -/** - * The collect block plugin. - */ -export class CollectBlock { - /** - * The bot. - */ - private readonly bot: Bot; - - /** - * The list of active targets being collected. - */ - private readonly targets: Targets; - - /** - * The movements configuration to be sent to the pathfinder plugin. - */ - movements?: Movements; - - /** - * A list of chest locations which the bot is allowed to empty their inventory into - * if it becomes full while the bot is collecting resources. - */ - chestLocations: Vec3[] = []; - - /** - * When collecting items, this filter is used to determine what items should be placed - * into a chest if the bot's inventory becomes full. By default, returns true for all - * items except for tools, weapons, and armor. - * - * @param item - The item stack in the bot's inventory to check. - * - * @returns True if the item should be moved into the chest. False otherwise. - */ - itemFilter: ItemFilter = (item: Item) => { - if (item.name.includes("helmet")) return false; - if (item.name.includes("chestplate")) return false; - if (item.name.includes("leggings")) return false; - if (item.name.includes("boots")) return false; - if (item.name.includes("shield")) return false; - if (item.name.includes("sword")) return false; - if (item.name.includes("pickaxe")) return false; - if (item.name.includes("axe")) return false; - if (item.name.includes("shovel")) return false; - if (item.name.includes("hoe")) return false; - return true; - }; - - /** - * Creates a new instance of the create block plugin. - * - * @param bot - The bot this plugin is acting on. - */ - constructor(bot: Bot) { - this.bot = bot; - this.targets = new Targets(bot); - // @ts-ignore - this.movements = new Movements(bot, mcDataLoader(bot.version)); - } - - /** - * If target is a block: - * Causes the bot to break and collect the target block. - * - * If target is an item drop: - * Causes the bot to collect the item drop. - * - * If target is an array containing items or blocks, preforms the correct action for - * all targets in that array sorting dynamically by distance. - * - * @param target - The block(s) or item(s) to collect. - * @param options - The set of options to use when handling these targets - * @param cb - The callback that is called finished. - */ - async collect( - target: Collectable | Collectable[], - options: CollectOptions | Callback = {}, - cb?: Callback - ): Promise { - if (typeof options === "function") { - cb = options; - options = {}; - } - // @ts-expect-error - if (cb != null) return callbackify(this.collect)(target, options, cb); - - const optionsFull: CollectOptionsFull = { - append: options.append ?? false, - ignoreNoPath: options.ignoreNoPath ?? false, - chestLocations: options.chestLocations ?? this.chestLocations, - itemFilter: options.itemFilter ?? this.itemFilter, - targets: this.targets, - count: options.count ?? Infinity, - }; - - if (this.bot.pathfinder == null) { - throw error( - "UnresolvedDependency", - "The mineflayer-collectblock plugin relies on the mineflayer-pathfinder plugin to run!" - ); - } - - if (this.bot.tool == null) { - throw error( - "UnresolvedDependency", - "The mineflayer-collectblock plugin relies on the mineflayer-tool plugin to run!" - ); - } - - if (this.movements != null) { - this.bot.pathfinder.setMovements(this.movements); - } - - if (!optionsFull.append) await this.cancelTask(); - if (Array.isArray(target)) { - this.targets.appendTargets(target); - } else { - this.targets.appendTarget(target); - } - - try { - await collectAll(this.bot, optionsFull); - this.targets.clear(); - } catch (err) { - this.targets.clear(); - // Ignore path stopped error for cancelTask to work properly (imo we shouldn't throw any pathing errors) - // @ts-expect-error - if (err.name !== "PathStopped") throw err; - } finally { - // @ts-expect-error - this.bot.emit("collectBlock_finished"); - } - } - - /** - * Loads all touching blocks of the same type to the given block and returns them as an array. - * This effectively acts as a flood fill algorithm to retrieve blocks in the same ore vein and similar. - * - * @param block - The starting block. - * @param maxBlocks - The maximum number of blocks to look for before stopping. - * @param maxDistance - The max distance from the starting block to look. - * @param floodRadius - The max distance distance from block A to block B to be considered "touching" - */ - findFromVein( - block: Block, - maxBlocks = 100, - maxDistance = 16, - floodRadius = 1 - ): Block[] { - return findFromVein( - this.bot, - block, - maxBlocks, - maxDistance, - floodRadius - ); - } - - /** - * Cancels the current collection task, if still active. - * - * @param cb - The callback to use when the task is stopped. - */ - async cancelTask(cb?: Callback): Promise { - if (this.targets.empty) { - if (cb != null) cb(); - return await Promise.resolve(); - } - this.bot.pathfinder.stop(); - if (cb != null) { - // @ts-expect-error - this.bot.once("collectBlock_finished", cb); - } - await once(this.bot, "collectBlock_finished"); - } -} diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Inventory.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Inventory.ts deleted file mode 100644 index 6a17d0cc52..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Inventory.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Bot } from 'mineflayer' -import { Callback } from './CollectBlock' -import { Vec3 } from 'vec3' -import { error } from './Util' -import { Item } from 'prismarine-item' -import { goals } from 'mineflayer-pathfinder' -import { callbackify } from 'util' - -export type ItemFilter = (item: Item) => boolean - -function getClosestChest (bot: Bot, chestLocations: Vec3[]): Vec3 | null { - let chest = null - let distance = 0 - - for (const c of chestLocations) { - const dist = c.distanceTo(bot.entity.position) - if (chest == null || dist < distance) { - chest = c - distance = dist - } - } - - if (chest != null) { - chestLocations.splice(chestLocations.indexOf(chest), 1) - } - - return chest -} - -export async function emptyInventoryIfFull (bot: Bot, chestLocations: Vec3[], itemFilter: ItemFilter, cb?: Callback): Promise { - // @ts-expect-error - if (cb != null) return callbackify(emptyInventoryIfFull)(bot, chestLocations, cb) - if (bot.inventory.emptySlotCount() > 0) return - return await emptyInventory(bot, chestLocations, itemFilter) -} - -export async function emptyInventory (bot: Bot, chestLocations: Vec3[], itemFilter: ItemFilter, cb?: Callback): Promise { - // @ts-expect-error - if (cb != null) return callbackify(emptyInventory)(bot, chestLocations, cb) - if (chestLocations.length === 0) { - throw error('NoChests', 'There are no defined chest locations!') - } - - // Shallow clone so we can safely remove chests from the list that are full. - chestLocations = [...chestLocations] - - while (true) { - const chest = getClosestChest(bot, chestLocations) - if (chest == null) { - throw error('NoChests', 'All chests are full.') - } - const hasRemaining = await tryEmptyInventory(bot, chest, itemFilter) - if (!hasRemaining) return - } -} - -async function tryEmptyInventory (bot: Bot, chestLocation: Vec3, itemFilter: ItemFilter, cb?: (err: Error | undefined, hasRemaining: boolean) => void): Promise { - // @ts-expect-error - if (cb != null) return callbackify(tryEmptyInventory)(bot, chestLocation, itemFilter, cb) - await gotoChest(bot, chestLocation) - return await placeItems(bot, chestLocation, itemFilter) -} - -async function gotoChest (bot: Bot, location: Vec3, cb?: Callback): Promise { - // @ts-expect-error - if (cb != null) return callbackify(gotoChest)(bot, location) - await bot.pathfinder.goto(new goals.GoalGetToBlock(location.x, location.y, location.z)) -} - -async function placeItems (bot: Bot, chestPos: Vec3, itemFilter: ItemFilter, cb?: (err: Error | undefined, hasRemaining: boolean) => void): Promise { - // @ts-expect-error - if (cb != null) return callbackify(placeItems)(bot, chestPos, itemFilter, cb) - const chestBlock = bot.blockAt(chestPos) - if (chestBlock == null) { - throw error('UnloadedChunk', 'Chest is in an unloaded chunk!') - } - const chest = await bot.openChest(chestBlock) - for (const item of bot.inventory.items()) { - if (!itemFilter(item)) continue - if (chest.firstEmptyContainerSlot() === null) { - // We have items that didn't fit. - return true - } - await chest.deposit(item.type, item.metadata, item.count) - } - return false -} diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Targets.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Targets.ts deleted file mode 100644 index 568d07ad98..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Targets.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Bot } from 'mineflayer' -import { Block } from 'prismarine-block' -import { Entity } from 'prismarine-entity' - -export type Collectable = Block | Entity - -export class Targets { - private readonly bot: Bot - private targets: Collectable[] = [] - - constructor (bot: Bot) { - this.bot = bot - } - - appendTargets (targets: Collectable[]): void { - for (const target of targets) { - this.appendTarget(target) - } - } - - appendTarget (target: Collectable): void { - if (this.targets.includes(target)) return - this.targets.push(target) - } - - /** - * Gets the closest target to the bot in this list. - * - * @returns The closest target, or null if there are no targets. - */ - getClosest (): Collectable | null { - let closest: Collectable | null = null - let distance: number = 0 - - for (const target of this.targets) { - const dist = target.position.distanceTo(this.bot.entity.position) - - if (closest == null || dist < distance) { - closest = target - distance = dist - } - } - - return closest - } - - get empty (): boolean { - return this.targets.length === 0 - } - - clear (): void { - this.targets.length = 0 - } - - removeTarget (target: Collectable): void { - const index = this.targets.indexOf(target) - if (index < 0) return - this.targets.splice(index, 1) - } -} diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TaskQueue.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TaskQueue.ts deleted file mode 100644 index 81fe3bc5ae..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TaskQueue.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { Callback } from './index' -export type Task = (cb: Callback) => void -export type SyncTask = () => void - -/** - * A simple utility class for queuing up a series of async tasks to execute. - */ -export class TaskQueue { - private tasks: Task[] = [] - - /** - * If true, the task list will stop executing if one of the tasks throws an error. - */ - readonly stopOnError: boolean = true - - /** - * Adds a new async task to this queue. The provided callback should be executed when - * the async task is complete. - * - * @param task - The async task to add. - */ - add (task: Task): void { - this.tasks.push(task) - } - - /** - * Adds a synchronous task toi this queue. - * - * @param task - The sync task to add. - */ - addSync (task: SyncTask): void { - this.add((cb) => { - try { - task() - cb() - } catch (err: any) { - cb(err) - } - }) - } - - /** - * Runs all tasks currently in this queue and empties the queue. - * - * @param cb - The optional callback to be executed when all tasks in this queue have - * finished executing. - */ - runAll (cb?: Callback): void { - const taskList = this.tasks - this.tasks = [] - - let index = -1 - const runNext: () => void = () => { - index++ - if (index >= taskList.length) { - if (cb !== undefined) cb() - return - } - - try { - taskList[index]((err) => { - if (err !== undefined) { - if (cb !== undefined) cb(err) - - if (this.stopOnError) return - } - - runNext() - }) - } catch (err: any) { - if (cb !== undefined) cb(err) - } - } - - runNext() - } -} diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TemporarySubscriber.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TemporarySubscriber.ts deleted file mode 100644 index 3f14a607da..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/TemporarySubscriber.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Bot } from 'mineflayer' - -class Subscription { - constructor (readonly eventName: string, readonly callback: Function) {} -} - -export class TemporarySubscriber { - private readonly subscriptions: Subscription[] = [] - - constructor (readonly bot: Bot) {} - - /** - * Adds a new temporary event listener to the bot. - * - * @param event - The event to subscribe to. - * @param callback - The function to execute. - */ - subscribeTo (event: string, callback: Function): void { - this.subscriptions.push(new Subscription(event, callback)) - - // @ts-expect-error - this.bot.on(event, callback) - } - - /** - * Removes all attached event listeners from the bot. - */ - cleanup (): void { - for (const sub of this.subscriptions) { - // @ts-expect-error - this.bot.removeListener(sub.eventName, sub.callback) - } - } -} diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Util.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Util.ts deleted file mode 100644 index ee0f29e0cb..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/Util.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Creates a new error object with the given type and message. - * - * @param type - The error type. - * @param message - The error message. - * - * @returns The error object. - */ -export function error (type: string, message: string): Error { - const e = new Error(message) - e.name = type - return e -} diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/index.ts b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/index.ts deleted file mode 100644 index 45c9a85087..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/src/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Bot } from 'mineflayer' -import { CollectBlock } from './CollectBlock' -import { pathfinder as pathfinderPlugin } from 'mineflayer-pathfinder' -import { plugin as toolPlugin } from 'mineflayer-tool' - -export function plugin (bot: Bot): void { - // @ts-expect-error - bot.collectBlock = new CollectBlock(bot) - - // Load plugins if not loaded manually. - setTimeout(() => loadPathfinderPlugin(bot), 0) - setTimeout(() => loadToolPlugin(bot), 0) -} - -function loadPathfinderPlugin (bot: Bot): void { - if (bot.pathfinder != null) return - bot.loadPlugin(pathfinderPlugin) -} - -function loadToolPlugin (bot: Bot): void { - if (bot.tool != null) return - bot.loadPlugin(toolPlugin) -} - -export { CollectBlock, Callback, CollectOptions } from './CollectBlock' diff --git a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/tsconfig.json b/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/tsconfig.json deleted file mode 100644 index a6076bc0c7..0000000000 --- a/metagpt/environment/minecraft/mineflayer/mineflayer-collectblock/tsconfig.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ - // "lib": [], /* Specify library files to be included in the compilation. */ - "allowJs": true, /* Allow javascript files to be compiled. */ - "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true, - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./lib", - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - /* Strict Type-Checking Options */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - /* Additional Checks */ - "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - /* Advanced Options */ - "skipLibCheck": true, /* Skip type checking of declaration files. */ - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - }, - "include": [ - "src" - ], - "exclude": [ - "node_modules", - "**/__tests__/*" - ] -} \ No newline at end of file diff --git a/metagpt/environment/minecraft/mineflayer/package.json b/metagpt/environment/minecraft/mineflayer/package.json deleted file mode 100644 index 9e389d268c..0000000000 --- a/metagpt/environment/minecraft/mineflayer/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "voyager", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "body-parser": "^1.20.2", - "express": "^4.18.2", - "magic-string": "^0.30.0", - "minecraft-data": "^3.31.0", - "minecrafthawkeye": "^1.3.6", - "mineflayer": "^4.8.1", - "mineflayer-collectblock": "file:mineflayer-collectblock", - "mineflayer-pathfinder": "^2.4.2", - "mineflayer-pvp": "^1.3.2", - "mineflayer-tool": "^1.2.0", - "mocha": "^10.2.0", - "prismarine-biome": "^1.3.0", - "prismarine-block": "=1.16.3", - "prismarine-entity": "^2.2.0", - "prismarine-item": "^1.12.1", - "prismarine-nbt": "^2.2.1", - "prismarine-recipe": "^1.3.1", - "prismarine-viewer": "^1.24.0", - "typescript": "^4.9.5", - "vec3": "^0.1.8", - "graceful-fs": "^4.2.11" - }, - "devDependencies": { - "prettier": "2.8.5" - } -} diff --git a/metagpt/environment/minecraft/process_monitor.py b/metagpt/environment/minecraft/process_monitor.py deleted file mode 100644 index b62aa60050..0000000000 --- a/metagpt/environment/minecraft/process_monitor.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# refs to `voyager process_monitor.py` - -import re -import subprocess -import threading -import warnings -from typing import List - -import psutil - -from metagpt.logs import define_log_level - - -class SubprocessMonitor: - def __init__( - self, - commands: List[str], - name: str, - ready_match: str = r".*", - callback_match: str = r"^(?!x)x$", # regex that will never match - callback: callable = None, - finished_callback: callable = None, - ): - self.commands = commands - self.name = name - self.logger = define_log_level(name=name) - self.process = None - self.ready_match = ready_match - self.ready_event = None - self.ready_line = None - self.callback_match = callback_match - self.callback = callback - self.finished_callback = finished_callback - self.thread = None - - def _start(self): - self.logger.info(f"Starting subprocess with commands: {self.commands}") - - self.process = psutil.Popen( - self.commands, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - universal_newlines=True, - ) - self.logger.info(f"Subprocess {self.name} started with PID {self.process.pid}.") - for line in iter(self.process.stdout.readline, ""): - self.logger.info(line.strip()) - if re.search(self.ready_match, line): - self.ready_line = line - self.logger.info("Subprocess is ready.") - self.ready_event.set() - if re.search(self.callback_match, line): - self.callback() - if not self.ready_event.is_set(): - self.ready_event.set() - warnings.warn(f"Subprocess {self.name} failed to start.") - if self.finished_callback: - self.finished_callback() - - def run(self): - self.ready_event = threading.Event() - self.ready_line = None - self.thread = threading.Thread(target=self._start) - self.thread.start() - self.ready_event.wait() - - def stop(self): - self.logger.info("Stopping subprocess.") - if self.process and self.process.is_running(): - self.process.terminate() - self.process.wait() - - @property - def is_running(self): - if self.process is None: - return False - return self.process.is_running() diff --git a/metagpt/environment/stanford_town/__init__.py b/metagpt/environment/stanford_town/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/environment/stanford_town/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : diff --git a/metagpt/environment/stanford_town/env_space.py b/metagpt/environment/stanford_town/env_space.py deleted file mode 100644 index 1741cccfe8..0000000000 --- a/metagpt/environment/stanford_town/env_space.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/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.base.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 deleted file mode 100644 index af8a882b2d..0000000000 --- a/metagpt/environment/stanford_town/stanford_town_env.py +++ /dev/null @@ -1,10 +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.stanford_town_ext_env import StanfordTownExtEnv - - -class StanfordTownEnv(StanfordTownExtEnv, Environment): - pass diff --git a/metagpt/environment/stanford_town/stanford_town_ext_env.py b/metagpt/environment/stanford_town/stanford_town_ext_env.py deleted file mode 100644 index 30a02d4dbe..0000000000 --- a/metagpt/environment/stanford_town/stanford_town_ext_env.py +++ /dev/null @@ -1,451 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : The StanfordTown external environment to interate with the web interface -# refs to `generative_agents maze.py` - -import math -from pathlib import Path -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 - - -class StanfordTownExtEnv(ExtEnv): - model_config = ConfigDict(arbitrary_types_allowed=True) - - maze_asset_path: Optional[Path] = Field(default=None, description="the path to store maze assets") - maze_width: int = Field(default=140, description="maze map width") - maze_height: int = Field(default=100, description="maze map height") - sq_tile_size: int = Field(default=32, description="the pixel height/width of a tile") - special_constraint: str = Field( - default="", description="a string description of any relevant special constraints " "the world might have" - ) - tiles: list[list[dict]] = Field(default=[]) - address_tiles: dict[str, set] = Field(default=dict()) - collision_maze: list[list] = Field(default=[]) - - @model_validator(mode="before") - @classmethod - def _init_maze(cls, values): - maze_asset_path = values["maze_asset_path"] - assert maze_asset_path - maze_asset_path = Path(maze_asset_path) - - maze_matrix_path = maze_asset_path.joinpath("matrix") - meta_info = read_json_file(maze_matrix_path.joinpath("maze_meta_info.json")) - - maze_width = int(meta_info["maze_width"]) - maze_height = int(meta_info["maze_height"]) - values["maze_width"] = maze_width - values["maze_height"] = maze_height - values["sq_tile_size"] = int(meta_info["sq_tile_size"]) - values["special_constraint"] = meta_info["special_constraint"] - - # READING IN SPECIAL BLOCKS - # Special blocks are those that are colored in the Tiled map. - # Here is an example row for the arena block file: - # e.g, "25331, Double Studio, Studio, Bedroom 2, Painting" - - blocks_folder = maze_matrix_path.joinpath("special_blocks") - - _wb = blocks_folder.joinpath("world_blocks.csv") - wb_rows = read_csv_to_list(_wb, header=False) - wb = wb_rows[0][-1] - - _sb = blocks_folder.joinpath("sector_blocks.csv") - sb_rows = read_csv_to_list(_sb, header=False) - sb_dict = dict() - for i in sb_rows: - sb_dict[i[0]] = i[-1] - - _ab = blocks_folder.joinpath("arena_blocks.csv") - ab_rows = read_csv_to_list(_ab, header=False) - ab_dict = dict() - for i in ab_rows: - ab_dict[i[0]] = i[-1] - - _gob = blocks_folder.joinpath("game_object_blocks.csv") - gob_rows = read_csv_to_list(_gob, header=False) - gob_dict = dict() - for i in gob_rows: - gob_dict[i[0]] = i[-1] - - _slb = blocks_folder.joinpath("spawning_location_blocks.csv") - slb_rows = read_csv_to_list(_slb, header=False) - slb_dict = dict() - for i in slb_rows: - slb_dict[i[0]] = i[-1] - - # [SECTION 3] Reading in the matrices - # This is your typical two dimensional matrices. It's made up of 0s and - # the number that represents the color block from the blocks folder. - maze_folder = maze_matrix_path.joinpath("maze") - - _cm = maze_folder.joinpath("collision_maze.csv") - collision_maze_raw = read_csv_to_list(_cm, header=False)[0] - _sm = maze_folder.joinpath("sector_maze.csv") - sector_maze_raw = read_csv_to_list(_sm, header=False)[0] - _am = maze_folder.joinpath("arena_maze.csv") - arena_maze_raw = read_csv_to_list(_am, header=False)[0] - _gom = maze_folder.joinpath("game_object_maze.csv") - game_object_maze_raw = read_csv_to_list(_gom, header=False)[0] - _slm = maze_folder.joinpath("spawning_location_maze.csv") - spawning_location_maze_raw = read_csv_to_list(_slm, header=False)[0] - - # Loading the maze. The mazes are taken directly from the json exports of - # Tiled maps. They should be in csv format. - # Importantly, they are "not" in a 2-d matrix format -- they are single - # row matrices with the length of width x height of the maze. So we need - # to convert here. - # example format: [['0', '0', ... '25309', '0',...], ['0',...]...] - # 25309 is the collision bar number right now. - collision_maze = [] - sector_maze = [] - arena_maze = [] - game_object_maze = [] - spawning_location_maze = [] - for i in range(0, len(collision_maze_raw), maze_width): - tw = maze_width - collision_maze += [collision_maze_raw[i : i + tw]] - sector_maze += [sector_maze_raw[i : i + tw]] - arena_maze += [arena_maze_raw[i : i + tw]] - game_object_maze += [game_object_maze_raw[i : i + tw]] - spawning_location_maze += [spawning_location_maze_raw[i : i + tw]] - values["collision_maze"] = collision_maze - - tiles = [] - for i in range(maze_height): - row = [] - for j in range(maze_width): - tile_details = dict() - tile_details["world"] = wb - - tile_details["sector"] = "" - if sector_maze[i][j] in sb_dict: - tile_details["sector"] = sb_dict[sector_maze[i][j]] - - tile_details["arena"] = "" - if arena_maze[i][j] in ab_dict: - tile_details["arena"] = ab_dict[arena_maze[i][j]] - - tile_details["game_object"] = "" - if game_object_maze[i][j] in gob_dict: - tile_details["game_object"] = gob_dict[game_object_maze[i][j]] - - tile_details["spawning_location"] = "" - if spawning_location_maze[i][j] in slb_dict: - tile_details["spawning_location"] = slb_dict[spawning_location_maze[i][j]] - - tile_details["collision"] = False - if collision_maze[i][j] != "0": - tile_details["collision"] = True - - tile_details["events"] = set() - - row += [tile_details] - tiles += [row] - values["tiles"] = tiles - - # Each game object occupies an event in the tile. We are setting up the - # default event value here. - for i in range(maze_height): - for j in range(maze_width): - if tiles[i][j]["game_object"]: - object_name = ":".join( - [tiles[i][j]["world"], tiles[i][j]["sector"], tiles[i][j]["arena"], tiles[i][j]["game_object"]] - ) - go_event = (object_name, None, None, None) - tiles[i][j]["events"].add(go_event) - - # Reverse tile access. - # -- given a string address, we return a set of all - # tile coordinates belonging to that address (this is opposite of - # tiles that give you the string address given a coordinate). This is - # an optimization component for finding paths for the personas' movement. - # address_tiles['bedroom-2-a'] == {(58, 9)} - # address_tiles['double studio:recreation:pool table'] - # == {(29, 14), (31, 11), (30, 14), (32, 11), ...}, - address_tiles = dict() - for i in range(maze_height): - for j in range(maze_width): - addresses = [] - if tiles[i][j]["sector"]: - add = f'{tiles[i][j]["world"]}:' - add += f'{tiles[i][j]["sector"]}' - addresses += [add] - if tiles[i][j]["arena"]: - add = f'{tiles[i][j]["world"]}:' - add += f'{tiles[i][j]["sector"]}:' - add += f'{tiles[i][j]["arena"]}' - addresses += [add] - if tiles[i][j]["game_object"]: - add = f'{tiles[i][j]["world"]}:' - add += f'{tiles[i][j]["sector"]}:' - add += f'{tiles[i][j]["arena"]}:' - add += f'{tiles[i][j]["game_object"]}' - addresses += [add] - if tiles[i][j]["spawning_location"]: - add = f'{tiles[i][j]["spawning_location"]}' - addresses += [add] - - for add in addresses: - if add in address_tiles: - address_tiles[add].add((j, i)) - 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 - - @mark_as_readable - def get_collision_maze(self) -> list: - return self.collision_maze - - @mark_as_readable - def get_address_tiles(self) -> dict: - return self.address_tiles - - @mark_as_readable - def access_tile(self, tile: tuple[int, int]) -> dict: - """ - Returns the tiles details dictionary that is stored in self.tiles of the - designated x, y location. - - INPUT - tile: The tile coordinate of our interest in (x, y) form. - OUTPUT - The tile detail dictionary for the designated tile. - EXAMPLE OUTPUT - Given (58, 9), - self.tiles[9][58] = {'world': 'double studio', - 'sector': 'double studio', 'arena': 'bedroom 2', - 'game_object': 'bed', 'spawning_location': 'bedroom-2-a', - 'collision': False, - 'events': {('double studio:double studio:bedroom 2:bed', - None, None)}} - """ - x = tile[0] - y = tile[1] - return self.tiles[y][x] - - @mark_as_readable - def get_tile_path(self, tile: tuple[int, int], level: str) -> str: - """ - Get the tile string address given its coordinate. You designate the level - by giving it a string level description. - - INPUT: - tile: The tile coordinate of our interest in (x, y) form. - level: world, sector, arena, or game object - OUTPUT - The string address for the tile. - EXAMPLE OUTPUT - Given tile=(58, 9), and level=arena, - "double studio:double studio:bedroom 2" - """ - x = tile[0] - y = tile[1] - tile = self.tiles[y][x] - - path = f"{tile['world']}" - if level == "world": - return path - else: - path += f":{tile['sector']}" - - if level == "sector": - return path - else: - path += f":{tile['arena']}" - - if level == "arena": - return path - else: - path += f":{tile['game_object']}" - - return path - - @mark_as_readable - def get_nearby_tiles(self, tile: tuple[int, int], vision_r: int) -> list[tuple[int, int]]: - """ - Given the current tile and vision_r, return a list of tiles that are - within the radius. Note that this implementation looks at a square - boundary when determining what is within the radius. - i.e., for vision_r, returns x's. - x x x x x - x x x x x - x x P x x - x x x x x - x x x x x - - INPUT: - tile: The tile coordinate of our interest in (x, y) form. - vision_r: The radius of the persona's vision. - OUTPUT: - nearby_tiles: a list of tiles that are within the radius. - """ - left_end = 0 - if tile[0] - vision_r > left_end: - left_end = tile[0] - vision_r - - right_end = self.maze_width - 1 - if tile[0] + vision_r + 1 < right_end: - right_end = tile[0] + vision_r + 1 - - bottom_end = self.maze_height - 1 - if tile[1] + vision_r + 1 < bottom_end: - bottom_end = tile[1] + vision_r + 1 - - top_end = 0 - if tile[1] - vision_r > top_end: - top_end = tile[1] - vision_r - - nearby_tiles = [] - for i in range(left_end, right_end): - for j in range(top_end, bottom_end): - nearby_tiles += [(i, j)] - return nearby_tiles - - @mark_as_writeable - def add_event_from_tile(self, curr_event: tuple[str], tile: tuple[int, int]) -> None: - """ - Add an event triple to a tile. - - INPUT: - curr_event: Current event triple. - e.g., ('double studio:double studio:bedroom 2:bed', None, - None) - tile: The tile coordinate of our interest in (x, y) form. - OUPUT: - None - """ - self.tiles[tile[1]][tile[0]]["events"].add(curr_event) - - @mark_as_writeable - def remove_event_from_tile(self, curr_event: tuple[str], tile: tuple[int, int]) -> None: - """dswaq - Remove an event triple from a tile. - - INPUT: - curr_event: Current event triple. - e.g., ('double studio:double studio:bedroom 2:bed', None, - None) - tile: The tile coordinate of our interest in (x, y) form. - OUPUT: - None - """ - curr_tile_ev_cp = self.tiles[tile[1]][tile[0]]["events"].copy() - for event in curr_tile_ev_cp: - if event == curr_event: - self.tiles[tile[1]][tile[0]]["events"].remove(event) - - @mark_as_writeable - def turn_event_from_tile_idle(self, curr_event: tuple[str], tile: tuple[int, int]) -> None: - curr_tile_ev_cp = self.tiles[tile[1]][tile[0]]["events"].copy() - for event in curr_tile_ev_cp: - if event == curr_event: - self.tiles[tile[1]][tile[0]]["events"].remove(event) - new_event = (event[0], None, None, None) - self.tiles[tile[1]][tile[0]]["events"].add(new_event) - - @mark_as_writeable - def remove_subject_events_from_tile(self, subject: str, tile: tuple[int, int]) -> None: - """ - Remove an event triple that has the input subject from a tile. - - INPUT: - subject: "Isabella Rodriguez" - tile: The tile coordinate of our interest in (x, y) form. - OUPUT: - None - """ - curr_tile_ev_cp = self.tiles[tile[1]][tile[0]]["events"].copy() - for event in curr_tile_ev_cp: - if event[0] == subject: - self.tiles[tile[1]][tile[0]]["events"].remove(event) diff --git a/metagpt/environment/werewolf/__init__.py b/metagpt/environment/werewolf/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/environment/werewolf/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : diff --git a/metagpt/environment/werewolf/const.py b/metagpt/environment/werewolf/const.py deleted file mode 100644 index 7f810389da..0000000000 --- a/metagpt/environment/werewolf/const.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/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 deleted file mode 100644 index dd6ceeabed..0000000000 --- a/metagpt/environment/werewolf/env_space.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/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.base.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 deleted file mode 100644 index 999ff63a1c..0000000000 --- a/metagpt/environment/werewolf/werewolf_env.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/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/werewolf_ext_env.py b/metagpt/environment/werewolf/werewolf_ext_env.py deleted file mode 100644 index c5ecb8b345..0000000000 --- a/metagpt/environment/werewolf/werewolf_ext_env.py +++ /dev/null @@ -1,334 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : The werewolf game external environment to integrate with - -import random -from collections import Counter -from typing import Any, Callable, Optional - -from pydantic import ConfigDict, Field - -from metagpt.base.base_env_space import BaseEnvObsParams -from metagpt.environment.base_env import ExtEnv, mark_as_readable, mark_as_writeable -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 WerewolfExtEnv(ExtEnv): - model_config = ConfigDict(arbitrary_types_allowed=True) - - players_state: dict[str, tuple[str, RoleState]] = Field( - 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: list[int] = Field(default=[]) - per_round_steps: int = Field(default=len(STEP_INSTRUCTIONS)) - - # game global states - game_setup: str = Field(default="", description="game setup including role and its num") - 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, 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_factory=dict, description="nighttime wolf hunt result") - round_votes: dict[str, str] = Field( - 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) - is_hunted_player_saved: bool = Field(default=False) - 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 = [] - for name, roletype_state in self.players_state.items(): - if roletype_state[1] in [RoleState.ALIVE, RoleState.SAVED]: - player_names.append(name) - return player_names - - def _role_type_players(self, role_type: str) -> list[str]: - """return player name of particular role type""" - player_names = [] - for name, roletype_state in self.players_state.items(): - if role_type in roletype_state[0]: - player_names.append(name) - return player_names - - @property - def werewolf_players(self) -> list[str]: - 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=RoleType.VILLAGER.value) - return player_names - - def _init_players_state(self, players: list["Role"]): - for play in players: - self.players_state[play.name] = (play.profile, RoleState.ALIVE) - - self.special_role_players = [ - p for p in self.living_players if p not in self.werewolf_players + self.villager_players - ] - - def init_game_setup( - self, - role_uniq_objs: list[object], - num_villager: int = 2, - num_werewolf: int = 2, - shuffle=True, - add_human=False, - use_reflection=True, - use_experience=False, - use_memory_selection=False, - new_experience_version="", - prepare_human_player=Callable, - ) -> tuple[str, list]: - """init players using different roles' num""" - role_objs = [] - for role_obj in role_uniq_objs: - if RoleType.VILLAGER.value in str(role_obj): - role_objs.extend([role_obj] * num_villager) - 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(role_objs) - if add_human: - assigned_role_idx = random.randint(0, len(role_objs) - 1) - assigned_role = role_objs[assigned_role_idx] - role_objs[assigned_role_idx] = prepare_human_player(assigned_role) # TODO - - players = [ - role( - name=f"Player{i + 1}", - use_reflection=use_reflection, - use_experience=use_experience, - use_memory_selection=use_memory_selection, - new_experience_version=new_experience_version, - ) - for i, role in enumerate(role_objs) - ] - - if add_human: - logger.info(f"You are assigned {players[assigned_role_idx].name}({players[assigned_role_idx].profile})") - - game_setup = ["Game setup:"] + [f"{player.name}: {player.profile}," for player in players] - self.game_setup = "\n".join(game_setup) - - self._init_players_state(players) # init players state - - return self.game_setup, players - - def _update_players_state(self, player_names: list[str], state: RoleState = RoleState.KILLED): - for player_name in player_names: - if player_name in self.players_state: - roletype_state = self.players_state[player_name] - self.players_state[player_name] = (roletype_state[0], state) - - 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 - # particular_step = 15, not nighttime hunt time, ignore - return False - if player_name not in self.living_players: - return False - return True - - @mark_as_readable - def curr_step_instruction(self) -> dict: - step_idx = self.step_idx % len(STEP_INSTRUCTIONS) - instruction = STEP_INSTRUCTIONS[step_idx] - 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 = { - player_name: self.players_state[player_name][1] # only return role state - for player_name in player_names - if player_name in self.players_state - } - return players_state - - @mark_as_writeable - 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(voter_name, particular_step=18): # 18=step no - return - - 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) - - @mark_as_writeable - 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=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] - # 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] - self.player_hunted = player_name - - 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 - - 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_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.player_protected = player_name - - @mark_as_writeable - 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 - else: - self.eval_step_idx.append(self.step_idx) # record evaluation, avoid repetitive evaluation at the same step - - if step_idx == 15: # step no - # night ends: after all special roles acted, process the whole night - self.player_current_dead = [] # reset - - if self.player_hunted != self.player_protected and not self.is_hunted_player_saved: - self.player_current_dead.append(self.player_hunted) - if self.player_poisoned: - self.player_current_dead.append(self.player_poisoned) - - 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 - elif step_idx == 18: - # updated use vote_kill_someone - pass diff --git a/metagpt/exp_pool/__init__.py b/metagpt/exp_pool/__init__.py deleted file mode 100644 index 97d45a278b..0000000000 --- a/metagpt/exp_pool/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -"""Experience pool init.""" - -from metagpt.exp_pool.manager import get_exp_manager -from metagpt.exp_pool.decorator import exp_cache - -__all__ = ["get_exp_manager", "exp_cache"] diff --git a/metagpt/exp_pool/context_builders/__init__.py b/metagpt/exp_pool/context_builders/__init__.py deleted file mode 100644 index 047558be03..0000000000 --- a/metagpt/exp_pool/context_builders/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Context builders init.""" - -from metagpt.exp_pool.context_builders.base import BaseContextBuilder -from metagpt.exp_pool.context_builders.simple import SimpleContextBuilder -from metagpt.exp_pool.context_builders.role_zero import RoleZeroContextBuilder - -__all__ = ["BaseContextBuilder", "SimpleContextBuilder", "RoleZeroContextBuilder"] diff --git a/metagpt/exp_pool/perfect_judges/__init__.py b/metagpt/exp_pool/perfect_judges/__init__.py deleted file mode 100644 index d8796c7c85..0000000000 --- a/metagpt/exp_pool/perfect_judges/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -"""Perfect judges init.""" - -from metagpt.exp_pool.perfect_judges.base import BasePerfectJudge -from metagpt.exp_pool.perfect_judges.simple import SimplePerfectJudge - -__all__ = ["BasePerfectJudge", "SimplePerfectJudge"] diff --git a/metagpt/exp_pool/scorers/__init__.py b/metagpt/exp_pool/scorers/__init__.py deleted file mode 100644 index caa845b143..0000000000 --- a/metagpt/exp_pool/scorers/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -"""Scorers init.""" - -from metagpt.exp_pool.scorers.base import BaseScorer -from metagpt.exp_pool.scorers.simple import SimpleScorer - -__all__ = ["BaseScorer", "SimpleScorer"] diff --git a/metagpt/exp_pool/serializers/__init__.py b/metagpt/exp_pool/serializers/__init__.py deleted file mode 100644 index 8e1045588e..0000000000 --- a/metagpt/exp_pool/serializers/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -"""Serializers init.""" - -from metagpt.exp_pool.serializers.base import BaseSerializer -from metagpt.exp_pool.serializers.simple import SimpleSerializer -from metagpt.exp_pool.serializers.action_node import ActionNodeSerializer -from metagpt.exp_pool.serializers.role_zero import RoleZeroSerializer - - -__all__ = ["BaseSerializer", "SimpleSerializer", "ActionNodeSerializer", "RoleZeroSerializer"] diff --git a/metagpt/ext/__init__.py b/metagpt/ext/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/ext/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : diff --git a/metagpt/ext/aflow/benchmark/README.md b/metagpt/ext/aflow/benchmark/README.md deleted file mode 100644 index 4a2464fd12..0000000000 --- a/metagpt/ext/aflow/benchmark/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Custom Evaluation Function via Benchmark Class - -## How to Use - -To create a benchmark for a new dataset, follow these steps: - -1. Create a new Python file, e.g., `my_dataset_benchmark.py` -2. Import the base class: - ```python - from metagpt.ext.aflow.benchmark.benchmark import BaseBenchmark - ``` -3. Create a new class that inherits from `BaseBenchmark`: - ```python - class MyDatasetBenchmark(BaseBenchmark): - def __init__(self, name: str, file_path: str, log_path: str): - super().__init__(name, file_path, log_path) - ``` -4. Implement the required abstract methods: - - `evaluate_problem`: Evaluate a single problem - - `calculate_score`: Calculate the score for a prediction - - `get_result_columns`: Define column names for the results CSV file - -5. Override other methods as needed, such as `load_data` or `save_results_to_csv` - -## Example - -Refer to the `DROPBenchmark` class in the `drop.py` file for an example of how to implement a benchmark for a specific dataset. - -By following these guidelines, you can easily create custom benchmark evaluations for new datasets. diff --git a/metagpt/ext/aflow/benchmark/benchmark.py b/metagpt/ext/aflow/benchmark/benchmark.py deleted file mode 100644 index b5692f01e6..0000000000 --- a/metagpt/ext/aflow/benchmark/benchmark.py +++ /dev/null @@ -1,104 +0,0 @@ -import asyncio -import json -import os -from abc import ABC, abstractmethod -from datetime import datetime -from pathlib import Path -from typing import Any, Callable, List, Tuple - -import aiofiles -import pandas as pd -from tqdm.asyncio import tqdm_asyncio - -from metagpt.logs import logger -from metagpt.utils.common import write_json_file - - -class BaseBenchmark(ABC): - def __init__(self, name: str, file_path: str, log_path: str): - self.name = name - self.file_path = file_path - self.log_path = log_path - - PASS = "PASS" - FAIL = "FAIL" - - async def load_data(self, specific_indices: List[int] = None) -> List[dict]: - data = [] - async with aiofiles.open(self.file_path, mode="r", encoding="utf-8") as file: - async for line in file: - data.append(json.loads(line)) - if specific_indices is not None: - filtered_data = [data[i] for i in specific_indices if i < len(data)] - return filtered_data - return data - - def save_results_to_csv(self, results: List[Tuple[Any, ...]], columns: List[str]): - df = pd.DataFrame(results, columns=columns) - avg_score = df["score"].mean() - t_cost = df["cost"].max() - a_cost = t_cost / len(df) if len(df) > 0 else 0 - current_time = datetime.now().strftime("%Y%m%d_%H%M%S") - filename = f"{avg_score:.5f}_{current_time}.csv" - output_file = os.path.join(self.log_path, filename) - df.to_csv(output_file, index=False) - logger.info(f"Results saved to {output_file}") - return avg_score, a_cost, t_cost - - def log_mismatch( - self, - problem: str, - expected_output: Any, - prediction: str, - extracted_output: Any, - extract_answer_code: str = "None", - ): - log_data = { - "question": problem, - "right_answer": expected_output, - "model_output": prediction, - "extracted_output": extracted_output, - "extract_answer_code": extract_answer_code, - } - log_file = Path(self.log_path) / "log.json" - if log_file.exists(): - with log_file.open("r", encoding="utf-8") as f: - try: - data = json.load(f) - except json.JSONDecodeError: - data = [] - else: - data = [] - data.append(log_data) - write_json_file(log_file, data, encoding="utf-8", indent=4) - - @abstractmethod - async def evaluate_problem(self, problem: dict, graph: Callable) -> Tuple[Any, ...]: - pass - - @abstractmethod - def calculate_score(self, expected_output: Any, prediction: Any) -> Tuple[float, Any]: - pass - - @abstractmethod - def get_result_columns(self) -> List[str]: - pass - - async def evaluate_all_problems(self, data: List[dict], graph: Callable, max_concurrent_tasks: int = 50): - semaphore = asyncio.Semaphore(max_concurrent_tasks) - - async def sem_evaluate(problem): - async with semaphore: - return await self.evaluate_problem(problem, graph) - - tasks = [sem_evaluate(problem) for problem in data] - return await tqdm_asyncio.gather(*tasks, desc=f"Evaluating {self.name} problems", total=len(data)) - - async def run_evaluation(self, graph: Callable, va_list: List[int], max_concurrent_tasks: int = 50): - data = await self.load_data(va_list) - results = await self.evaluate_all_problems(data, graph, max_concurrent_tasks) - columns = self.get_result_columns() - average_score, average_cost, total_cost = self.save_results_to_csv(results, columns) - logger.info(f"Average score on {self.name} dataset: {average_score:.5f}") - logger.info(f"Total Cost: {total_cost:.5f}") - return average_score, average_cost, total_cost diff --git a/metagpt/ext/aflow/benchmark/drop.py b/metagpt/ext/aflow/benchmark/drop.py deleted file mode 100644 index 3cec5795fb..0000000000 --- a/metagpt/ext/aflow/benchmark/drop.py +++ /dev/null @@ -1,83 +0,0 @@ -import re -import string -from collections import Counter -from typing import Callable, List, Tuple - -from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed - -from metagpt.ext.aflow.benchmark.benchmark import BaseBenchmark -from metagpt.logs import logger - - -class DROPBenchmark(BaseBenchmark): - def __init__(self, name: str, file_path: str, log_path: str): - super().__init__(name, file_path, log_path) - - def normalize_answer(self, s: str) -> List[str]: - """ - Normalize answers for evaluation. - """ - - def remove_articles(text): - return re.sub(r"\b(a|an|the)\b", " ", text) - - def white_space_fix(text): - return " ".join(text.split()) - - def remove_punc(text): - exclude = set(string.punctuation) - return "".join(ch for ch in text if ch not in exclude) - - def lower(text): - return text.lower() - - return white_space_fix(remove_articles(remove_punc(lower(s)))) - - def calculate_score(self, ground_truth: str, prediction: str) -> Tuple[float, str]: - """ - Compute the F1 score between prediction and ground truth answers. - """ - prediction_tokens = self.normalize_answer(prediction).split() - ground_truth_tokens = self.normalize_answer(ground_truth).split() - common = Counter(prediction_tokens) & Counter(ground_truth_tokens) - num_same = sum(common.values()) - if num_same == 0: - return 0, prediction - precision = 1.0 * num_same / len(prediction_tokens) - recall = 1.0 * num_same / len(ground_truth_tokens) - f1 = (2 * precision * recall) / (precision + recall) - return f1, prediction - - @retry(stop=stop_after_attempt(5), wait=wait_fixed(1), retry=retry_if_exception_type(Exception), reraise=True) - async def _generate_output(self, graph, input_text): - return await graph(input_text) - - async def evaluate_problem(self, problem: dict, graph: Callable) -> Tuple[str, str, str, float, float]: - input_text = problem["context"] - expected_output = problem["ref_text"] - answers = expected_output.split("|") - - try: - output, cost = await self._generate_output(graph, input_text) - f1_scores = [] - - for answer in answers: - if answer.strip() != "": - output_parts = output.split("|") - for output_part in output_parts: - f1_score, _ = self.calculate_score(answer, output_part) - f1_scores.append(f1_score) - - uni_score = max(f1_scores) - - if uni_score < 0.3: - self.log_mismatch(input_text, expected_output, output, output) - - return input_text, output, expected_output, uni_score, cost - - except Exception as e: - logger.info(f"Maximum retries reached. Skipping this sample. Error: {e}") - return input_text, str(e), expected_output, 0.0, 0.0 - - def get_result_columns(self) -> List[str]: - return ["inputs", "prediction", "expected_output", "score", "cost"] diff --git a/metagpt/ext/aflow/benchmark/gsm8k.py b/metagpt/ext/aflow/benchmark/gsm8k.py deleted file mode 100644 index 51979c0c57..0000000000 --- a/metagpt/ext/aflow/benchmark/gsm8k.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : -# @Author : all -# @Desc : test on gsm8k -import re -from typing import Callable, List, Optional, Tuple - -from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed - -from metagpt.ext.aflow.benchmark.benchmark import BaseBenchmark -from metagpt.logs import logger - - -class GSM8KBenchmark(BaseBenchmark): - def __init__(self, name: str, file_path: str, log_path: str): - super().__init__(name, file_path, log_path) - - def extract_number(self, text: str) -> Optional[float]: - matches = re.findall(r"[-+]?\d+(?:,\d{3})*(?:\.\d+)?|\d+\.\d+", str(text)) - if matches: - last_number = matches[-1].replace(",", "") - try: - return float(last_number) - except ValueError: - return None - else: - return None - - def calculate_score(self, expected_output: float, prediction: float) -> Tuple[float, float]: - if prediction is None: - return 0.0, prediction - return 1.0 if abs(expected_output - prediction) <= 1e-6 else 0.0, prediction - - @retry(stop=stop_after_attempt(5), wait=wait_fixed(1), retry=retry_if_exception_type(Exception), reraise=True) - async def _generate_output(self, graph, input_text): - return await graph(input_text) - - async def evaluate_problem(self, problem: dict, graph: Callable) -> Tuple[str, str, float, float, float]: - input_text = problem["question"] - expected_output = self.extract_number(problem["answer"]) - - try: - output, cost = await self._generate_output(graph, input_text) - predicted_number = self.extract_number(output) - score, extracted_output = self.calculate_score(expected_output, predicted_number) - - if score == 0: - self.log_mismatch(input_text, expected_output, output, extracted_output) - - return input_text, output, expected_output, score, cost - - except Exception as e: - logger.info(f"Maximum retries reached. Skipping this sample. Error: {e}") - return input_text, str(e), expected_output, 0.0, 0.0 - - def get_result_columns(self) -> List[str]: - return ["question", "prediction", "expected_output", "score", "cost"] diff --git a/metagpt/ext/aflow/benchmark/hotpotqa.py b/metagpt/ext/aflow/benchmark/hotpotqa.py deleted file mode 100644 index b3bafe22b8..0000000000 --- a/metagpt/ext/aflow/benchmark/hotpotqa.py +++ /dev/null @@ -1,71 +0,0 @@ -import re -import string -from collections import Counter -from typing import Callable, List, Tuple - -from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed - -from metagpt.ext.aflow.benchmark.benchmark import BaseBenchmark -from metagpt.logs import logger - - -class HotpotQABenchmark(BaseBenchmark): - def __init__(self, name: str, file_path: str, log_path: str): - super().__init__(name, file_path, log_path) - - def normalize_answer(self, s: str) -> str: - def remove_articles(text): - return re.sub(r"\b(a|an|the)\b", " ", text) - - def white_space_fix(text): - return " ".join(text.split()) - - def remove_punc(text): - exclude = set(string.punctuation) - return "".join(ch for ch in text if ch not in exclude) - - def lower(text): - return text.lower() - - return white_space_fix(remove_articles(remove_punc(lower(s)))) - - def calculate_score(self, ground_truth: str, prediction: str) -> Tuple[float, str]: - prediction_tokens = self.normalize_answer(prediction).split() - ground_truth_tokens = self.normalize_answer(ground_truth).split() - common = Counter(prediction_tokens) & Counter(ground_truth_tokens) - num_same = sum(common.values()) - if num_same == 0: - return 0, prediction - precision = 1.0 * num_same / len(prediction_tokens) - recall = 1.0 * num_same / len(ground_truth_tokens) - f1 = (2 * precision * recall) / (precision + recall) - return f1, prediction - - @retry(stop=stop_after_attempt(5), wait=wait_fixed(1), retry=retry_if_exception_type(Exception), reraise=True) - async def _generate_output(self, graph, input_text): - return await graph(input_text) - - async def evaluate_problem(self, problem: dict, graph: Callable) -> Tuple[str, str, str, str, float, float]: - input_text = problem["question"] - expected_output = problem["answer"] - paragraphs = [item[1] for item in problem["context"] if isinstance(item[1], list)] - context_str = "\n".join(" ".join(paragraph) for paragraph in paragraphs) - inputs = f"Context: {context_str}\n\nQuestion: {input_text}\n\nAnswer:" - - try: - output, cost = await self._generate_output(graph, inputs) - score, extracted_output = self.calculate_score(expected_output, output) - - if ( - score < 0.3 - ): # We set the threshold for collecting incorrect questions to 0.3, as F1 Score cannot be simply judged using 0-1 - self.log_mismatch(input_text, expected_output, output, extracted_output) - - return input_text, context_str, output, expected_output, score, cost - - except Exception as e: - logger.info(f"Maximum retries reached. Skipping this sample. Error: {e}") - return input_text, context_str, str(e), expected_output, 0.0, 0.0 - - def get_result_columns(self) -> List[str]: - return ["question", "context", "prediction", "expected_output", "score", "cost"] diff --git a/metagpt/ext/aflow/benchmark/humaneval.py b/metagpt/ext/aflow/benchmark/humaneval.py deleted file mode 100644 index b54add260f..0000000000 --- a/metagpt/ext/aflow/benchmark/humaneval.py +++ /dev/null @@ -1,151 +0,0 @@ -import asyncio -import threading -import time -from typing import Any, Callable, Dict, List, Optional, Tuple - -from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed - -from metagpt.ext.aflow.benchmark.benchmark import BaseBenchmark -from metagpt.logs import logger -from metagpt.utils.sanitize import sanitize - - -class HumanEvalBenchmark(BaseBenchmark): - def __init__(self, name: str, file_path: str, log_path: str): - super().__init__(name, file_path, log_path) - - class TimeoutError(Exception): - pass - - def run_with_timeout(self, func, args, timeout): - result = [] - stop_event = threading.Event() - - def target(): - try: - result.append(func(*args)) - except Exception as e: - result.append(e) - finally: - stop_event.set() - - thread = threading.Thread(target=target) - thread.start() - is_timeout = not stop_event.wait(timeout) - - if is_timeout: - raise self.TimeoutError("Function execution timed out") - - if not result: - return None - if isinstance(result[0], Exception): - raise result[0] - return result[0] - - def check_solution(self, solution, test, entry_point): - solution = sanitize(code=solution, entrypoint=entry_point) - try: - global_dict = { - "math": __import__("math"), - "hashlib": __import__("hashlib"), - "re": __import__("re"), - "List": List, - "Dict": Dict, - "Tuple": Tuple, - "Optional": Optional, - "Any": Any, - } - - # Add handling for special cases - if entry_point == "decode_cyclic": - solution = ( - '\n\ndef encode_cyclic(s: str):\n """\n returns encoded string by cycling groups of three characters.\n """\n # split string to groups. Each of length 3.\n groups = [s[(3 * i):min((3 * i + 3), len(s))] for i in range((len(s) + 2) // 3)]\n # cycle elements in each group. Unless group has fewer elements than 3.\n groups = [(group[1:] + group[0]) if len(group) == 3 else group for group in groups]\n return "".join(groups)' - + "\n\n" - + solution - ) - elif entry_point == "decode_shift": - solution = ( - '\n\ndef encode_shift(s: str):\n """\n returns encoded string by shifting every character by 5 in the alphabet.\n """\n return "".join([chr(((ord(ch) + 5 - ord("a")) % 26) + ord("a")) for ch in s])\n\n\n' - + solution - ) - elif entry_point == "find_zero": - solution = ( - "\n\ndef poly(xs: list, x: float):\n return sum(coeff * (x ** i) for i, coeff in enumerate(xs))\n\n" - + solution - ) - - exec(solution, global_dict) - - if entry_point not in global_dict: - raise ValueError(f"Function {entry_point} is not defined in the solution.") - - exec(test, global_dict) - - check = global_dict["check"] - - result = self.run_with_timeout(check, (global_dict[entry_point],), 15) - - if result is None: - result = (self.PASS, "The solution passed all test cases.") - - except self.TimeoutError: - result = ( - self.FAIL, - "Execution timed out. Please check if your solution contains infinite loops or overly time-consuming operations.", - ) - except Exception as e: - error_message = f"Error: {str(e)}.\n Solution: {solution}.\n Test: {test}" - result = (self.FAIL, error_message) - - with open("error.log", "a", encoding="utf-8") as log_file: - log_file.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - {error_message}\n") - - return result - - @retry(stop=stop_after_attempt(5), wait=wait_fixed(1), retry=retry_if_exception_type(Exception), reraise=True) - async def _generate_output(self, graph, prompt, entry_point): - # Generate output with a timeout of 60 seconds - return await asyncio.wait_for(graph(prompt, entry_point), timeout=60) - - async def evaluate_problem(self, data: dict, graph: Callable) -> Tuple[str, str, str, float, float]: - input_text = data["prompt"] - expected_output = ( - "\nCorrect Solution:\ndef " - + data["entry_point"] - + "(params you should put here):" - + "\n\n" - + data["canonical_solution"] - ) - - try: - # Generate prediction using the graph function - prediction, cost = await self._generate_output(graph, input_text, data["entry_point"]) - - # Check the solution - ret = self.check_solution(prediction, data["test"], data["entry_point"]) - test_case_details = ret[1] - expected_output = test_case_details + expected_output - - # Calculate score based on the check result - score = 1.0 if ret[0] == self.PASS else 0.0 - - # Log mismatch if the score is 0 - if score == 0: - self.log_mismatch(input_text, expected_output, prediction, score) - - return input_text, prediction, expected_output, score, cost - - except asyncio.TimeoutError: - logger.info("Timeout error. Skipping this sample.") - return input_text, "Timeout", expected_output, 0.0, 0.0 - - except Exception as e: - logger.info(f"Maximum retries reached. Skipping this sample. Error: {e}") - return input_text, str(e), expected_output, 0.0, 0.0 - - def calculate_score(self, expected_output: str, prediction: str) -> Tuple[float, str]: - # The scoring logic for HumanEval is already implemented in evaluate_problem, this is just to conform to the interface - return 0.0, prediction - - def get_result_columns(self) -> List[str]: - return ["inputs", "prediction", "expected_output", "score", "cost"] diff --git a/metagpt/ext/aflow/benchmark/math.py b/metagpt/ext/aflow/benchmark/math.py deleted file mode 100644 index 07b0612d06..0000000000 --- a/metagpt/ext/aflow/benchmark/math.py +++ /dev/null @@ -1,137 +0,0 @@ -import inspect -import re -from math import isclose -from typing import Any, Callable, List, Tuple - -import regex -from sympy import N, simplify -from sympy.parsing.latex import parse_latex -from sympy.parsing.sympy_parser import parse_expr -from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed - -from metagpt.ext.aflow.benchmark.benchmark import BaseBenchmark -from metagpt.logs import logger - - -class MATHBenchmark(BaseBenchmark): - def __init__(self, name: str, file_path: str, log_path: str): - super().__init__(name, file_path, log_path) - - def extract_model_answer(self, text: str) -> str: - pattern = r"\\boxed{((?:[^{}]|{[^{}]*})*)}" - boxed_matches = re.findall(pattern, text, re.DOTALL) - if boxed_matches: - return boxed_matches[-1].strip() - - sentence_end_pattern = r"(? Tuple[int, str]: - expected_answer = self.extract_model_answer(expected_output) - predicted_answer = self.extract_model_answer(prediction) - - if self.math_equal(predicted_answer, expected_answer): - return 1, predicted_answer - else: - return 0, predicted_answer - - def math_equal(self, prediction: Any, reference: Any) -> bool: - if str(prediction) == str(reference): - return True - - try: - if self.is_digit(prediction) and self.is_digit(reference): - prediction = self.parse_digits(prediction) - reference = self.parse_digits(reference) - return isclose(prediction, reference, abs_tol=1e-3) - except: - pass - - try: - return self.symbolic_equal(prediction, reference) - except: - pass - - return False - - def is_digit(self, num): - return self.parse_digits(num) is not None - - def parse_digits(self, num): - num = regex.sub(",", "", str(num)) - try: - return float(num) - except: - if num.endswith("%"): - num = num[:-1] - if num.endswith("\\"): - num = num[:-1] - try: - return float(num) / 100 - except: - pass - return None - - def symbolic_equal(self, a, b): - def _parse(s): - for f in [parse_latex, parse_expr]: - try: - return f(s) - except: - pass - return s - - a = _parse(a) - b = _parse(b) - - try: - if simplify(a - b) == 0: - return True - except: - pass - - try: - if isclose(N(a), N(b), abs_tol=1e-3): - return True - except: - pass - return False - - def get_function_code(self, func): - try: - source_code = inspect.getsource(func) - return source_code - except OSError: - return "no code" - - @retry(stop=stop_after_attempt(5), wait=wait_fixed(1), retry=retry_if_exception_type(Exception), reraise=True) - async def _generate_output(self, graph, input_text): - return await graph(input_text) - - async def evaluate_problem(self, problem: dict, graph: Callable) -> Tuple[str, str, str, int, float]: - input_text = problem["problem"] - expected_output = problem["solution"] - - try: - output, cost = await self._generate_output(graph, input_text) - uni_score, extracted_output = self.calculate_score(expected_output, output) - - if uni_score == 0: - self.log_mismatch( - input_text, - expected_output, - output, - extracted_output, - extract_answer_code=self.get_function_code(self.extract_model_answer), - ) - - return input_text, output, expected_output, uni_score, cost - - except Exception as e: - logger.info(f"Maximum retries reached. Skipping this sample. Error: {e}") - return input_text, str(e), expected_output, 0.0, 0.0 - - def get_result_columns(self) -> List[str]: - return ["question", "prediction", "expected_output", "score", "cost"] diff --git a/metagpt/ext/aflow/benchmark/mbpp.py b/metagpt/ext/aflow/benchmark/mbpp.py deleted file mode 100644 index c3628b0240..0000000000 --- a/metagpt/ext/aflow/benchmark/mbpp.py +++ /dev/null @@ -1,121 +0,0 @@ -import threading -import time -from typing import Any, Callable, Dict, List, Optional, Tuple - -from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_fixed - -from metagpt.ext.aflow.benchmark.benchmark import BaseBenchmark -from metagpt.logs import logger -from metagpt.utils.sanitize import sanitize - - -class MBPPBenchmark(BaseBenchmark): - def __init__(self, name: str, file_path: str, log_path: str): - super().__init__(name, file_path, log_path) - - class TimeoutError(Exception): - pass - - def run_with_timeout(self, func, timeout): - result = [] - stop_event = threading.Event() - - def target(): - try: - result.append(func()) - except Exception as e: - result.append(e) - finally: - stop_event.set() - - thread = threading.Thread(target=target) - thread.start() - is_timeout = not stop_event.wait(timeout) - - if is_timeout: - raise self.TimeoutError("Function execution timed out") - - if not result: - return None - if isinstance(result[0], Exception): - raise result[0] - return result[0] - - def check_solution(self, solution, test, entry_point): - solution = sanitize(code=solution, entrypoint=entry_point) - try: - global_dict = { - "math": __import__("math"), - "hashlib": __import__("hashlib"), - "re": __import__("re"), - "List": List, - "Dict": Dict, - "Tuple": Tuple, - "Optional": Optional, - "Any": Any, - } - - exec(solution, global_dict) - - if entry_point not in global_dict: - raise ValueError(f"Function {entry_point} is not defined in the solution.") - - exec(test, global_dict) - - check = global_dict["check"] - - result = self.run_with_timeout(check, 15) - - if result is None: - result = (self.PASS, "The solution passed all test cases.") - - except self.TimeoutError: - result = ( - self.FAIL, - "Execution timed out. Please check if your solution contains infinite loops or overly time-consuming operations.", - ) - except Exception as e: - error_message = f"Error: {str(e)}.\n Solution: {solution}.\n Test: {test}" - result = (self.FAIL, error_message) - - with open("error.log", "a", encoding="utf-8") as log_file: - log_file.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - {error_message}\n") - - return result - - @retry(stop=stop_after_attempt(5), wait=wait_fixed(1), retry=retry_if_exception_type(Exception), reraise=True) - async def _generate_output(self, graph, prompt, entry_point): - return await graph(prompt, entry_point) - - async def evaluate_problem(self, data: dict, graph: Callable) -> Tuple[str, str, str, float, float]: - input_text = data["prompt"] - expected_output = "\nCorrect Solution:\ndef " + data["code"] - - try: - # Generate prediction using the graph function - prediction, cost = await self._generate_output(graph, input_text, data["entry_point"]) - - # Check the solution - ret = self.check_solution(prediction, data["test"], data["entry_point"]) - test_case_details = ret[1] - expected_output = test_case_details + "\nCorrect Solution:" + data["code"] - - # Calculate score based on the check result - score = 1.0 if ret[0] == self.PASS else 0.0 - - # Log mismatch if the score is 0 - if score == 0: - self.log_mismatch(input_text, expected_output, prediction, score) - - return input_text, prediction, expected_output, score, cost - - except Exception as e: - logger.info(f"Maximum retries reached. Skipping this sample. Error: {e}") - return input_text, str(e), expected_output, 0.0, 0.0 - - def calculate_score(self, expected_output: str, prediction: str) -> Tuple[float, str]: - # The scoring logic for MBPP is already implemented in evaluate_problem, this is just to conform to the interface - return 0.0, prediction - - def get_result_columns(self) -> List[str]: - return ["inputs", "prediction", "expected_output", "score", "cost"] diff --git a/metagpt/ext/aflow/benchmark/utils.py b/metagpt/ext/aflow/benchmark/utils.py deleted file mode 100644 index 846101bc0c..0000000000 --- a/metagpt/ext/aflow/benchmark/utils.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/7/24 16:37 -@Author : didi -@File : utils.py -""" - -import json -import os - -import numpy as np - -from metagpt.utils.common import read_json_file, write_json_file - - -def generate_random_indices(n, n_samples, test=False): - """ - Generate random indices - """ - - def _set_seed(seed=42): - np.random.seed(seed) - - _set_seed() - indices = np.arange(n) - np.random.shuffle(indices) - if test: - return indices[n_samples:] - else: - return indices[:n_samples] - - -def split_data_set(file_path, samples, test=False): - data = [] - - with open(file_path, "r") as file: - for line in file: - data.append(json.loads(line)) - random_indices = generate_random_indices(len(data), samples, test) - data = [data[i] for i in random_indices] - return data - - -def log_mismatch(problem, expected_output, prediction, predicted_number, path): - log_data = { - "question": problem, - "right_answer": expected_output, - "model_output": prediction, - "extracted_output": predicted_number, - } - - log_file = os.path.join(path, "log.json") - - # Check if the log file already exists - if os.path.exists(log_file): - # If it exists, load the existing log data - data = read_json_file(log_file) - else: - # If it does not exist, create a new log list - data = [] - - # Add the new log entry - data.append(log_data) - - # Write the data back to log.json file - write_json_file(log_file, data, encoding="utf-8", indent=4) diff --git a/metagpt/ext/aflow/data/download_data.py b/metagpt/ext/aflow/data/download_data.py deleted file mode 100644 index a3aa2774ca..0000000000 --- a/metagpt/ext/aflow/data/download_data.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 2024-10-20 -# @Author : MoshiQAQ & didi -# @Desc : Download and extract dataset files - -import os -import tarfile -from typing import Dict - -import requests -from tqdm import tqdm - -from metagpt.logs import logger - - -def download_file(url: str, filename: str) -> None: - """Download a file from the given URL and show progress.""" - response = requests.get(url, stream=True) - total_size = int(response.headers.get("content-length", 0)) - block_size = 1024 - progress_bar = tqdm(total=total_size, unit="iB", unit_scale=True) - - with open(filename, "wb") as file: - for data in response.iter_content(block_size): - size = file.write(data) - progress_bar.update(size) - progress_bar.close() - - -def extract_tar_gz(filename: str, extract_path: str) -> None: - """Extract a tar.gz file to the specified path.""" - with tarfile.open(filename, "r:gz") as tar: - tar.extractall(path=extract_path) - - -def process_dataset(url: str, filename: str, extract_path: str) -> None: - """Download, extract, and clean up a dataset.""" - logger.info(f"Downloading {filename}...") - download_file(url, filename) - - logger.info(f"Extracting {filename}...") - extract_tar_gz(filename, extract_path) - - logger.info(f"{filename} download and extraction completed.") - - os.remove(filename) - logger.info(f"Removed {filename}") - - -# Define the datasets to be downloaded -# Users can modify this list to choose which datasets to download -datasets_to_download: Dict[str, Dict[str, str]] = { - "datasets": { - "url": "https://drive.google.com/uc?export=download&id=1DNoegtZiUhWtvkd2xoIuElmIi4ah7k8e", - "filename": "aflow_data.tar.gz", - "extract_path": "metagpt/ext/aflow/data", - }, - "results": { - "url": "https://drive.google.com/uc?export=download&id=1Sr5wjgKf3bN8OC7G6cO3ynzJqD4w6_Dv", - "filename": "result.tar.gz", - "extract_path": "metagpt/ext/aflow/data/results", - }, - "initial_rounds": { - "url": "https://drive.google.com/uc?export=download&id=1UBoW4WBWjX2gs4I_jq3ALdXeLdwDJMdP", - "filename": "initial_rounds.tar.gz", - "extract_path": "metagpt/ext/aflow/scripts/optimized", - }, -} - - -def download(required_datasets, if_first_download: bool = True): - """Main function to process all selected datasets""" - if if_first_download: - for dataset_name in required_datasets: - dataset = datasets_to_download[dataset_name] - extract_path = dataset["extract_path"] - process_dataset(dataset["url"], dataset["filename"], extract_path) - else: - logger.info("Skip downloading datasets") diff --git a/metagpt/ext/aflow/scripts/evaluator.py b/metagpt/ext/aflow/scripts/evaluator.py deleted file mode 100644 index 34bdcd9fc1..0000000000 --- a/metagpt/ext/aflow/scripts/evaluator.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 8/23/2024 10:00 AM -# @Author : all -# @Desc : Evaluation for different datasets - -from typing import Dict, Literal, Tuple - -from metagpt.ext.aflow.benchmark.benchmark import BaseBenchmark -from metagpt.ext.aflow.benchmark.drop import DROPBenchmark -from metagpt.ext.aflow.benchmark.gsm8k import GSM8KBenchmark -from metagpt.ext.aflow.benchmark.hotpotqa import HotpotQABenchmark -from metagpt.ext.aflow.benchmark.humaneval import HumanEvalBenchmark -from metagpt.ext.aflow.benchmark.math import MATHBenchmark -from metagpt.ext.aflow.benchmark.mbpp import MBPPBenchmark - -# If you want to customize tasks, add task types here and provide evaluation functions, just like the ones given above -DatasetType = Literal["HumanEval", "MBPP", "GSM8K", "MATH", "HotpotQA", "DROP"] - - -class Evaluator: - """ - Complete the evaluation for different datasets here - """ - - def __init__(self, eval_path: str): - self.eval_path = eval_path - self.dataset_configs: Dict[DatasetType, BaseBenchmark] = { - "GSM8K": GSM8KBenchmark, - "MATH": MATHBenchmark, - "HumanEval": HumanEvalBenchmark, - "HotpotQA": HotpotQABenchmark, - "MBPP": MBPPBenchmark, - "DROP": DROPBenchmark, - } - - async def graph_evaluate( - self, dataset: DatasetType, graph, params: dict, path: str, is_test: bool = False - ) -> Tuple[float, float, float]: - if dataset not in self.dataset_configs: - raise ValueError(f"Unsupported dataset: {dataset}") - - data_path = self._get_data_path(dataset, is_test) - benchmark_class = self.dataset_configs[dataset] - benchmark = benchmark_class(name=dataset, file_path=data_path, log_path=path) - - # Use params to configure the graph and benchmark - configured_graph = await self._configure_graph(dataset, graph, params) - if is_test: - va_list = None # For test data, generally use None to test all - else: - va_list = None # Use None to test all Validation data, or set va_list (e.g., [1, 2, 3]) to use partial data - return await benchmark.run_evaluation(configured_graph, va_list) - - async def _configure_graph(self, dataset, graph, params: dict): - # Here you can configure the graph based on params - # For example: set LLM configuration, dataset configuration, etc. - dataset_config = params.get("dataset", {}) - llm_config = params.get("llm_config", {}) - return graph(name=dataset, llm_config=llm_config, dataset=dataset_config) - - def _get_data_path(self, dataset: DatasetType, test: bool) -> str: - base_path = f"metagpt/ext/aflow/data/{dataset.lower()}" - return f"{base_path}_test.jsonl" if test else f"{base_path}_validate.jsonl" diff --git a/metagpt/ext/aflow/scripts/interface.py b/metagpt/ext/aflow/scripts/interface.py deleted file mode 100644 index 46cdbdabfa..0000000000 --- a/metagpt/ext/aflow/scripts/interface.py +++ /dev/null @@ -1,98 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 2024-03-21 -# @Author : Your Name -# @Desc : Interface for AFLOW - -import asyncio -import importlib.util -import sys -from pathlib import Path -from typing import Optional, Tuple - -from metagpt.configs.models_config import ModelsConfig -from metagpt.ext.aflow.scripts.evaluator import DatasetType -from metagpt.ext.aflow.scripts.optimizer_utils.data_utils import DataUtils -from metagpt.logs import logger - - -def load_best_round(dataset: str, optimized_path: str = "metagpt/ext/aflow/scripts/optimized") -> int: - """加载最佳表现的轮次""" - data_utils = DataUtils(f"{optimized_path}/{dataset}") - - # 使用get_top_rounds获取得分最高的轮次 - top_rounds = data_utils.get_top_rounds(sample=2, mode="Graph") - if not top_rounds[1]: - return 1 - - return top_rounds[1]["round"] - - -def load_workflow_class(graph_path: str): - """动态加载工作流类""" - spec = importlib.util.spec_from_file_location("workflow_module", graph_path) - module = importlib.util.module_from_spec(spec) - sys.modules["workflow_module"] = module - spec.loader.exec_module(module) - return module.Workflow - - -async def aflow_inference( - dataset: DatasetType, - question: str, - entry_point: Optional[str] = None, - round: Optional[int] = None, - llm_name: str = "gpt-4o-mini", - optimized_path: str = "metagpt/ext/aflow/scripts/optimized", -) -> Tuple[str, float]: - """AFLOW推理接口 - - Args: - dataset: 数据集名称 - question: 输入问题 - round: 指定使用的轮次,如果为None则使用最佳轮次 - llm_name: 使用的LLM模型名称 - optimized_path: 优化结果保存路径 - - Returns: - (答案, 成本)的元组 - """ - # 如果没有指定轮次,使用最佳轮次 - if round is None: - round = load_best_round(dataset, optimized_path) - - logger.info(f"Using round {round} for inference") - - # 构建工作流路径并加载 - graph_path = Path(optimized_path) / dataset / "workflows" / f"round_{round}" / "graph.py" - if not graph_path.exists(): - raise FileNotFoundError(f"Workflow file not found: {graph_path}") - - # 动态加载工作流类 - WorkflowClass = load_workflow_class(str(graph_path)) - - # 创建工作流实例 - llm_config = ModelsConfig.default().get(llm_name) - workflow = WorkflowClass( - name=f"{dataset}_workflow", - llm_config=llm_config, - dataset=dataset, - ) - - # 执行推理 - if dataset in ["MBPP", "HumanEval"]: - # 代码类任务需要额外的entry_point参数 - answer, cost = await workflow(question, entry_point=entry_point) - else: - answer, cost = await workflow(question) - - return answer, cost - - -if __name__ == "__main__": - asyncio.run( - aflow_inference( - dataset="MBPP", - question="write a function named add_two_numbers to calculate the sum of two numbers", - entry_point="add_two_numbers", - ) - ) diff --git a/metagpt/ext/aflow/scripts/operator.py b/metagpt/ext/aflow/scripts/operator.py deleted file mode 100644 index 903a962e02..0000000000 --- a/metagpt/ext/aflow/scripts/operator.py +++ /dev/null @@ -1,360 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 6/27/2024 17:36 PM -# @Author : didi -# @Desc : operator demo of aflow -import asyncio -import concurrent.futures -import random -import sys -import traceback -from collections import Counter -from typing import Dict, List, Tuple - -from tenacity import retry, stop_after_attempt, wait_fixed - -from metagpt.actions.action_node import ActionNode -from metagpt.ext.aflow.scripts.operator_an import ( - AnswerGenerateOp, - CodeGenerateOp, - FormatOp, - GenerateOp, - MdEnsembleOp, - ReflectionTestOp, - ReviewOp, - ReviseOp, - ScEnsembleOp, -) -from metagpt.ext.aflow.scripts.prompts.prompt import ( - ANSWER_GENERATION_PROMPT, - FORMAT_PROMPT, - MD_ENSEMBLE_PROMPT, - PYTHON_CODE_VERIFIER_PROMPT, - REFLECTION_ON_PUBLIC_TEST_PROMPT, - REVIEW_PROMPT, - REVISE_PROMPT, - SC_ENSEMBLE_PROMPT, -) -from metagpt.ext.aflow.scripts.utils import ( - extract_test_cases_from_jsonl, - test_case_2_test_function, -) -from metagpt.llm import LLM -from metagpt.logs import logger - - -class Operator: - def __init__(self, llm: LLM, name: str): - self.name = name - self.llm = llm - - def __call__(self, *args, **kwargs): - raise NotImplementedError - - async def _fill_node(self, op_class, prompt, mode=None, **extra_kwargs): - fill_kwargs = {"context": prompt, "llm": self.llm} - if mode: - fill_kwargs["mode"] = mode - fill_kwargs.update(extra_kwargs) - node = await ActionNode.from_pydantic(op_class).fill(**fill_kwargs) - return node.instruct_content.model_dump() - - -class Custom(Operator): - def __init__(self, llm: LLM, name: str = "Custom"): - super().__init__(llm, name) - - async def __call__(self, input, instruction): - prompt = instruction + input - response = await self._fill_node(GenerateOp, prompt, mode="single_fill") - return response - - -class AnswerGenerate(Operator): - def __init__(self, llm: LLM, name: str = "AnswerGenerate"): - super().__init__(llm, name) - - async def __call__(self, input: str, mode: str = None) -> Tuple[str, str]: - prompt = ANSWER_GENERATION_PROMPT.format(input=input) - response = await self._fill_node(AnswerGenerateOp, prompt, mode="xml_fill") - return response - - -class CustomCodeGenerate(Operator): - def __init__(self, llm: LLM, name: str = "CustomCodeGenerate"): - super().__init__(llm, name) - - async def __call__(self, problem, entry_point, instruction): - prompt = instruction + problem - response = await self._fill_node(GenerateOp, prompt, mode="code_fill", function_name=entry_point) - return response - - -class ScEnsemble(Operator): - """ - Paper: Self-Consistency Improves Chain of Thought Reasoning in Language Models - Link: https://arxiv.org/abs/2203.11171 - Paper: Universal Self-Consistency for Large Language Model Generation - Link: https://arxiv.org/abs/2311.17311 - """ - - def __init__(self, llm: LLM, name: str = "ScEnsemble"): - super().__init__(llm, name) - - async def __call__(self, solutions: List[str], problem: str): - answer_mapping = {} - solution_text = "" - for index, solution in enumerate(solutions): - answer_mapping[chr(65 + index)] = index - solution_text += f"{chr(65 + index)}: \n{str(solution)}\n\n\n" - - prompt = SC_ENSEMBLE_PROMPT.format(question=problem, solutions=solution_text) - response = await self._fill_node(ScEnsembleOp, prompt, mode="xml_fill") - - answer = response.get("solution_letter", "") - answer = answer.strip().upper() - - return {"response": solutions[answer_mapping[answer]]} - - -def run_code(code): - try: - # Create a new global namespace - global_namespace = {} - - disallowed_imports = [ - "os", - "sys", - "subprocess", - "multiprocessing", - "matplotlib", - "seaborn", - "plotly", - "bokeh", - "ggplot", - "pylab", - "tkinter", - "PyQt5", - "wx", - "pyglet", - ] - - # Check for prohibited imports - for lib in disallowed_imports: - if f"import {lib}" in code or f"from {lib}" in code: - logger.info("Detected prohibited import: %s", lib) - return "Error", f"Prohibited import: {lib} and graphing functionalities" - - # Use exec to execute the code - exec(code, global_namespace) - # Assume the code defines a function named 'solve' - if "solve" in global_namespace and callable(global_namespace["solve"]): - result = global_namespace["solve"]() - return "Success", str(result) - else: - return "Error", "Function 'solve' not found" - except Exception as e: - exc_type, exc_value, exc_traceback = sys.exc_info() - tb_str = traceback.format_exception(exc_type, exc_value, exc_traceback) - return "Error", f"Execution error: {str(e)}\n{''.join(tb_str)}" - - -class Programmer(Operator): - def __init__(self, llm: LLM, name: str = "Programmer"): - super().__init__(llm, name) - - async def exec_code(self, code, timeout=30): - """ - Asynchronously execute code and return an error if timeout occurs. - """ - loop = asyncio.get_running_loop() - with concurrent.futures.ProcessPoolExecutor(max_workers=1) as executor: - try: - # Submit run_code task to the process pool - future = loop.run_in_executor(executor, run_code, code) - # Wait for the task to complete or timeout - result = await asyncio.wait_for(future, timeout=timeout) - return result - except asyncio.TimeoutError: - # Timeout, attempt to shut down the process pool - executor.shutdown(wait=False, cancel_futures=True) - return "Error", "Code execution timed out" - except Exception as e: - return "Error", f"Unknown error: {str(e)}" - - async def code_generate(self, problem, analysis, feedback, mode): - """ - Asynchronous method to generate code. - """ - prompt = PYTHON_CODE_VERIFIER_PROMPT.format(problem=problem, analysis=analysis, feedback=feedback) - response = await self._fill_node(CodeGenerateOp, prompt, mode, function_name="solve") - return response - - @retry(stop=stop_after_attempt(3), wait=wait_fixed(2)) - async def __call__(self, problem: str, analysis: str = "None"): - """ - Call method, generate code and execute, retry up to 3 times. - """ - code = None - output = None - feedback = "" - for i in range(3): - code_response = await self.code_generate(problem, analysis, feedback, mode="code_fill") - code = code_response.get("code") - if not code: - return {"code": code, "output": "No code generated"} - status, output = await self.exec_code(code) - if status == "Success": - return {"code": code, "output": output} - else: - logger.info(f"Execution error on attempt {i + 1}, error message: {output}") - feedback = ( - f"\nThe result of the error from the code you wrote in the previous round:\n" - f"Code: {code}\n\nStatus: {status}, {output}" - ) - return {"code": code, "output": output} - - -class Test(Operator): - def __init__(self, llm: LLM, name: str = "Test"): - super().__init__(llm, name) - - def exec_code(self, solution, entry_point): - test_cases = extract_test_cases_from_jsonl(entry_point) - - fail_cases = [] - for test_case in test_cases: - test_code = test_case_2_test_function(solution, test_case, entry_point) - try: - exec(test_code, globals()) - except AssertionError as e: - exc_type, exc_value, exc_traceback = sys.exc_info() - tb_str = traceback.format_exception(exc_type, exc_value, exc_traceback) - with open("tester.txt", "a") as f: - f.write("test_error of " + entry_point + "\n") - error_infomation = { - "test_fail_case": { - "test_case": test_case, - "error_type": "AssertionError", - "error_message": str(e), - "traceback": tb_str, - } - } - fail_cases.append(error_infomation) - except Exception as e: - with open("tester.txt", "a") as f: - f.write(entry_point + " " + str(e) + "\n") - return {"exec_fail_case": str(e)} - if fail_cases != []: - return fail_cases - else: - return "no error" - - async def __call__(self, problem, solution, entry_point, test_loop: int = 3): - """ - "Test": { - "description": "Test the solution with test cases, if the solution is correct, return 'no error', if the solution is incorrect, return reflect on the soluion and the error information", - "interface": "test(problem: str, solution: str, entry_point: str) -> str" - } - """ - for _ in range(test_loop): - result = self.exec_code(solution, entry_point) - if result == "no error": - return {"result": True, "solution": solution} - elif "exec_fail_case" in result: - result = result["exec_fail_case"] - prompt = REFLECTION_ON_PUBLIC_TEST_PROMPT.format( - problem=problem, - solution=solution, - exec_pass=f"executed unsuccessfully, error: \n {result}", - test_fail="executed unsucessfully", - ) - response = await self._fill_node(ReflectionTestOp, prompt, mode="code_fill") - solution = response["reflection_and_solution"] - else: - prompt = REFLECTION_ON_PUBLIC_TEST_PROMPT.format( - problem=problem, - solution=solution, - exec_pass="executed successfully", - test_fail=result, - ) - response = await self._fill_node(ReflectionTestOp, prompt, mode="code_fill") - solution = response["reflection_and_solution"] - - result = self.exec_code(solution, entry_point) - if result == "no error": - return {"result": True, "solution": solution} - else: - return {"result": False, "solution": solution} - - -class Format(Operator): - def __init__(self, llm: LLM, name: str = "Format"): - super().__init__(llm, name) - - async def __call__(self, problem, solution, mode: str = None): - prompt = FORMAT_PROMPT.format(problem_description=problem, solution=solution) - response = await self._fill_node(FormatOp, prompt, mode) - return response - - -class Review(Operator): - def __init__(self, llm: LLM, name: str = "Review"): - super().__init__(llm, name) - - async def __call__(self, problem, solution, mode: str = None): - prompt = REVIEW_PROMPT.format(problem=problem, solution=solution) - response = await self._fill_node(ReviewOp, prompt, mode="xml_fill") - return response - - -class Revise(Operator): - def __init__(self, llm: LLM, name: str = "Revise"): - super().__init__(llm, name) - - async def __call__(self, problem, solution, feedback, mode: str = None): - prompt = REVISE_PROMPT.format(problem=problem, solution=solution, feedback=feedback) - response = await self._fill_node(ReviseOp, prompt, mode="xml_fill") - return response - - -class MdEnsemble(Operator): - """ - Paper: Can Generalist Foundation Models Outcompete Special-Purpose Tuning? Case Study in Medicine - Link: https://arxiv.org/abs/2311.16452 - """ - - def __init__(self, llm: LLM, name: str = "MdEnsemble", vote_count: int = 5): - super().__init__(llm, name) - self.vote_count = vote_count - - @staticmethod - def shuffle_answers(solutions: List[str]) -> Tuple[List[str], Dict[str, str]]: - shuffled_solutions = solutions.copy() - random.shuffle(shuffled_solutions) - answer_mapping = {chr(65 + i): solutions.index(solution) for i, solution in enumerate(shuffled_solutions)} - return shuffled_solutions, answer_mapping - - async def __call__(self, solutions: List[str], problem: str, mode: str = None): - logger.info(f"solution count: {len(solutions)}") - all_responses = [] - - for _ in range(self.vote_count): - shuffled_solutions, answer_mapping = self.shuffle_answers(solutions) - - solution_text = "" - for index, solution in enumerate(shuffled_solutions): - solution_text += f"{chr(65 + index)}: \n{str(solution)}\n\n\n" - - prompt = MD_ENSEMBLE_PROMPT.format(solutions=solution_text, question=problem) - response = await self._fill_node(MdEnsembleOp, prompt, mode="xml_fill") - - answer = response.get("solution_letter", "A") - answer = answer.strip().upper() - - if answer in answer_mapping: - original_index = answer_mapping[answer] - all_responses.append(original_index) - - most_frequent_index = Counter(all_responses).most_common(1)[0][0] - final_answer = solutions[most_frequent_index] - return {"solution": final_answer} diff --git a/metagpt/ext/aflow/scripts/operator_an.py b/metagpt/ext/aflow/scripts/operator_an.py deleted file mode 100644 index d0201dea2e..0000000000 --- a/metagpt/ext/aflow/scripts/operator_an.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 6/27/2024 19:46 PM -# @Author : didi -# @Desc : action nodes for operator - -from pydantic import BaseModel, Field - - -class GenerateOp(BaseModel): - response: str = Field(default="", description="Your solution for this problem") - - -class CodeGenerateOp(BaseModel): - code: str = Field(default="", description="Your complete code solution for this problem") - - -class AnswerGenerateOp(BaseModel): - thought: str = Field(default="", description="The step by step thinking process") - answer: str = Field(default="", description="The final answer to the question") - - -class FormatOp(BaseModel): - solution: str = Field(default="", description="Your formatted answer for this problem") - - -class ScEnsembleOp(BaseModel): - thought: str = Field(default="", description="The thought of the most consistent solution.") - solution_letter: str = Field(default="", description="The letter of most consistent solution.") - - -class ReflectionTestOp(BaseModel): - reflection_and_solution: str = Field( - default="", description="Corrective solution for code execution errors or test case failures" - ) - - -class MdEnsembleOp(BaseModel): - thought: str = Field(default="", description="Step-by-step analysis of the solutions to determine the best one.") - solution_letter: str = Field(default="", description="The letter of the chosen best solution (only one letter).") - - -class ReviewOp(BaseModel): - review_result: bool = Field( - default=False, - description="The Review Result (Bool). If you think this solution looks good for you, return 'true'; If not, return 'false'", - ) - feedback: str = Field( - default="", - description="Your FeedBack for this problem based on the criteria. If the review result is true, you can put it 'nothing here'.", - ) - - -class ReviseOp(BaseModel): - solution: str = Field(default="", description="Based on the feedback, revised solution for this problem") diff --git a/metagpt/ext/aflow/scripts/optimized/__init__.py b/metagpt/ext/aflow/scripts/optimized/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/metagpt/ext/aflow/scripts/optimizer.py b/metagpt/ext/aflow/scripts/optimizer.py deleted file mode 100644 index 0ac4827e71..0000000000 --- a/metagpt/ext/aflow/scripts/optimizer.py +++ /dev/null @@ -1,199 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 8/12/2024 22:00 PM -# @Author : issac -# @Desc : optimizer for graph - -import asyncio -import time -from typing import List, Literal - -from pydantic import BaseModel, Field - -from metagpt.actions.action_node import ActionNode -from metagpt.ext.aflow.scripts.evaluator import DatasetType -from metagpt.ext.aflow.scripts.optimizer_utils.convergence_utils import ConvergenceUtils -from metagpt.ext.aflow.scripts.optimizer_utils.data_utils import DataUtils -from metagpt.ext.aflow.scripts.optimizer_utils.evaluation_utils import EvaluationUtils -from metagpt.ext.aflow.scripts.optimizer_utils.experience_utils import ExperienceUtils -from metagpt.ext.aflow.scripts.optimizer_utils.graph_utils import GraphUtils -from metagpt.logs import logger -from metagpt.provider.llm_provider_registry import create_llm_instance - -QuestionType = Literal["math", "code", "qa"] -OptimizerType = Literal["Graph", "Test"] - - -class GraphOptimize(BaseModel): - modification: str = Field(default="", description="modification") - graph: str = Field(default="", description="graph") - prompt: str = Field(default="", description="prompt") - - -class Optimizer: - def __init__( - self, - dataset: DatasetType, - question_type: QuestionType, - opt_llm_config, - exec_llm_config, - operators: List, - sample: int, - check_convergence: bool = False, - optimized_path: str = None, - initial_round: int = 1, - max_rounds: int = 20, - validation_rounds: int = 5, - ) -> None: - self.optimize_llm_config = opt_llm_config - self.optimize_llm = create_llm_instance(self.optimize_llm_config) - self.execute_llm_config = exec_llm_config - - self.dataset = dataset - self.type = question_type - self.check_convergence = check_convergence - - self.graph = None - self.operators = operators - - self.root_path = f"{optimized_path}/{self.dataset}" - self.sample = sample - self.top_scores = [] - self.round = initial_round - self.max_rounds = max_rounds - self.validation_rounds = validation_rounds - - self.graph_utils = GraphUtils(self.root_path) - self.data_utils = DataUtils(self.root_path) - self.experience_utils = ExperienceUtils(self.root_path) - self.evaluation_utils = EvaluationUtils(self.root_path) - self.convergence_utils = ConvergenceUtils(self.root_path) - - def optimize(self, mode: OptimizerType = "Graph"): - if mode == "Test": - test_n = 3 # validation datasets's execution number - for i in range(test_n): - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - score = loop.run_until_complete(self.test()) - return None - - for opt_round in range(self.max_rounds): - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - - retry_count = 0 - max_retries = 1 - - while retry_count < max_retries: - try: - score = loop.run_until_complete(self._optimize_graph()) - break - except Exception as e: - retry_count += 1 - logger.info(f"Error occurred: {e}. Retrying... (Attempt {retry_count}/{max_retries})") - if retry_count == max_retries: - logger.info("Max retries reached. Moving to next round.") - score = None - - wait_time = 5 * retry_count - time.sleep(wait_time) - - if retry_count < max_retries: - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - - self.round += 1 - logger.info(f"Score for round {self.round}: {score}") - - converged, convergence_round, final_round = self.convergence_utils.check_convergence(top_k=3) - - if converged and self.check_convergence: - logger.info( - f"Convergence detected, occurred in round {convergence_round}, final round is {final_round}" - ) - # Print average scores and standard deviations for each round - self.convergence_utils.print_results() - break - - time.sleep(5) - - async def _optimize_graph(self): - validation_n = self.validation_rounds # validation datasets's execution number - graph_path = f"{self.root_path}/workflows" - data = self.data_utils.load_results(graph_path) - - if self.round == 1: - directory = self.graph_utils.create_round_directory(graph_path, self.round) - # Load graph using graph_utils - self.graph = self.graph_utils.load_graph(self.round, graph_path) - avg_score = await self.evaluation_utils.evaluate_graph(self, directory, validation_n, data, initial=True) - - # Create a loop until the generated graph meets the check conditions - while True: - directory = self.graph_utils.create_round_directory(graph_path, self.round + 1) - - top_rounds = self.data_utils.get_top_rounds(self.sample) - sample = self.data_utils.select_round(top_rounds) - - prompt, graph_load = self.graph_utils.read_graph_files(sample["round"], graph_path) - graph = self.graph_utils.extract_solve_graph(graph_load) - - processed_experience = self.experience_utils.load_experience() - experience = self.experience_utils.format_experience(processed_experience, sample["round"]) - - operator_description = self.graph_utils.load_operators_description(self.operators) - log_data = self.data_utils.load_log(sample["round"]) - - graph_optimize_prompt = self.graph_utils.create_graph_optimize_prompt( - experience, sample["score"], graph[0], prompt, operator_description, self.type, log_data - ) - - graph_optimize_node = await ActionNode.from_pydantic(GraphOptimize).fill( - context=graph_optimize_prompt, mode="xml_fill", llm=self.optimize_llm - ) - - response = await self.graph_utils.get_graph_optimize_response(graph_optimize_node) - - # Check if the modification meets the conditions - check = self.experience_utils.check_modification( - processed_experience, response["modification"], sample["round"] - ) - - # If `check` is True, break the loop; otherwise, regenerate the graph - if check: - break - - # Save the graph and evaluate - self.graph_utils.write_graph_files(directory, response, self.round + 1, self.dataset) - - experience = self.experience_utils.create_experience_data(sample, response["modification"]) - - self.graph = self.graph_utils.load_graph(self.round + 1, graph_path) - - logger.info(directory) - - avg_score = await self.evaluation_utils.evaluate_graph(self, directory, validation_n, data, initial=False) - - self.experience_utils.update_experience(directory, experience, avg_score) - - return avg_score - - async def test(self): - rounds = [5] # You can choose the rounds you want to test here. - data = [] - - graph_path = f"{self.root_path}/workflows_test" - json_file_path = self.data_utils.get_results_file_path(graph_path) - - data = self.data_utils.load_results(graph_path) - - for round in rounds: - directory = self.graph_utils.create_round_directory(graph_path, round) - self.graph = self.graph_utils.load_graph(round, graph_path) - - score, avg_cost, total_cost = await self.evaluation_utils.evaluate_graph_test(self, directory, is_test=True) - - new_data = self.data_utils.create_result_data(round, score, avg_cost, total_cost) - data.append(new_data) - - self.data_utils.save_results(json_file_path, data) diff --git a/metagpt/ext/aflow/scripts/optimizer_utils/convergence_utils.py b/metagpt/ext/aflow/scripts/optimizer_utils/convergence_utils.py deleted file mode 100644 index 0e275f4965..0000000000 --- a/metagpt/ext/aflow/scripts/optimizer_utils/convergence_utils.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 9/23/2024 10:00 AM -# @Author : Issac -# @Desc : - -import json -import os - -import numpy as np - -from metagpt.logs import logger - - -class ConvergenceUtils: - def __init__(self, root_path): - self.root_path = root_path - self.data = None - self.rounds = None - self.avg_scores, self.stds = None, None - - def load_data(self, root_path): - """ - Read JSON file, create a new file if it doesn't exist, then return the data. - """ - rounds_dir = os.path.join(root_path, "workflows") - result_file = os.path.join(rounds_dir, "results.json") - - # Ensure directory exists - os.makedirs(rounds_dir, exist_ok=True) - - # If file doesn't exist, create a new one with an empty list - if not os.path.exists(result_file): - with open(result_file, "w") as file: - json.dump([], file) - - # Read file and return data - with open(result_file, "r") as file: - return json.load(file) - - def process_rounds(self): - """ - Organize data by round, return a dictionary of scores by round. - """ - self.data = self.load_data(root_path=self.root_path) - rounds = {} - for entry in self.data: - round_number = entry["round"] - score = entry["score"] - if round_number not in rounds: - rounds[round_number] = [] - rounds[round_number].append(score) - return rounds - - def calculate_avg_and_std(self): - """ - Calculate average score and standard deviation for each round, return two lists: average scores and standard deviations. - """ - self.rounds = self.process_rounds() - - sorted_rounds = sorted(self.rounds.items(), key=lambda x: x[0]) - avg_scores = [] - stds = [] - for round_number, scores in sorted_rounds: - avg_scores.append(np.mean(scores)) - stds.append(np.std(scores)) - return avg_scores, stds - - def check_convergence(self, top_k=3, z=0, consecutive_rounds=5): - """ - Check for convergence. z is the z-score corresponding to the confidence level. - consecutive_rounds is the number of consecutive rounds that must meet the stop condition. - """ - # Calculate average score and standard deviation for each round - self.avg_scores, self.stds = self.calculate_avg_and_std() - # If total rounds are not enough to calculate top_k+1 rounds, return not converged - if len(self.avg_scores) < top_k + 1: - return False, None, None - convergence_count = 0 # Convergence counter - previous_y = None # Y value of the previous round (average of top_k scores) - sigma_y_previous = None # Standard error of Y value from previous round - for i in range(len(self.avg_scores)): - # Dynamically select top_k from current round and all previous rounds - top_k_indices = np.argsort(self.avg_scores[: i + 1])[::-1][ - :top_k - ] # Select top k indices by descending average score - top_k_scores = [self.avg_scores[j] for j in top_k_indices] # Get list of top k scores - top_k_stds = [ - self.stds[j] for j in top_k_indices - ] # Get list of standard deviations corresponding to top k scores - # Calculate mean of top k scores for current round, i.e., y_current - y_current = np.mean(top_k_scores) - # Calculate standard error of y_current (sigma_y_current), representing score dispersion - sigma_y_current = np.sqrt(np.sum([s**2 for s in top_k_stds]) / (top_k**2)) - # If not the first round, calculate change in Y (Delta_Y) and corresponding standard error - if previous_y is not None: - # Calculate Y difference between current round and previous round - delta_y = y_current - previous_y - # Calculate standard error of Y difference (sigma_Delta_Y) - sigma_delta_y = np.sqrt(sigma_y_current**2 + sigma_y_previous**2) - # Check if Y change is within acceptable confidence interval, i.e., convergence condition - if abs(delta_y) <= z * sigma_delta_y: - convergence_count += 1 - # If consecutive converged rounds reach set value, return convergence information - if convergence_count >= consecutive_rounds: - return True, i - consecutive_rounds + 1, i - else: - # If change is large, reset convergence counter - convergence_count = 0 - # Update Y value and standard error for previous round - previous_y = y_current - sigma_y_previous = sigma_y_current - # If convergence condition not met, return not converged - return False, None, None - - def print_results(self): - """ - Print average score and standard deviation for all rounds. - """ - self.avg_scores, self.stds = self.calculate_avg_and_std() - for i, (avg_score, std) in enumerate(zip(self.avg_scores, self.stds), 1): - logger.info(f"Round {i}: Average Score = {avg_score:.4f}, Standard Deviation = {std:.4f}") - - -if __name__ == "__main__": - # Use this class and specify top_k - checker = ConvergenceUtils("path") # For example, set top_k=5 - converged, convergence_round, final_round = checker.check_convergence() - - if converged: - logger.info(f"Convergence detected, occurred at round {convergence_round}, final round is {final_round}") - else: - logger.info("No convergence detected within all rounds") - - # Print average score and standard deviation for each round - checker.print_results() diff --git a/metagpt/ext/aflow/scripts/optimizer_utils/data_utils.py b/metagpt/ext/aflow/scripts/optimizer_utils/data_utils.py deleted file mode 100644 index 2a09e08201..0000000000 --- a/metagpt/ext/aflow/scripts/optimizer_utils/data_utils.py +++ /dev/null @@ -1,149 +0,0 @@ -import datetime -import json -import os -import random - -import numpy as np -import pandas as pd - -from metagpt.logs import logger -from metagpt.utils.common import read_json_file, write_json_file - - -class DataUtils: - def __init__(self, root_path: str): - self.root_path = root_path - self.top_scores = [] - - def load_results(self, path: str) -> list: - result_path = os.path.join(path, "results.json") - if os.path.exists(result_path): - with open(result_path, "r") as json_file: - try: - return json.load(json_file) - except json.JSONDecodeError: - return [] - return [] - - def get_top_rounds(self, sample: int, path=None, mode="Graph"): - self._load_scores(path, mode) - unique_rounds = set() - unique_top_scores = [] - - first_round = next((item for item in self.top_scores if item["round"] == 1), None) - if first_round: - unique_top_scores.append(first_round) - unique_rounds.add(1) - - for item in self.top_scores: - if item["round"] not in unique_rounds: - unique_top_scores.append(item) - unique_rounds.add(item["round"]) - - if len(unique_top_scores) >= sample: - break - - return unique_top_scores - - def select_round(self, items): - if not items: - raise ValueError("Item list is empty.") - - sorted_items = sorted(items, key=lambda x: x["score"], reverse=True) - scores = [item["score"] * 100 for item in sorted_items] - - probabilities = self._compute_probabilities(scores) - logger.info(f"\nMixed probability distribution: {probabilities}") - logger.info(f"\nSorted rounds: {sorted_items}") - - selected_index = np.random.choice(len(sorted_items), p=probabilities) - logger.info(f"\nSelected index: {selected_index}, Selected item: {sorted_items[selected_index]}") - - return sorted_items[selected_index] - - def _compute_probabilities(self, scores, alpha=0.2, lambda_=0.3): - scores = np.array(scores, dtype=np.float64) - n = len(scores) - - if n == 0: - raise ValueError("Score list is empty.") - - uniform_prob = np.full(n, 1.0 / n, dtype=np.float64) - - max_score = np.max(scores) - shifted_scores = scores - max_score - exp_weights = np.exp(alpha * shifted_scores) - - sum_exp_weights = np.sum(exp_weights) - if sum_exp_weights == 0: - raise ValueError("Sum of exponential weights is 0, cannot normalize.") - - score_prob = exp_weights / sum_exp_weights - - mixed_prob = lambda_ * uniform_prob + (1 - lambda_) * score_prob - - total_prob = np.sum(mixed_prob) - if not np.isclose(total_prob, 1.0): - mixed_prob = mixed_prob / total_prob - - return mixed_prob - - def load_log(self, cur_round, path=None, mode: str = "Graph"): - if mode == "Graph": - log_dir = os.path.join(self.root_path, "workflows", f"round_{cur_round}", "log.json") - else: - log_dir = path - - # 检查文件是否存在 - if not os.path.exists(log_dir): - return "" # 如果文件不存在,返回空字符串 - logger.info(log_dir) - data = read_json_file(log_dir, encoding="utf-8") - - if isinstance(data, dict): - data = [data] - elif not isinstance(data, list): - data = list(data) - - if not data: - return "" - - sample_size = min(3, len(data)) - random_samples = random.sample(data, sample_size) - - log = "" - for sample in random_samples: - log += json.dumps(sample, indent=4, ensure_ascii=False) + "\n\n" - - return log - - def get_results_file_path(self, graph_path: str) -> str: - return os.path.join(graph_path, "results.json") - - def create_result_data(self, round: int, score: float, avg_cost: float, total_cost: float) -> dict: - now = datetime.datetime.now() - return {"round": round, "score": score, "avg_cost": avg_cost, "total_cost": total_cost, "time": now} - - def save_results(self, json_file_path: str, data: list): - write_json_file(json_file_path, data, encoding="utf-8", indent=4) - - def _load_scores(self, path=None, mode="Graph"): - if mode == "Graph": - rounds_dir = os.path.join(self.root_path, "workflows") - else: - rounds_dir = path - - result_file = os.path.join(rounds_dir, "results.json") - self.top_scores = [] - - data = read_json_file(result_file, encoding="utf-8") - df = pd.DataFrame(data) - - scores_per_round = df.groupby("round")["score"].mean().to_dict() - - for round_number, average_score in scores_per_round.items(): - self.top_scores.append({"round": round_number, "score": average_score}) - - self.top_scores.sort(key=lambda x: x["score"], reverse=True) - - return self.top_scores diff --git a/metagpt/ext/aflow/scripts/optimizer_utils/evaluation_utils.py b/metagpt/ext/aflow/scripts/optimizer_utils/evaluation_utils.py deleted file mode 100644 index 77683017ee..0000000000 --- a/metagpt/ext/aflow/scripts/optimizer_utils/evaluation_utils.py +++ /dev/null @@ -1,63 +0,0 @@ -from metagpt.ext.aflow.scripts.evaluator import Evaluator - - -class EvaluationUtils: - def __init__(self, root_path: str): - self.root_path = root_path - - async def evaluate_initial_round(self, optimizer, graph_path, directory, validation_n, data): - # 使用 optimizer 的 graph_utils 来加载图 - optimizer.graph = optimizer.graph_utils.load_graph(optimizer.round, graph_path) - evaluator = Evaluator(eval_path=directory) - - for i in range(validation_n): - score, avg_cost, total_cost = await evaluator.graph_evaluate( - optimizer.dataset, - optimizer.graph, - {"dataset": optimizer.dataset, "llm_config": optimizer.execute_llm_config}, - directory, - is_test=False, - ) - - new_data = optimizer.data_utils.create_result_data(optimizer.round, score, avg_cost, total_cost) - data.append(new_data) - - result_path = optimizer.data_utils.get_results_file_path(graph_path) - optimizer.data_utils.save_results(result_path, data) - - return data - - async def evaluate_graph(self, optimizer, directory, validation_n, data, initial=False): - evaluator = Evaluator(eval_path=directory) - sum_score = 0 - - for i in range(validation_n): - score, avg_cost, total_cost = await evaluator.graph_evaluate( - optimizer.dataset, - optimizer.graph, - {"dataset": optimizer.dataset, "llm_config": optimizer.execute_llm_config}, - directory, - is_test=False, - ) - - cur_round = optimizer.round + 1 if initial is False else optimizer.round - - new_data = optimizer.data_utils.create_result_data(cur_round, score, avg_cost, total_cost) - data.append(new_data) - - result_path = optimizer.data_utils.get_results_file_path(f"{optimizer.root_path}/workflows") - optimizer.data_utils.save_results(result_path, data) - - sum_score += score - - return sum_score / validation_n - - async def evaluate_graph_test(self, optimizer, directory, is_test=True): - evaluator = Evaluator(eval_path=directory) - return await evaluator.graph_evaluate( - optimizer.dataset, - optimizer.graph, - {"dataset": optimizer.dataset, "llm_config": optimizer.execute_llm_config}, - directory, - is_test=is_test, - ) diff --git a/metagpt/ext/aflow/scripts/optimizer_utils/experience_utils.py b/metagpt/ext/aflow/scripts/optimizer_utils/experience_utils.py deleted file mode 100644 index 43f9eb1d5c..0000000000 --- a/metagpt/ext/aflow/scripts/optimizer_utils/experience_utils.py +++ /dev/null @@ -1,96 +0,0 @@ -import json -import os -from collections import defaultdict - -from metagpt.logs import logger -from metagpt.utils.common import read_json_file, write_json_file - - -class ExperienceUtils: - def __init__(self, root_path: str): - self.root_path = root_path - - def load_experience(self, path=None, mode: str = "Graph"): - if mode == "Graph": - rounds_dir = os.path.join(self.root_path, "workflows") - else: - rounds_dir = path - - experience_data = defaultdict(lambda: {"score": None, "success": {}, "failure": {}}) - - for round_dir in os.listdir(rounds_dir): - if os.path.isdir(os.path.join(rounds_dir, round_dir)) and round_dir.startswith("round_"): - round_path = os.path.join(rounds_dir, round_dir) - try: - round_number = int(round_dir.split("_")[1]) - json_file_path = os.path.join(round_path, "experience.json") - if os.path.exists(json_file_path): - data = read_json_file(json_file_path, encoding="utf-8") - father_node = data["father node"] - - if experience_data[father_node]["score"] is None: - experience_data[father_node]["score"] = data["before"] - - if data["succeed"]: - experience_data[father_node]["success"][round_number] = { - "modification": data["modification"], - "score": data["after"], - } - else: - experience_data[father_node]["failure"][round_number] = { - "modification": data["modification"], - "score": data["after"], - } - except Exception as e: - logger.info(f"Error processing {round_dir}: {str(e)}") - - experience_data = dict(experience_data) - - output_path = os.path.join(rounds_dir, "processed_experience.json") - with open(output_path, "w", encoding="utf-8") as outfile: - json.dump(experience_data, outfile, indent=4, ensure_ascii=False) - - logger.info(f"Processed experience data saved to {output_path}") - return experience_data - - def format_experience(self, processed_experience, sample_round): - experience_data = processed_experience.get(sample_round) - if experience_data: - experience = f"Original Score: {experience_data['score']}\n" - experience += "These are some conclusions drawn from experience:\n\n" - for key, value in experience_data["failure"].items(): - experience += f"-Absolutely prohibit {value['modification']} (Score: {value['score']})\n" - for key, value in experience_data["success"].items(): - experience += f"-Absolutely prohibit {value['modification']} \n" - experience += "\n\nNote: Take into account past failures and avoid repeating the same mistakes, as these failures indicate that these approaches are ineffective. You must fundamentally change your way of thinking, rather than simply using more advanced Python syntax like for, if, else, etc., or modifying the prompt." - else: - experience = f"No experience data found for round {sample_round}." - return experience - - def check_modification(self, processed_experience, modification, sample_round): - experience_data = processed_experience.get(sample_round) - if experience_data: - for key, value in experience_data["failure"].items(): - if value["modification"] == modification: - return False - for key, value in experience_data["success"].items(): - if value["modification"] == modification: - return False - return True - else: - return True # 如果 experience_data 为空,也返回 True - - def create_experience_data(self, sample, modification): - return { - "father node": sample["round"], - "modification": modification, - "before": sample["score"], - "after": None, - "succeed": None, - } - - def update_experience(self, directory, experience, avg_score): - experience["after"] = avg_score - experience["succeed"] = bool(avg_score > experience["before"]) - - write_json_file(os.path.join(directory, "experience.json"), experience, encoding="utf-8", indent=4) diff --git a/metagpt/ext/aflow/scripts/optimizer_utils/graph_utils.py b/metagpt/ext/aflow/scripts/optimizer_utils/graph_utils.py deleted file mode 100644 index a0ebe9b263..0000000000 --- a/metagpt/ext/aflow/scripts/optimizer_utils/graph_utils.py +++ /dev/null @@ -1,125 +0,0 @@ -import json -import os -import re -import time -import traceback -from typing import List - -from metagpt.ext.aflow.scripts.prompts.optimize_prompt import ( - WORKFLOW_CUSTOM_USE, - WORKFLOW_INPUT, - WORKFLOW_OPTIMIZE_PROMPT, - WORKFLOW_TEMPLATE, -) -from metagpt.logs import logger - - -class GraphUtils: - def __init__(self, root_path: str): - self.root_path = root_path - - def create_round_directory(self, graph_path: str, round_number: int) -> str: - directory = os.path.join(graph_path, f"round_{round_number}") - os.makedirs(directory, exist_ok=True) - return directory - - def load_graph(self, round_number: int, workflows_path: str): - workflows_path = workflows_path.replace("\\", ".").replace("/", ".") - graph_module_name = f"{workflows_path}.round_{round_number}.graph" - - try: - graph_module = __import__(graph_module_name, fromlist=[""]) - graph_class = getattr(graph_module, "Workflow") - return graph_class - except ImportError as e: - logger.info(f"Error loading graph for round {round_number}: {e}") - raise - - def read_graph_files(self, round_number: int, workflows_path: str): - prompt_file_path = os.path.join(workflows_path, f"round_{round_number}", "prompt.py") - graph_file_path = os.path.join(workflows_path, f"round_{round_number}", "graph.py") - - try: - with open(prompt_file_path, "r", encoding="utf-8") as file: - prompt_content = file.read() - with open(graph_file_path, "r", encoding="utf-8") as file: - graph_content = file.read() - except FileNotFoundError as e: - logger.info(f"Error: File not found for round {round_number}: {e}") - raise - except Exception as e: - logger.info(f"Error loading prompt for round {round_number}: {e}") - raise - return prompt_content, graph_content - - def extract_solve_graph(self, graph_load: str) -> List[str]: - pattern = r"class Workflow:.+" - return re.findall(pattern, graph_load, re.DOTALL) - - def load_operators_description(self, operators: List[str]) -> str: - path = f"{self.root_path}/workflows/template/operator.json" - operators_description = "" - for id, operator in enumerate(operators): - operator_description = self._load_operator_description(id + 1, operator, path) - operators_description += f"{operator_description}\n" - return operators_description - - def _load_operator_description(self, id: int, operator_name: str, file_path: str) -> str: - with open(file_path, "r") as f: - operator_data = json.load(f) - matched_data = operator_data[operator_name] - desc = matched_data["description"] - interface = matched_data["interface"] - return f"{id}. {operator_name}: {desc}, with interface {interface})." - - def create_graph_optimize_prompt( - self, - experience: str, - score: float, - graph: str, - prompt: str, - operator_description: str, - type: str, - log_data: str, - ) -> str: - graph_input = WORKFLOW_INPUT.format( - experience=experience, - score=score, - graph=graph, - prompt=prompt, - operator_description=operator_description, - type=type, - log=log_data, - ) - graph_system = WORKFLOW_OPTIMIZE_PROMPT.format(type=type) - return graph_input + WORKFLOW_CUSTOM_USE + graph_system - - async def get_graph_optimize_response(self, graph_optimize_node): - max_retries = 5 - retries = 0 - - while retries < max_retries: - try: - response = graph_optimize_node.instruct_content.model_dump() - return response - except Exception as e: - retries += 1 - logger.info(f"Error generating prediction: {e}. Retrying... ({retries}/{max_retries})") - if retries == max_retries: - logger.info("Maximum retries reached. Skipping this sample.") - break - traceback.print_exc() - time.sleep(5) - return None - - def write_graph_files(self, directory: str, response: dict, round_number: int, dataset: str): - graph = WORKFLOW_TEMPLATE.format(graph=response["graph"], round=round_number, dataset=dataset) - - with open(os.path.join(directory, "graph.py"), "w", encoding="utf-8") as file: - file.write(graph) - - with open(os.path.join(directory, "prompt.py"), "w", encoding="utf-8") as file: - file.write(response["prompt"]) - - with open(os.path.join(directory, "__init__.py"), "w", encoding="utf-8") as file: - file.write("") diff --git a/metagpt/ext/aflow/scripts/prompts/optimize_prompt.py b/metagpt/ext/aflow/scripts/prompts/optimize_prompt.py deleted file mode 100644 index a2e862ec29..0000000000 --- a/metagpt/ext/aflow/scripts/prompts/optimize_prompt.py +++ /dev/null @@ -1,59 +0,0 @@ -WORKFLOW_OPTIMIZE_PROMPT = """You are building a Graph and corresponding Prompt to jointly solve {type} problems. -Referring to the given graph and prompt, which forms a basic example of a {type} solution approach, -please reconstruct and optimize them. You can add, modify, or delete nodes, parameters, or prompts. Include your -single modification in XML tags in your reply. Ensure they are complete and correct to avoid runtime failures. When -optimizing, you can incorporate critical thinking methods like review, revise, ensemble (generating multiple answers through different/similar prompts, then voting/integrating/checking the majority to obtain a final answer), selfAsk, etc. Consider -Python's loops (for, while, list comprehensions), conditional statements (if-elif-else, ternary operators), -or machine learning techniques (e.g., linear regression, decision trees, neural networks, clustering). The graph -complexity should not exceed 10. Use logical and control flow (IF-ELSE, loops) for a more enhanced graphical -representation.Ensure that all the prompts required by the current graph from prompt_custom are included.Exclude any other prompts. -Output the modified graph and all the necessary Prompts in prompt_custom (if needed). -The prompt you need to generate is only the one used in `prompt_custom.XXX` within Custom. Other methods already have built-in prompts and are prohibited from being generated. Only generate those needed for use in `prompt_custom`; please remove any unused prompts in prompt_custom. -the generated prompt must not contain any placeholders. -Considering information loss, complex graphs may yield better results, but insufficient information transmission can omit the solution. It's crucial to include necessary context during the process.""" - - -WORKFLOW_INPUT = """ -Here is a graph and the corresponding prompt (prompt only related to the custom method) that performed excellently in a previous iteration (maximum score is 1). You must make further optimizations and improvements based on this graph. The modified graph must differ from the provided example, and the specific differences should be noted within the xxx section.\n - - {experience} - (such as:add /delete /modify/ ...) - {score} - {graph} - {prompt}(only prompt_custom) - {operator_description} - -Below are the logs of some results with the aforementioned Graph that performed well but encountered errors, which can be used as references for optimization: -{log} - -First, provide optimization ideas. **Only one detail point can be modified at a time**, and no more than 5 lines of code may be changed per modification—extensive modifications are strictly prohibited to maintain project focus! -When introducing new functionalities in the graph, please make sure to import the necessary libraries or modules yourself, except for operator, prompt_custom, create_llm_instance, and CostManage, which have already been automatically imported. -**Under no circumstances should Graph output None for any field.** -Use custom methods to restrict your output format, rather than using code (outside of the code, the system will extract answers based on certain rules and score them). -It is very important to format the Graph output answers, you can refer to the standard answer format in the log. -""" - -WORKFLOW_CUSTOM_USE = """\nHere's an example of using the `custom` method in graph: -``` -# You can write your own prompt in prompt_custom and then use it in the Custom method in the graph -response = await self.custom(input=problem, instruction=prompt_custom.XXX_PROMPT) -# You can also concatenate previously generated string results in the input to provide more comprehensive contextual information. -# response = await self.custom(input=problem+f"xxx:{xxx}, xxx:{xxx}", instruction=prompt_custom.XXX_PROMPT) -# The output from the Custom method can be placed anywhere you need it, as shown in the example below -solution = await self.generate(problem=f"question:{problem}, xxx:{response['response']}") -``` -Note: In custom, the input and instruction are directly concatenated(instruction+input), and placeholders are not supported. Please ensure to add comments and handle the concatenation externally.\n - -**Introducing multiple operators at appropriate points can enhance performance. If you find that some provided operators are not yet used in the graph, try incorporating them.** -""" - -WORKFLOW_TEMPLATE = """from typing import Literal -import metagpt.ext.aflow.scripts.optimized.{dataset}.workflows.template.operator as operator -import metagpt.ext.aflow.scripts.optimized.{dataset}.workflows.round_{round}.prompt as prompt_custom -from metagpt.provider.llm_provider_registry import create_llm_instance -from metagpt.utils.cost_manager import CostManager - -DatasetType = Literal["HumanEval", "MBPP", "GSM8K", "MATH", "HotpotQA", "DROP"] - -{graph} -""" diff --git a/metagpt/ext/aflow/scripts/prompts/prompt.py b/metagpt/ext/aflow/scripts/prompts/prompt.py deleted file mode 100644 index 16bf78af87..0000000000 --- a/metagpt/ext/aflow/scripts/prompts/prompt.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 6/26/2024 17:07 PM -# @Author : didi -# @Desc : prompts of operators - -ANSWER_GENERATION_PROMPT = """ -Think step by step and solve the problem. -1. In the "thought" field, explain your thinking process in detail. -2. In the "answer" field, provide the final answer concisely and clearly. The answer should be a direct response to the question, without including explanations or reasoning. -Your task: {input} -""" - -FORMAT_PROMPT = """ -For the question described as {problem_description}, -please extract a short and concise answer contains only one word/few words from the following solution: {solution}. -Make sure there are no additional comments or explanations in your response. -""" - -SC_ENSEMBLE_PROMPT = """ -Given the question described as follows: {question} -Several solutions have been generated to address the given question. They are as follows: -{solutions} - -Carefully evaluate these solutions and identify the answer that appears most frequently across them. This consistency in answers is crucial for determining the most reliable solution. - -In the "thought" field, provide a detailed explanation of your thought process. In the "solution_letter" field, output only the single letter ID (A, B, C, etc.) corresponding to the most consistent solution. Do not include any additional text or explanation in the "solution_letter" field. -""" - -PYTHON_CODE_VERIFIER_PROMPT = """ -You are a professional Python programmer. Your task is to write complete, self-contained code based on a given mathematical problem and output the answer. The code should include all necessary imports and dependencies, and be ready to run without additional setup or environment configuration. - -Problem description: {problem} -Other analysis: {analysis} -{feedback} - -Your code should: -1. Implement the calculation steps described in the problem. -2. Define a function named `solve` that performs the calculation and returns the result. The `solve` function should not require any input parameters; instead, it should obtain all necessary inputs from within the function or from globally defined variables. -3. `solve` function return the final calculation result. - -Please ensure your code is efficient, well-commented, and follows Python best practices. The output should be limited to basic data types such as strings, integers, and floats. It is prohibited to transmit images or other file formats. The code output is intended for a text-based language model. -""" - - -REFLECTION_ON_PUBLIC_TEST_PROMPT = """ -Given a code problem and a python code solution which failed to pass test or execute, you need to analyze the reason for the failure and propose a better code solution.: -### problem -{problem} - -### Code Solution -{solution} - -### Execution Result -{exec_pass} - -#### Failed Test Case -{test_fail} - -Please provide a reflection on the failed test cases and code solution, followed by a better code solution without any additional text or test cases. -""" - -MD_ENSEMBLE_PROMPT = """ -Given the question described as follows: {question} -Several solutions have been generated to address the given question. They are as follows: -{solutions} - -Carefully evaluate these solutions and identify the solution that is more capable of solving the problem compared to other solutions, as this is crucial for problem-solving. - -In the "thought" field, provide a detailed explanation of your thought process. In the "solution_letter" field, output only the single letter ID (A, B, C, etc.) corresponding to the solution. Do not include any additional text or explanation in the "solution_letter" field. -""" - -REVIEW_PROMPT = """ -Given a problem and a thoughtful solution, your task is to using critical thinking (questioning) to review the solution's correctness and provide a review result in boolean format. - -problem: {problem} -solution: {solution} - -If you are more than 95 percent confident that the final answer is incorrect, please return False and give a feedback for the error. Otherwise, please return True and give a explanation for the correctness. -""" - -REVISE_PROMPT = """ -Given a problem and a thoughtful solution which is just reviewed as incorrect, your task is to revise the solution to solve the question and ensure the final code solution is wrapped with ```python```. - -problem: {problem} -solution: {solution} -feedback: {feedback} - -Ensure the output code is self-contained, and without any additional text or test cases. -""" diff --git a/metagpt/ext/aflow/scripts/utils.py b/metagpt/ext/aflow/scripts/utils.py deleted file mode 100644 index 5e6222dc49..0000000000 --- a/metagpt/ext/aflow/scripts/utils.py +++ /dev/null @@ -1,125 +0,0 @@ -""" -@Time : 2024/7/24 16:37 -@Author : didi -@File : utils.py -""" - -import json -import re -from enum import Enum -from typing import Any, List, Tuple - - -class CodeDataset(Enum): - HUMAN_EVAL = "HumanEval" - MBPP = "MBPP" - - -def extract_test_cases_from_jsonl(entry_point: str, dataset: CodeDataset = CodeDataset.HUMAN_EVAL): - if dataset == CodeDataset.HUMAN_EVAL.value: - file_path = "metagpt/ext/aflow/data/humaneval_public_test.jsonl" - # Retain the original hardcoded test cases - hardcoded_cases = { - "find_zero": "", - "decode_cyclic": "", - "decode_shift": "", - "by_length": "", - "add": "", - "triangle_area": "", - "correct_bracketing": "", - "solve": "", - "sum_squares": "", - "starts_one_ends": "", - } - elif dataset == CodeDataset.MBPP.value: - file_path = "metagpt/ext/aflow/data/mbpp_public_test.jsonl" - hardcoded_cases = { - "remove_odd": "", - "replace_spaces": "", - "snake_to_camel": "", - "Split": "", - "swap_List": "", - "square_Sum": "", - "sort_sublists": "", - "unique_sublists": "", - } - # Check if there are hardcoded test cases - if entry_point in hardcoded_cases: - return hardcoded_cases[entry_point] - - # If there are no hardcoded test cases, read from the file - with open(file_path, "r") as file: - for line in file: - data = json.loads(line) - if data.get("entry_point") == entry_point: - return data.get("test") - - return None - - -def extract_test_cases(docstring: str) -> List[Tuple[str, List[Any], Any]]: - # Use regular expressions to match test cases, now capturing function names and any output - pattern = r">>> (\w+)\((.*?)\)\n\s*(.*?)(?=\n|$)" - matches = re.findall(pattern, docstring, re.DOTALL) - - test_cases = [] - for match in matches: - func_name, input_str, expected_output = match - - # Process input - input_list = [] - for item in input_str.split(","): - item = item.strip() - try: - # Try to convert input to numeric type - if "." in item: - input_list.append(float(item)) - else: - input_list.append(int(item)) - except ValueError: - # If unable to convert to numeric, keep as string - input_list.append(item.strip("'\"")) - - # Process output - try: - # Try to convert output to numeric or boolean value - if expected_output.lower() == "true": - expected_output = True - elif expected_output.lower() == "false": - expected_output = False - elif "." in expected_output: - expected_output = float(expected_output) - else: - expected_output = int(expected_output) - except ValueError: - # If unable to convert, keep as string - expected_output = expected_output.strip("'\"") - - test_cases.append([func_name, input_list, expected_output]) - - return test_cases - - -def test_cases_2_test_functions(solution: str, test_cases: str): - tester_function = f""" -{solution} - -{test_cases} -""" - return tester_function - - -def test_case_2_test_function(solution: str, test_case: str, entry_point: str): - tester_function = f""" -{solution} - - -def check(candidate): - {test_case} - -def test_check(): - check({entry_point}) - -test_check() -""" - return tester_function diff --git a/metagpt/ext/aflow/scripts/workflow.py b/metagpt/ext/aflow/scripts/workflow.py deleted file mode 100644 index 47b54021b2..0000000000 --- a/metagpt/ext/aflow/scripts/workflow.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 6/27/2024 22:07 PM -# @Author : didi -# @Desc : Basic Graph Class - - -from metagpt.ext.aflow.scripts.evaluator import DatasetType -from metagpt.provider.llm_provider_registry import create_llm_instance -from metagpt.utils.cost_manager import CostManager - - -class Workflow: - def __init__( - self, - name: str, - llm_config, - dataset: DatasetType, - ) -> None: - self.name = name - self.dataset = dataset - self.llm = create_llm_instance(llm_config) - self.llm.cost_manager = CostManager() - - async def __call__(self, problem: str): - """ - Implementation of the workflow - """ - raise NotImplementedError("This method should be implemented by the subclass") diff --git a/metagpt/ext/android_assistant/README.md b/metagpt/ext/android_assistant/README.md deleted file mode 100644 index fe8b4b3e32..0000000000 --- a/metagpt/ext/android_assistant/README.md +++ /dev/null @@ -1,118 +0,0 @@ -# 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 deleted file mode 100644 index a1abbe3b0b..0000000000 --- a/metagpt/ext/android_assistant/README_CN.md +++ /dev/null @@ -1,113 +0,0 @@ -# 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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/ext/android_assistant/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/ext/android_assistant/actions/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index bcfb2ed893..0000000000 --- a/metagpt/ext/android_assistant/actions/manual_record.py +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 deleted file mode 100644 index 304daf6556..0000000000 --- a/metagpt/ext/android_assistant/actions/parse_record.py +++ /dev/null @@ -1,137 +0,0 @@ -#!/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 deleted file mode 100644 index 210c93e236..0000000000 --- a/metagpt/ext/android_assistant/actions/parse_record_an.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/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 deleted file mode 100644 index 4d8bb0e1eb..0000000000 --- a/metagpt/ext/android_assistant/actions/screenshot_parse.py +++ /dev/null @@ -1,204 +0,0 @@ -#!/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 deleted file mode 100644 index eb23ba9344..0000000000 --- a/metagpt/ext/android_assistant/actions/screenshot_parse_an.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/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 deleted file mode 100644 index 5e9cfbb454..0000000000 --- a/metagpt/ext/android_assistant/actions/self_learn_and_reflect.py +++ /dev/null @@ -1,231 +0,0 @@ -# !/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 deleted file mode 100644 index 305b7376af..0000000000 --- a/metagpt/ext/android_assistant/actions/self_learn_reflect_an.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/ext/android_assistant/prompts/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 34baf58417..0000000000 --- a/metagpt/ext/android_assistant/prompts/assistant_prompt.py +++ /dev/null @@ -1,168 +0,0 @@ -#!/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 deleted file mode 100644 index 1bde53f041..0000000000 --- a/metagpt/ext/android_assistant/prompts/operation_prompt.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/ext/android_assistant/roles/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 97d66d30e4..0000000000 --- a/metagpt/ext/android_assistant/roles/android_assistant.py +++ /dev/null @@ -1,145 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/ext/android_assistant/utils/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index c066f98b62..0000000000 --- a/metagpt/ext/android_assistant/utils/schema.py +++ /dev/null @@ -1,158 +0,0 @@ -#!/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 deleted file mode 100644 index f1fa138692..0000000000 --- a/metagpt/ext/android_assistant/utils/utils.py +++ /dev/null @@ -1,329 +0,0 @@ -#!/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/cr/__init__.py b/metagpt/ext/cr/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/ext/cr/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : diff --git a/metagpt/ext/cr/actions/__init__.py b/metagpt/ext/cr/actions/__init__.py deleted file mode 100644 index 8b13789179..0000000000 --- a/metagpt/ext/cr/actions/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/metagpt/ext/cr/utils/__init__.py b/metagpt/ext/cr/utils/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/metagpt/ext/cr/utils/schema.py b/metagpt/ext/cr/utils/schema.py deleted file mode 100644 index beb27a07f9..0000000000 --- a/metagpt/ext/cr/utils/schema.py +++ /dev/null @@ -1,20 +0,0 @@ -from typing import Literal - -from pydantic import BaseModel, Field - - -class Point(BaseModel): - id: int = Field(default=0, description="ID of the point.") - text: str = Field(default="", description="Content of the point.") - language: Literal["Python", "Java"] = Field( - default="Python", description="The programming language that the point corresponds to." - ) - file_path: str = Field(default="", description="The file that the points come from.") - start_line: int = Field(default=0, description="The starting line number that the point refers to.") - end_line: int = Field(default=0, description="The ending line number that the point refers to.") - detail: str = Field(default="", description="File content from start_line to end_line.") - yes_example: str = Field(default="", description="yes of point examples") - no_example: str = Field(default="", description="no of point examples") - - def rag_key(self) -> str: - return self.text diff --git a/metagpt/ext/sela/README.md b/metagpt/ext/sela/README.md deleted file mode 100644 index 6fb47b42cd..0000000000 --- a/metagpt/ext/sela/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# SELA: Tree-Search Enhanced LLM Agents for Automated Machine Learning - - -Official implementation for paper [SELA: Tree-Search Enhanced LLM Agents for Automated Machine Learning](https://arxiv.org/abs/2410.17238). - - -SELA is an innovative system that enhances Automated Machine Learning (AutoML) by integrating Monte Carlo Tree Search (MCTS) with LLM-based agents. Traditional AutoML methods often generate low-diversity and suboptimal code, limiting their effectiveness in model selection and ensembling. SELA addresses these challenges by representing pipeline configurations as trees, enabling agents to intelligently explore the solution space and iteratively refine their strategies based on experimental feedback. - -## 1. Data Preparation - -You can either download the datasets from the link or prepare the datasets from scratch. -- **Download Datasets:** [Dataset Link](https://drive.google.com/drive/folders/151FIZoLygkRfeJgSI9fNMiLsixh1mK0r?usp=sharing) -- **Download and prepare datasets from scratch:** - ```bash - cd data - python dataset.py --save_analysis_pool - python hf_data.py --save_analysis_pool - ``` - -## 2. Configurations - -### Data Config - -- **`datasets.yaml`:** Provide base prompts, metrics, and target columns for respective datasets. -- **`data.yaml`:** Modify `datasets_dir` to the base directory of all prepared datasets. - -### LLM Config - -```yaml -llm: - api_type: 'openai' - model: deepseek-coder - base_url: "https://your_base_url" - api_key: sk-xxx - temperature: 0.5 -``` - - -## 3. SELA - -### Run SELA - -#### Setup - -```bash -pip install -e . - -cd metagpt/ext/sela - -pip install -r requirements.txt -``` - -#### Running Experiments - -- **Examples:** - ```bash - python run_experiment.py --exp_mode mcts --task titanic --rollouts 10 - python run_experiment.py --exp_mode mcts --task house-prices --rollouts 10 --low_is_better - ``` - -#### Parameters - -- **`--rollouts`:** The number of rollouts. -- **`--use_fixed_insights`:** Include fixed insights saved in `expo/insights/fixed_insights.json`. -- **`--low_is_better`:** Use this if the dataset has a regression metric. -- **`--from_scratch`:** Generate a new insight pool based on the dataset before running MCTS. -- **`--role_timeout`:** Limits the duration of a single simulation (e.g., `10 rollouts with timeout 1,000` = max 10,000s). -- **`--max_depth`:** Set the maximum depth of MCTS (default is 4). -- **`--load_tree`:** Load an existing MCTS tree if the previous experiment was interrupted. - - Example: - ```bash - python run_experiment.py --exp_mode mcts --task titanic --rollouts 10 - ``` - - To resume: - ```bash - python run_experiment.py --exp_mode mcts --task titanic --rollouts 7 --load_tree - ``` - -### Ablation Study - -**RandomSearch** - -- **Use a single insight:** - ```bash - python run_experiment.py --exp_mode rs --task titanic --rs_mode single - ``` - -- **Use a set of insights:** - ```bash - python run_experiment.py --exp_mode rs --task titanic --rs_mode set - ``` - -## 4. Citation -Please cite our paper if you use SELA or find it cool or useful! - -```bibtex -@misc{chi2024selatreesearchenhancedllm, - title={SELA: Tree-Search Enhanced LLM Agents for Automated Machine Learning}, - author={Yizhou Chi and Yizhang Lin and Sirui Hong and Duyi Pan and Yaying Fei and Guanghao Mei and Bangbang Liu and Tianqi Pang and Jacky Kwok and Ceyao Zhang and Bang Liu and Chenglin Wu}, - year={2024}, - eprint={2410.17238}, - archivePrefix={arXiv}, - primaryClass={cs.AI}, - url={https://arxiv.org/abs/2410.17238}, -} -``` diff --git a/metagpt/ext/sela/data.yaml b/metagpt/ext/sela/data.yaml deleted file mode 100644 index 7da5dbb3cd..0000000000 --- a/metagpt/ext/sela/data.yaml +++ /dev/null @@ -1,3 +0,0 @@ -datasets_dir: "path/to/datasets" # path to the datasets directory -work_dir: ../../../workspace # path to the workspace directory -role_dir: storage/SELA # path to the role directory \ No newline at end of file diff --git a/metagpt/ext/sela/data/custom_task.py b/metagpt/ext/sela/data/custom_task.py deleted file mode 100644 index 08a7cbabb0..0000000000 --- a/metagpt/ext/sela/data/custom_task.py +++ /dev/null @@ -1,74 +0,0 @@ -import os - -from metagpt.ext.sela.data.dataset import SPECIAL_INSTRUCTIONS -from metagpt.ext.sela.runner.mle_bench.instructions import ( - ADDITIONAL_NOTES, - INSTRUCTIONS, - INSTRUCTIONS_OBFUSCATED, -) - -MLE_BENCH_FILES = ["description.md", "description_obfuscated.md"] - - -MLE_REQUIREMENTS = """ -{instructions} - -{additonal_notes} - -COMPETITION INSTRUCTIONS ------- - -{task_description} - -## More Instructions -- You should split the training data into train and dev set with a seed of 42. -- You should use the dev set to improve your model. Print the final dev set score after training. -- output_dir: {output_dir} -- Besides `submission.csv`, you should also save your `test_predictions.csv` and `dev_predictions.csv` in the output directory. -- Note that `test_predictions.csv` should be identical to `submission.csv`. -- Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. {special_instruction} -**Do not make any plots or visualizations.** -""" - - -def get_mle_task_id(dataset_dir): - return dataset_dir.split("/")[-3] - - -def get_mle_is_lower_better(task): - from mlebench.data import get_leaderboard - from mlebench.registry import registry - - competition = registry.get_competition(task) - competition_leaderboard = get_leaderboard(competition) - return competition.grader.is_lower_better(competition_leaderboard) - - -def get_mle_bench_requirements(dataset_dir, data_config, special_instruction, obfuscated=False): - work_dir = data_config["work_dir"] - task = get_mle_task_id(dataset_dir) - output_dir = f"{work_dir}/{task}" - final_output_dir = f"{work_dir}/submission" - os.makedirs(output_dir, exist_ok=True) - if special_instruction: - special_instruction = SPECIAL_INSTRUCTIONS[special_instruction] - else: - special_instruction = "" - if obfuscated: - instructions = INSTRUCTIONS_OBFUSCATED.format(dataset_dir=dataset_dir, output_dir=final_output_dir) - task_file = "description_obfuscated.md" - else: - instructions = INSTRUCTIONS.format(dataset_dir=dataset_dir, output_dir=output_dir) - task_file = "description.md" - - with open(os.path.join(dataset_dir, task_file), encoding="utf-8") as f: - task_description = f.read() - mle_requirement = MLE_REQUIREMENTS.format( - instructions=instructions, - additonal_notes=ADDITIONAL_NOTES, - task_description=task_description, - output_dir=output_dir, - special_instruction=special_instruction, - ) - print(mle_requirement) - return mle_requirement diff --git a/metagpt/ext/sela/data/dataset.py b/metagpt/ext/sela/data/dataset.py deleted file mode 100644 index ef41790117..0000000000 --- a/metagpt/ext/sela/data/dataset.py +++ /dev/null @@ -1,395 +0,0 @@ -import argparse -import asyncio -import json -import os -from pathlib import Path - -import openml -import pandas as pd -import yaml -from sklearn.model_selection import train_test_split - -from metagpt.ext.sela.insights.solution_designer import SolutionDesigner -from metagpt.ext.sela.utils import DATA_CONFIG - -BASE_USER_REQUIREMENT = """ -This is a {datasetname} dataset. Your goal is to predict the target column `{target_col}`. -Perform data analysis, data preprocessing, feature engineering, and modeling to predict the target. -Report {metric} on the eval data. Do not plot or make any visualizations. -""" - -USE_AG = """ -- Please use autogluon for model training with presets='medium_quality', time_limit=None, give dev dataset to tuning_data, and use right eval_metric. -""" - -TEXT_MODALITY = """ -- You could use models from transformers library for this text dataset. -- Use gpu if available for faster training. -""" - -IMAGE_MODALITY = """ -- You could use models from transformers/torchvision library for this image dataset. -- Use gpu if available for faster training. -""" - -STACKING = """ -- To avoid overfitting, train a weighted ensemble model such as StackingClassifier or StackingRegressor. -- You could do some quick model prototyping to see which models work best and then use them in the ensemble. -""" - - -SPECIAL_INSTRUCTIONS = {"ag": USE_AG, "stacking": STACKING, "text": TEXT_MODALITY, "image": IMAGE_MODALITY} - -DI_INSTRUCTION = """ -## Attention -1. Please do not leak the target label in any form during training. -2. Test set does not have the target column. -3. When conducting data exploration or analysis, print out the results of your findings. -4. You should perform transformations on train, dev, and test sets at the same time (it's a good idea to define functions for this and avoid code repetition). -5. When scaling or transforming features, make sure the target column is not included. -6. You could utilize dev set to validate and improve model training. {special_instruction} - -## Saving Dev and Test Predictions -1. Save the prediction results of BOTH the dev set and test set in `dev_predictions.csv` and `test_predictions.csv` respectively in the output directory. -- Both files should contain a single column named `target` with the predicted values. -2. Make sure the prediction results are in the same format as the target column in the original training set. -- For instance, if the original target column is a list of string, the prediction results should also be strings. - -## Output Performance -Print the train and dev set performance in the last step. - -# Output dir -{output_dir} -""" - -TASK_PROMPT = """ -# User requirement -{user_requirement} -{additional_instruction} -# Data dir -train set (with labels): {train_path} -dev set (with labels): {dev_path} -test set (without labels): {test_path} -dataset description: {data_info_path} (During EDA, you can use this file to get additional information about the dataset) -""" - - -SEED = 100 -TRAIN_TEST_SPLIT = 0.8 -TRAIN_DEV_SPLIT = 0.75 - -OPENML_DATASET_IDS = [ - # reg - 41021, - 42727, - 41980, - 42225, - 531, - # cls - 41143, - 31, - 42733, - 41162, - 1067, - # multi cls - 40498, - 40982, - 12, - 40984, - 4538, -] - -CUSTOM_DATASETS = [ - ("04_titanic", "Survived"), - ("05_house-prices-advanced-regression-techniques", "SalePrice"), - ("06_santander-customer-transaction-prediction", "target"), - ("07_icr-identify-age-related-conditions", "Class"), -] - -DSAGENT_DATASETS = [("concrete-strength", "Strength"), ("smoker-status", "smoking"), ("software-defects", "defects")] - - -def get_split_dataset_path(dataset_name, config): - datasets_dir = config["datasets_dir"] - if dataset_name in config["datasets"]: - dataset = config["datasets"][dataset_name] - data_path = os.path.join(datasets_dir, dataset["dataset"]) - split_datasets = { - "train": os.path.join(data_path, "split_train.csv"), - "dev": os.path.join(data_path, "split_dev.csv"), - "dev_wo_target": os.path.join(data_path, "split_dev_wo_target.csv"), - "dev_target": os.path.join(data_path, "split_dev_target.csv"), - "test": os.path.join(data_path, "split_test.csv"), - "test_wo_target": os.path.join(data_path, "split_test_wo_target.csv"), - "test_target": os.path.join(data_path, "split_test_target.csv"), - } - return split_datasets - else: - raise ValueError( - f"Dataset {dataset_name} not found in config file. Available datasets: {config['datasets'].keys()}" - ) - - -def get_user_requirement(task_name, config): - # datasets_dir = config["datasets_dir"] - if task_name in config["datasets"]: - dataset = config["datasets"][task_name] - # data_path = os.path.join(datasets_dir, dataset["dataset"]) - user_requirement = dataset["user_requirement"] - return user_requirement - else: - raise ValueError( - f"Dataset {task_name} not found in config file. Available datasets: {config['datasets'].keys()}" - ) - - -def save_datasets_dict_to_yaml(datasets_dict, name="datasets.yaml"): - with open(name, "w") as file: - yaml.dump(datasets_dict, file) - - -def create_dataset_dict(dataset): - dataset_dict = { - "dataset": dataset.name, - "user_requirement": dataset.create_base_requirement(), - "metric": dataset.get_metric(), - "target_col": dataset.target_col, - } - return dataset_dict - - -def generate_di_instruction(output_dir, special_instruction): - if special_instruction: - special_instruction_prompt = SPECIAL_INSTRUCTIONS[special_instruction] - else: - special_instruction_prompt = "" - additional_instruction = DI_INSTRUCTION.format( - output_dir=output_dir, special_instruction=special_instruction_prompt - ) - return additional_instruction - - -def generate_task_requirement(task_name, data_config, is_di=True, special_instruction=None): - user_requirement = get_user_requirement(task_name, data_config) - split_dataset_path = get_split_dataset_path(task_name, data_config) - train_path = split_dataset_path["train"] - dev_path = split_dataset_path["dev"] - test_path = split_dataset_path["test_wo_target"] - work_dir = data_config["work_dir"] - output_dir = f"{work_dir}/{task_name}" - datasets_dir = data_config["datasets_dir"] - data_info_path = f"{datasets_dir}/{task_name}/dataset_info.json" - if is_di: - additional_instruction = generate_di_instruction(output_dir, special_instruction) - else: - additional_instruction = "" - user_requirement = TASK_PROMPT.format( - user_requirement=user_requirement, - train_path=train_path, - dev_path=dev_path, - test_path=test_path, - additional_instruction=additional_instruction, - data_info_path=data_info_path, - ) - print(user_requirement) - return user_requirement - - -class ExpDataset: - description: str = None - metadata: dict = None - dataset_dir: str = None - target_col: str = None - name: str = None - - def __init__(self, name, dataset_dir, **kwargs): - self.name = name - self.dataset_dir = dataset_dir - self.target_col = kwargs.get("target_col", None) - self.force_update = kwargs.get("force_update", False) - self.save_dataset(target_col=self.target_col) - - def check_dataset_exists(self): - fnames = [ - "split_train.csv", - "split_dev.csv", - "split_test.csv", - "split_dev_wo_target.csv", - "split_dev_target.csv", - "split_test_wo_target.csv", - "split_test_target.csv", - ] - for fname in fnames: - if not os.path.exists(Path(self.dataset_dir, self.name, fname)): - return False - return True - - def check_datasetinfo_exists(self): - return os.path.exists(Path(self.dataset_dir, self.name, "dataset_info.json")) - - def get_raw_dataset(self): - raw_dir = Path(self.dataset_dir, self.name, "raw") - train_df = None - test_df = None - if not os.path.exists(Path(raw_dir, "train.csv")): - raise FileNotFoundError(f"Raw dataset `train.csv` not found in {raw_dir}") - else: - train_df = pd.read_csv(Path(raw_dir, "train.csv")) - if os.path.exists(Path(raw_dir, "test.csv")): - test_df = pd.read_csv(Path(raw_dir, "test.csv")) - return train_df, test_df - - def get_dataset_info(self): - raw_df = pd.read_csv(Path(self.dataset_dir, self.name, "raw", "train.csv")) - metadata = { - "NumberOfClasses": raw_df[self.target_col].nunique(), - "NumberOfFeatures": raw_df.shape[1], - "NumberOfInstances": raw_df.shape[0], - "NumberOfInstancesWithMissingValues": int(raw_df.isnull().any(axis=1).sum()), - "NumberOfMissingValues": int(raw_df.isnull().sum().sum()), - "NumberOfNumericFeatures": raw_df.select_dtypes(include=["number"]).shape[1], - "NumberOfSymbolicFeatures": raw_df.select_dtypes(include=["object"]).shape[1], - } - - df_head_text = self.get_df_head(raw_df) - - dataset_info = { - "name": self.name, - "description": "", - "target_col": self.target_col, - "metadata": metadata, - "df_head": df_head_text, - } - return dataset_info - - def get_df_head(self, raw_df): - return raw_df.head().to_string(index=False) - - def get_metric(self): - dataset_info = self.get_dataset_info() - num_classes = dataset_info["metadata"]["NumberOfClasses"] - if num_classes == 2: - metric = "f1 binary" - elif 2 < num_classes <= 200: - metric = "f1 weighted" - elif num_classes > 200 or num_classes == 0: - metric = "rmse" - else: - raise ValueError(f"Number of classes {num_classes} not supported") - return metric - - def create_base_requirement(self): - metric = self.get_metric() - req = BASE_USER_REQUIREMENT.format(datasetname=self.name, target_col=self.target_col, metric=metric) - return req - - def save_dataset(self, target_col): - df, test_df = self.get_raw_dataset() - if not self.check_dataset_exists() or self.force_update: - print(f"Saving Dataset {self.name} in {self.dataset_dir}") - self.split_and_save(df, target_col, test_df=test_df) - else: - print(f"Dataset {self.name} already exists") - if not self.check_datasetinfo_exists() or self.force_update: - print(f"Saving Dataset info for {self.name}") - dataset_info = self.get_dataset_info() - self.save_datasetinfo(dataset_info) - else: - print(f"Dataset info for {self.name} already exists") - - def save_datasetinfo(self, dataset_info): - with open(Path(self.dataset_dir, self.name, "dataset_info.json"), "w", encoding="utf-8") as file: - # utf-8 encoding is required - json.dump(dataset_info, file, indent=4, ensure_ascii=False) - - def save_split_datasets(self, df, split, target_col=None): - path = Path(self.dataset_dir, self.name) - df.to_csv(Path(path, f"split_{split}.csv"), index=False) - if target_col: - df_wo_target = df.drop(columns=[target_col]) - df_wo_target.to_csv(Path(path, f"split_{split}_wo_target.csv"), index=False) - df_target = df[[target_col]].copy() - if target_col != "target": - df_target["target"] = df_target[target_col] - df_target = df_target.drop(columns=[target_col]) - df_target.to_csv(Path(path, f"split_{split}_target.csv"), index=False) - - def split_and_save(self, df, target_col, test_df=None): - if not target_col: - raise ValueError("Target column not provided") - if test_df is None: - train, test = train_test_split(df, test_size=1 - TRAIN_TEST_SPLIT, random_state=SEED) - else: - train = df - test = test_df - train, dev = train_test_split(train, test_size=1 - TRAIN_DEV_SPLIT, random_state=SEED) - self.save_split_datasets(train, "train") - self.save_split_datasets(dev, "dev", target_col) - self.save_split_datasets(test, "test", target_col) - - -class OpenMLExpDataset(ExpDataset): - def __init__(self, name, dataset_dir, dataset_id, **kwargs): - self.dataset_id = dataset_id - self.dataset = openml.datasets.get_dataset( - self.dataset_id, download_data=False, download_qualities=False, download_features_meta_data=True - ) - self.name = self.dataset.name - self.target_col = self.dataset.default_target_attribute - super().__init__(self.name, dataset_dir, target_col=self.target_col, **kwargs) - - def get_raw_dataset(self): - dataset = self.dataset - dataset_df, *_ = dataset.get_data() - raw_dir = Path(self.dataset_dir, self.name, "raw") - os.makedirs(raw_dir, exist_ok=True) - dataset_df.to_csv(Path(raw_dir, "train.csv"), index=False) - return dataset_df, None - - def get_dataset_info(self): - dataset_info = super().get_dataset_info() - dataset = self.dataset - dataset_info["name"] = dataset.name - dataset_info["description"] = dataset.description - dataset_info["metadata"].update(dataset.qualities) - return dataset_info - - -async def process_dataset(dataset, solution_designer: SolutionDesigner, save_analysis_pool, datasets_dict): - if save_analysis_pool: - await solution_designer.generate_solutions(dataset.get_dataset_info(), dataset.name) - dataset_dict = create_dataset_dict(dataset) - datasets_dict["datasets"][dataset.name] = dataset_dict - - -def parse_args(): - parser = argparse.ArgumentParser() - parser.add_argument("--force_update", action="store_true", help="Force update datasets") - parser.add_argument("--save_analysis_pool", action="store_true", help="Save analysis pool") - parser.add_argument( - "--no_save_analysis_pool", dest="save_analysis_pool", action="store_false", help="Do not save analysis pool" - ) - parser.set_defaults(save_analysis_pool=True) - return parser.parse_args() - - -if __name__ == "__main__": - datasets_dir = DATA_CONFIG["datasets_dir"] - args = parse_args() - force_update = args.force_update - save_analysis_pool = args.save_analysis_pool - datasets_dict = {"datasets": {}} - solution_designer = SolutionDesigner() - for dataset_id in OPENML_DATASET_IDS: - openml_dataset = OpenMLExpDataset("", datasets_dir, dataset_id, force_update=force_update) - asyncio.run(process_dataset(openml_dataset, solution_designer, save_analysis_pool, datasets_dict)) - - for dataset_name, target_col in CUSTOM_DATASETS: - custom_dataset = ExpDataset(dataset_name, datasets_dir, target_col=target_col, force_update=force_update) - asyncio.run(process_dataset(custom_dataset, solution_designer, save_analysis_pool, datasets_dict)) - - for dataset_name, target_col in DSAGENT_DATASETS: - custom_dataset = ExpDataset(dataset_name, datasets_dir, target_col=target_col, force_update=force_update) - asyncio.run(process_dataset(custom_dataset, solution_designer, save_analysis_pool, datasets_dict)) - - save_datasets_dict_to_yaml(datasets_dict) diff --git a/metagpt/ext/sela/data/hf_data.py b/metagpt/ext/sela/data/hf_data.py deleted file mode 100644 index 9645796af5..0000000000 --- a/metagpt/ext/sela/data/hf_data.py +++ /dev/null @@ -1,140 +0,0 @@ -import asyncio -import io -import os -from pathlib import Path - -import pandas as pd -from datasets import load_dataset -from PIL import Image - -from metagpt.ext.sela.data.dataset import ( - ExpDataset, - parse_args, - process_dataset, - save_datasets_dict_to_yaml, -) -from metagpt.ext.sela.insights.solution_designer import SolutionDesigner -from metagpt.ext.sela.utils import DATA_CONFIG - -HFDATSETS = [ - {"name": "sms_spam", "dataset_name": "ucirvine/sms_spam", "target_col": "label", "modality": "text"}, - {"name": "banking77", "dataset_name": "PolyAI/banking77", "target_col": "label", "modality": "text"}, - {"name": "gnad10", "dataset_name": "community-datasets/gnad10", "target_col": "label", "modality": "text"}, - { - "name": "oxford-iiit-pet", - "dataset_name": "timm/oxford-iiit-pet", - "image_col": "image", - "target_col": "label", - "modality": "image", - }, - { - "name": "stanford_cars", - "dataset_name": "tanganke/stanford_cars", - "image_col": "image", - "target_col": "label", - "modality": "image", - }, - { - "name": "fashion_mnist", - "dataset_name": "zalando-datasets/fashion_mnist", - "image_col": "image", - "target_col": "label", - "modality": "image", - }, -] - - -class HFExpDataset(ExpDataset): - train_ratio = 0.6 - dev_ratio = 0.2 - test_ratio = 0.2 - - def __init__(self, name, dataset_dir, dataset_name, **kwargs): - self.name = name - self.dataset_dir = dataset_dir - self.dataset_name = dataset_name - self.modality = kwargs.get("modality", "") - self.target_col = kwargs.get("target_col", "label") - self.image_col = kwargs.get("image_col", "image") - self.dataset = load_dataset(self.dataset_name, trust_remote_code=True) - super().__init__(self.name, dataset_dir, **kwargs) - - def get_raw_dataset(self): - raw_dir = Path(self.dataset_dir, self.name, "raw") - raw_dir.mkdir(parents=True, exist_ok=True) - - if os.path.exists(Path(raw_dir, "train.csv")): - df = pd.read_csv(Path(raw_dir, "train.csv"), encoding="utf-8") - else: - df = self.dataset["train"].to_pandas() - - if self.modality == "image": - df = self.save_images_and_update_df(df, raw_dir, "train") - - df.to_csv(Path(raw_dir, "train.csv"), index=False, encoding="utf-8") - - if os.path.exists(Path(raw_dir, "test.csv")): - test_df = pd.read_csv(Path(raw_dir, "test.csv"), encoding="utf-8") - else: - if self.dataset and "test" in self.dataset: - test_df = self.dataset["test"].to_pandas() - - if self.modality == "image": - test_df = self.save_images_and_update_df(test_df, raw_dir, "test") - - test_df.to_csv(Path(raw_dir, "test.csv"), index=False, encoding="utf-8") - else: - test_df = None - - return df, test_df - - def save_images_and_update_df(self, df, raw_dir, split): - abs_image_dir = Path(raw_dir, f"{split}_images") - rel_image_dir = f"raw/{split}_images" - abs_image_dir.mkdir(parents=True, exist_ok=True) - - def process_image(idx, row): - image_bytes = row[self.image_col]["bytes"] - image = Image.open(io.BytesIO(image_bytes)) - if image.mode == "RGBA": - image = image.convert("RGB") - img_path = Path(abs_image_dir, f"{idx}.jpg") - rel_img_path = f"{rel_image_dir}/{idx}.jpg" - image.save(img_path) - return rel_img_path - - df["image"] = df.apply(lambda row: process_image(row.name, row), axis=1) - return df - - def get_df_head(self, raw_df): - examples = [] - for i in range(5): - examples.append(raw_df.iloc[i].to_dict()) - return examples - - def get_dataset_info(self): - dataset_info = super().get_dataset_info() - dataset = self.dataset - dataset_info["description"] = dataset["train"].info.description - return dataset_info - - -if __name__ == "__main__": - dataset_dir = DATA_CONFIG["datasets_dir"] - args = parse_args() - force_update = args.force_update - save_analysis_pool = args.save_analysis_pool - datasets_dict = {"datasets": {}} - solution_designer = SolutionDesigner() - for dataset_meta in HFDATSETS: - hf_dataset = HFExpDataset( - dataset_meta["name"], - dataset_dir, - dataset_meta["dataset_name"], - target_col=dataset_meta["target_col"], - image_col=dataset_meta.get("image_col", ""), - force_update=force_update, - modality=dataset_meta["modality"], - ) - asyncio.run(process_dataset(hf_dataset, solution_designer, save_analysis_pool, datasets_dict)) - save_datasets_dict_to_yaml(datasets_dict, "hf_datasets.yaml") diff --git a/metagpt/ext/sela/datasets.yaml b/metagpt/ext/sela/datasets.yaml deleted file mode 100644 index 2d02951d4d..0000000000 --- a/metagpt/ext/sela/datasets.yaml +++ /dev/null @@ -1,225 +0,0 @@ -datasets: - titanic: - dataset: 04_titanic - metric: f1 - target_col: Survived - user_requirement: "This is a 04_titanic dataset. Your goal is to predict the target\ - \ column `Survived`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport f1 on the eval data. Do not plot\ - \ or make any visualizations.\n" - house-prices: - dataset: 05_house-prices-advanced-regression-techniques - metric: rmse - target_col: SalePrice - user_requirement: "This is a 05_house-prices-advanced-regression-techniques dataset.\ - \ Your goal is to predict the target column `SalePrice`.\nPerform data analysis,\ - \ data preprocessing, feature engineering, and modeling to predict the target.\ - \ \nReport rmse on the eval data. Do not plot or make any visualizations.\n" - santander-customer: - dataset: 06_santander-customer-transaction-prediction - metric: f1 - target_col: target - user_requirement: "This is a 06_santander-customer-transaction-prediction dataset.\ - \ Your goal is to predict the target column `target`.\nPerform data analysis,\ - \ data preprocessing, feature engineering, and modeling to predict the target.\ - \ \nReport f1 on the eval data. Do not plot or make any visualizations.\n" - icr: - dataset: 07_icr-identify-age-related-conditions - metric: f1 - target_col: Class - user_requirement: "This is a 07_icr-identify-age-related-conditions dataset. Your\ - \ goal is to predict the target column `Class`.\nPerform data analysis, data\ - \ preprocessing, feature engineering, and modeling to predict the target. \n\ - Report f1 on the eval data. Do not plot or make any visualizations.\n" - Click_prediction_small: - dataset: Click_prediction_small - metric: f1 - target_col: click - user_requirement: "This is a Click_prediction_small dataset. Your goal is to predict\ - \ the target column `click`.\nPerform data analysis, data preprocessing, feature\ - \ engineering, and modeling to predict the target. \nReport f1 on the eval data.\ - \ Do not plot or make any visualizations.\n" - GesturePhaseSegmentationProcessed: - dataset: GesturePhaseSegmentationProcessed - metric: f1 weighted - target_col: Phase - user_requirement: "This is a GesturePhaseSegmentationProcessed dataset. Your goal\ - \ is to predict the target column `Phase`.\nPerform data analysis, data preprocessing,\ - \ feature engineering, and modeling to predict the target. \nReport f1 weighted\ - \ on the eval data. Do not plot or make any visualizations.\n" - Moneyball: - dataset: Moneyball - metric: rmse - target_col: RS - user_requirement: "This is a Moneyball dataset. Your goal is to predict the target\ - \ column `RS`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport rmse on the eval data. Do not\ - \ plot or make any visualizations.\n" - SAT11-HAND-runtime-regression: - dataset: SAT11-HAND-runtime-regression - metric: rmse - target_col: runtime - user_requirement: "This is a SAT11-HAND-runtime-regression dataset. Your goal\ - \ is to predict the target column `runtime`.\nPerform data analysis, data preprocessing,\ - \ feature engineering, and modeling to predict the target. \nReport rmse on\ - \ the eval data. Do not plot or make any visualizations.\n" - boston: - dataset: boston - metric: rmse - target_col: MEDV - user_requirement: "This is a boston dataset. Your goal is to predict the target\ - \ column `MEDV`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport rmse on the eval data. Do not\ - \ plot or make any visualizations.\n" - colleges: - dataset: colleges - metric: rmse - target_col: percent_pell_grant - user_requirement: "This is a colleges dataset. Your goal is to predict the target\ - \ column `percent_pell_grant`.\nPerform data analysis, data preprocessing, feature\ - \ engineering, and modeling to predict the target. \nReport rmse on the eval\ - \ data. Do not plot or make any visualizations.\n" - concrete-strength: - dataset: concrete-strength - metric: rmse - target_col: Strength - user_requirement: "This is a concrete-strength dataset. Your goal is to predict\ - \ the target column `Strength`.\nPerform data analysis, data preprocessing,\ - \ feature engineering, and modeling to predict the target. \nReport rmse on\ - \ the eval data. Do not plot or make any visualizations.\n" - credit-g: - dataset: credit-g - metric: f1 - target_col: class - user_requirement: "This is a credit-g dataset. Your goal is to predict the target\ - \ column `class`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport f1 on the eval data. Do not plot\ - \ or make any visualizations.\n" - diamonds: - dataset: diamonds - metric: rmse - target_col: price - user_requirement: "This is a diamonds dataset. Your goal is to predict the target\ - \ column `price`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport rmse on the eval data. Do not\ - \ plot or make any visualizations.\n" - jasmine: - dataset: jasmine - metric: f1 - target_col: class - user_requirement: "This is a jasmine dataset. Your goal is to predict the target\ - \ column `class`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport f1 on the eval data. Do not plot\ - \ or make any visualizations.\n" - kc1: - dataset: kc1 - metric: f1 - target_col: defects - user_requirement: "This is a kc1 dataset. Your goal is to predict the target column\ - \ `defects`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport f1 on the eval data. Do not plot\ - \ or make any visualizations.\n" - kick: - dataset: kick - metric: f1 - target_col: IsBadBuy - user_requirement: "This is a kick dataset. Your goal is to predict the target\ - \ column `IsBadBuy`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport f1 on the eval data. Do not plot\ - \ or make any visualizations.\n" - mfeat-factors: - dataset: mfeat-factors - metric: f1 weighted - target_col: class - user_requirement: "This is a mfeat-factors dataset. Your goal is to predict the\ - \ target column `class`.\nPerform data analysis, data preprocessing, feature\ - \ engineering, and modeling to predict the target. \nReport f1 weighted on the\ - \ eval data. Do not plot or make any visualizations.\n" - segment: - dataset: segment - metric: f1 weighted - target_col: class - user_requirement: "This is a segment dataset. Your goal is to predict the target\ - \ column `class`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport f1 weighted on the eval data.\ - \ Do not plot or make any visualizations.\n" - smoker-status: - dataset: smoker-status - metric: f1 - target_col: smoking - user_requirement: "This is a smoker-status dataset. Your goal is to predict the\ - \ target column `smoking`.\nPerform data analysis, data preprocessing, feature\ - \ engineering, and modeling to predict the target. \nReport f1 on the eval data.\ - \ Do not plot or make any visualizations.\n" - software-defects: - dataset: software-defects - metric: f1 - target_col: defects - user_requirement: "This is a software-defects dataset. Your goal is to predict\ - \ the target column `defects`.\nPerform data analysis, data preprocessing, feature\ - \ engineering, and modeling to predict the target. \nReport f1 on the eval data.\ - \ Do not plot or make any visualizations.\n" - steel-plates-fault: - dataset: steel-plates-fault - metric: f1 weighted - target_col: target - user_requirement: "This is a steel-plates-fault dataset. Your goal is to predict\ - \ the target column `target`.\nPerform data analysis, data preprocessing, feature\ - \ engineering, and modeling to predict the target. \nReport f1 weighted on the\ - \ eval data. Do not plot or make any visualizations.\n" - wine-quality-white: - dataset: wine-quality-white - metric: f1 weighted - target_col: Class - user_requirement: "This is a wine-quality-white dataset. Your goal is to predict\ - \ the target column `Class`.\nPerform data analysis, data preprocessing, feature\ - \ engineering, and modeling to predict the target. \nReport f1 weighted on the\ - \ eval data. Do not plot or make any visualizations.\n" - banking77: - dataset: banking77 - metric: f1 weighted - target_col: label - user_requirement: "This is a banking77 dataset. Your goal is to predict the target\ - \ column `label`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport f1 weighted on the eval data.\ - \ Do not plot or make any visualizations.\n" - fashion_mnist: - dataset: fashion_mnist - metric: f1 weighted - target_col: label - user_requirement: "This is a fashion_mnist dataset. Your goal is to predict the\ - \ target column `label`.\nPerform data analysis, data preprocessing, feature\ - \ engineering, and modeling to predict the target. \nReport f1 weighted on the\ - \ eval data. Do not plot or make any visualizations.\n" - gnad10: - dataset: gnad10 - metric: f1 weighted - target_col: label - user_requirement: "This is a gnad10 dataset. Your goal is to predict the target\ - \ column `label`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport f1 weighted on the eval data.\ - \ Do not plot or make any visualizations.\n" - oxford-iiit-pet: - dataset: oxford-iiit-pet - metric: f1 weighted - target_col: label - user_requirement: "This is a oxford-iiit-pet dataset. Your goal is to predict\ - \ the target column `label`.\nPerform data analysis, data preprocessing,\ - \ feature engineering, and modeling to predict the target. \nReport f1 weighted on the\ - \ eval data. Do not plot or make any visualizations.\n" - sms_spam: - dataset: sms_spam - metric: f1 - target_col: label - user_requirement: "This is a sms_spam dataset. Your goal is to predict the target\ - \ column `label`.\nPerform data analysis, data preprocessing, feature engineering,\ - \ and modeling to predict the target. \nReport f1 on the eval data. Do not plot\ - \ or make any visualizations.\n" - stanford_cars: - dataset: stanford_cars - metric: f1 weighted - target_col: label - user_requirement: "This is a stanford_cars dataset. Your goal is to predict the\ - \ target column `label`.\nPerform data analysis, data preprocessing, feature\ - \ engineering, and modeling to predict the target. \nReport f1 weighted on the\ - \ eval data. Do not plot or make any visualizations.\n" diff --git a/metagpt/ext/sela/evaluation/evaluation.py b/metagpt/ext/sela/evaluation/evaluation.py deleted file mode 100644 index 1e58e1725b..0000000000 --- a/metagpt/ext/sela/evaluation/evaluation.py +++ /dev/null @@ -1,49 +0,0 @@ -from pathlib import Path - -import numpy as np -from sklearn.metrics import accuracy_score, f1_score, mean_squared_error, roc_auc_score - - -def evaluate_score(pred, gt, metric): - if metric == "accuracy": - return accuracy_score(gt, pred) - elif metric == "f1": - unique_classes = sorted(list(np.unique(gt))) - if 1 in unique_classes and 0 in unique_classes: - pos_label = 1 - else: - pos_label = unique_classes[0] if len(unique_classes) == 2 else None - return f1_score(gt, pred, pos_label=pos_label) - elif metric == "f1 weighted": - return f1_score(gt, pred, average="weighted") - elif metric == "roc_auc": - return roc_auc_score(gt, pred) - elif metric == "rmse": - return mean_squared_error(gt, pred, squared=False) - elif metric == "log rmse": - return mean_squared_error(np.log1p(gt), np.log1p(pred), squared=False) - else: - raise ValueError(f"Metric {metric} not supported") - - -def node_evaluate_score_sela(node): - preds = node.get_and_move_predictions("test")["target"] - gt = node.get_gt("test")["target"] - metric = node.state["dataset_config"]["metric"] - return evaluate_score(preds, gt, metric) - - -def node_evaluate_score_mlebench(node): - # TODO - from mlebench.grade import grade_csv - from mlebench.registry import registry - - competition_id = node.state["task"] - data_dir = Path(node.state["custom_dataset_dir"]).parent.parent.parent # prepared/public/../../../ - pred_path = node.get_predictions_path("test") - new_registry = registry.set_data_dir(data_dir) - competition = new_registry.get_competition(competition_id) - submission = Path(pred_path) - report = grade_csv(submission, competition).to_dict() - report["submission_path"] = str(submission) - return report diff --git a/metagpt/ext/sela/evaluation/visualize_mcts.py b/metagpt/ext/sela/evaluation/visualize_mcts.py deleted file mode 100644 index 6f803a91cb..0000000000 --- a/metagpt/ext/sela/evaluation/visualize_mcts.py +++ /dev/null @@ -1,163 +0,0 @@ -import textwrap - -import matplotlib.pyplot as plt -import networkx as nx - -from metagpt.ext.sela.search.tree_search import Node - -NODE_TEMPLATE = """\ -[Node {id}] -Plans: -{plans} -Simulated: {simulated} -Score: {score}, Visits: {num_visits} - -""" - -NODE_SIZE = 12000 -NODE_FONT_SIZE = 18 - - -def get_role_plans(role): - plans = role.planner.plan.tasks - instruct_plans = [f"{i+1}. {task.instruction}" for i, task in enumerate(plans)] - return instruct_plans - - -def get_tree_text(node: Node): - role_dict = {} - code_set = set() - - def load_role(node): - if node.id not in role_dict: - role_dict[node.id] = node.load_role() - return role_dict[node.id] - - def visualize_node(node: Node, previous_plans=None): - role = load_role(node) - node_id = node.id - plans = role.planner.plan.tasks - instruct_plans = [f"{i+1}. {task.instruction}" for i, task in enumerate(plans)] - if previous_plans is not None: - instruct_plans = [plan for plan, prev_plan in zip(instruct_plans, previous_plans) if plan != prev_plan] - instruct_plans_text = "\n".join(instruct_plans) - simulated = role.state_saved - score = f"avg score: {node.avg_value()}, simulated score: {node.raw_reward}" - num_visits = node.visited - return NODE_TEMPLATE.format( - id=node_id, plans=instruct_plans_text, simulated=simulated, score=score, num_visits=num_visits - ) - - def visualize_tree_text(node, depth=0, previous_plans=None): - text = "" - if node is not None: - text += visualize_node(node, previous_plans) - role = load_role(node) - code_set.update({task.instruction for task in role.planner.plan.tasks}) - previous_plans = get_role_plans(role) - for child in node.children: - text += textwrap.indent(visualize_tree_text(child, depth + 1, previous_plans), "\t") - return text - - num_simulations = node.visited - text = f"Number of simulations: {num_simulations}\n" - text += visualize_tree_text(node) - return text, len(code_set) - - -def get_node_color(node): - if node["visits"] == 0: - return "#D3D3D3" - else: - # The higher the avg_value, the more intense the color - # avg_value is between 0 and 1 - avg_value = node["avg_value"] - # Convert avg_value to a color ranging from red (low) to green (high) - red = int(255 * (1 - avg_value)) - green = int(255 * avg_value) - return f"#{red:02X}{green:02X}00" - - -def visualize_tree(graph, show_instructions=False, save_path=""): - # Use a hierarchical layout for tree-like visualization - pos = nx.spring_layout(graph, k=0.9, iterations=50) - - plt.figure(figsize=(30, 20)) # Further increase figure size for better visibility - - # Calculate node levels - root = "0" - levels = nx.single_source_shortest_path_length(graph, root) - max_level = max(levels.values()) - - # Adjust y-coordinates based on levels and x-coordinates to prevent overlap - nodes_by_level = {} - for node, level in levels.items(): - if level not in nodes_by_level: - nodes_by_level[level] = [] - nodes_by_level[level].append(node) - - for level, nodes in nodes_by_level.items(): - y = 1 - level / max_level - x_step = 1.0 / (len(nodes) + 1) - for i, node in enumerate(sorted(nodes)): - pos[node] = ((i + 1) * x_step, y) - - # Draw edges - nx.draw_networkx_edges(graph, pos, edge_color="gray", arrows=True, arrowsize=40, width=3) - - # Draw nodes - node_colors = [get_node_color(graph.nodes[node]) for node in graph.nodes] - nx.draw_networkx_nodes(graph, pos, node_size=NODE_SIZE, node_color=node_colors) - - # Add labels to nodes - labels = nx.get_node_attributes(graph, "label") - nx.draw_networkx_labels(graph, pos, labels, font_size=NODE_FONT_SIZE) - - if show_instructions: - # Add instructions to the right side of nodes - instructions = nx.get_node_attributes(graph, "instruction") - for node, (x, y) in pos.items(): - wrapped_text = textwrap.fill(instructions[node], width=30) # Adjust width as needed - plt.text(x + 0.05, y, wrapped_text, fontsize=15, ha="left", va="center") - - plt.title("MCTS Tree Visualization", fontsize=40) - plt.axis("off") # Turn off axis - plt.tight_layout() - if save_path: - plt.savefig(save_path) - plt.show() - - -def build_tree_recursive(graph, parent_id, node, node_order, start_task_id=2): - """ - Recursively builds the entire tree starting from the root node. - Adds nodes and edges to the NetworkX graph. - """ - role = node.load_role() - depth = node.get_depth() - if depth == 0: - instruction = "\n\n".join([role.planner.plan.tasks[i].instruction for i in range(start_task_id)]) - else: - instruction = role.planner.plan.tasks[depth + start_task_id - 1].instruction - print(instruction) - # Add the current node with attributes to the graph - dev_score = node.raw_reward.get("dev_score", 0) * 100 - avg_score = node.avg_value() * 100 - order = node_order.index(node.id) if node.id in node_order else "" - graph.add_node( - parent_id, - label=f"{node.id}\nAvg: {avg_score:.1f}\nScore: {dev_score:.1f}\nVisits: {node.visited}\nOrder: {order}", - avg_value=node.avg_value(), - dev_score=dev_score, - visits=node.visited, - instruction=instruction, - ) - # Stopping condition: if the node has no children, return - if not node.children: - return - - # Recursively create all child nodes - for i, child in enumerate(node.children): - child_id = f"{parent_id}-{i}" - graph.add_edge(parent_id, child_id) - build_tree_recursive(graph, child_id, child, node_order) diff --git a/metagpt/ext/sela/experimenter.py b/metagpt/ext/sela/experimenter.py deleted file mode 100644 index b05ea2fc36..0000000000 --- a/metagpt/ext/sela/experimenter.py +++ /dev/null @@ -1,195 +0,0 @@ -from __future__ import annotations - -import asyncio -import json -import os - -from pydantic import model_validator - -from metagpt.actions.di.write_analysis_code import WriteAnalysisCode -from metagpt.const import SERDESER_PATH -from metagpt.ext.sela.utils import mcts_logger, save_notebook -from metagpt.roles.di.data_interpreter import DataInterpreter -from metagpt.schema import Message, Task, TaskResult -from metagpt.utils.common import CodeParser, write_json_file - -CODE_BLOCK_RESULT = """ -## Code: -{code} - -## Execution Result: -{result} -""" - -EXTRACT_SCORE_PROMPT = """ -# Code Blocks -{code_block} -# Instruction: -Based on the code and execution result, please extract the **final scores** and return it as a dictionary. -If you cannot find the scores, please still return a dictionary with the keys 'train_score', 'dev_score', and 'test_score', and set the values to -1. - -# Format: -```json -{{ - "train_score": x.x, - "dev_score": x.x, - "test_score": x.x -}} -``` -""" - - -class TimeoutException(Exception): - pass - - -def async_timeout(): - def decorator(func): - async def wrapper(self, *args, **kwargs): - try: - result = await asyncio.wait_for(func(self, *args, **kwargs), timeout=self.role_timeout) - except asyncio.TimeoutError: - text = f"Function timed out after {self.role_timeout} seconds" - mcts_logger.error(text) - self.save_state() - raise TimeoutException(text) - return result - - return wrapper - - return decorator - - -class Experimenter(DataInterpreter): - node_id: str = "0" - start_task_id: int = 1 - state_saved: bool = False - role_dir: str = SERDESER_PATH.joinpath("team", "environment", "roles", "Experimenter") - role_timeout: int = 1000 - - def get_node_name(self): - return f"Node-{self.node_id}" - - def get_next_instruction(self): - return self.planner.plan.tasks[self.start_task_id].instruction - - def change_next_instruction(self, new_instruction): - if new_instruction is not None: - self.planner.plan.task_map[str(self.start_task_id)].instruction = new_instruction - self.remap_tasks() - - def update_til_start_task(self, role: Experimenter, backward: bool = True): - if backward: - # make sure the previous task instructions are matched - assert ( - self.start_task_id == role.start_task_id - 1 - ), f"start_task_id: {self.start_task_id}, role.start_task_id: {role.start_task_id}" - for i in range(self.start_task_id): - if ( - self.planner.plan.task_map[str(self.start_task_id)].instruction - != role.planner.plan.task_map[str(self.start_task_id)].instruction - ): - mcts_logger.info("Previous task instructions not matched") - self.remap_tasks() - return - # copy new role's task (self.start_task_id) to current role - self.planner.plan.task_map[str(self.start_task_id)] = role.planner.plan.task_map[ - str(self.start_task_id) - ].model_copy() - self.remap_tasks() - - else: - assert ( - self.start_task_id == role.start_task_id + 1 - ), f"start_task_id: {self.start_task_id}, role.start_task_id: {role.start_task_id}" - if int(role.planner.plan.current_task_id) > self.start_task_id: - for i in range(role.start_task_id): - self.planner.plan.task_map[str(i)] = role.planner.plan.task_map[str(i)].model_copy() - self.remap_tasks() - - async def get_score(self): - score_dict = await self.llm_extract_score() - score_dict["score"] = score_dict["dev_score"] - return score_dict - - async def llm_extract_score(self): - # result_text = self.planner.plan.task_map[str(len(self.planner.plan.task_map))].result - # code_text = self.planner.plan.task_map[str(len(self.planner.plan.task_map))].code - num_tasks = len(self.planner.plan.task_map) - task_map = self.planner.plan.task_map - code_block = "\n".join( - [ - CODE_BLOCK_RESULT.format(code=task_map[str(i + 1)].code, result=task_map[str(i + 1)].result) - for i in range(num_tasks) - ] - ) - rsp = await self.llm.aask(EXTRACT_SCORE_PROMPT.format(code_block=code_block, role="user")) - json_block = CodeParser.parse_code(block=None, text=rsp) - score_dict = json.loads(json_block) - return score_dict - - @model_validator(mode="after") - def set_plan_and_tool(self) -> "Interpreter": - if self.planner.plan.goal != "": - self.set_actions([WriteAnalysisCode]) - self._set_state(0) - print("Plan already exists, skipping initialization.") - return self - print("Initializing plan and tool...") - return super().set_plan_and_tool() - - async def _act_on_task(self, current_task: Task) -> TaskResult: - """Useful in 'plan_and_act' mode. Wrap the output in a TaskResult for review and confirmation.""" - mcts_logger.info(f"The current_task is: {current_task}") - code, result, is_success = await self._write_and_exec_code() - task_result = TaskResult(code=code, result=result, is_success=is_success) - if int(current_task.task_id) == self.start_task_id + 1: - # fe_id = current_task.dependent_task_ids - self.save_state() - save_notebook(role=self, save_dir=self.role_dir, name=self.get_node_name(), save_to_depth=True) - else: - save_notebook(role=self, save_dir=self.role_dir, name=self.get_node_name()) - return task_result - - def get_solution(self): - codes = [task.code for task in self.planner.plan.tasks] - results = [task.result for task in self.planner.plan.tasks] - return {"codes": codes, "results": results} - - def save_state(self, static_save=False): - """ - attribute: - state_saved - the state has been saved - input: - static_save - saving the state without changing the state_saved flag - used when a new role is created - """ - if self.state_saved and not static_save: - return - if not static_save: - self.state_saved = True - mcts_logger.log("MCTS", f"Saving state at task {self.start_task_id}") - else: - mcts_logger.log("MCTS", "Static Saving") - stg_path = self.role_dir - name = self.get_node_name() - role_path = os.path.join(stg_path, f"{name}.json") - # save state as json file - write_json_file(role_path, self.model_dump()) - - def remap_tasks(self): - self.planner.plan.tasks = [ - self.planner.plan.task_map[task_id] for task_id in sorted(self.planner.plan.task_map.keys()) - ] - - @async_timeout() - async def run(self, with_message=None) -> Message | None: - """Observe, and think and act based on the results of the observation""" - if with_message == "continue": - mcts_logger.info("Continue to run") - self.rc.working_memory.clear() - self.working_memory.clear() - rsp = await self.react() - self.set_todo(None) - self.publish_message(rsp) - return rsp - return await super().run(with_message) diff --git a/metagpt/ext/sela/insights/fixed_insights.json b/metagpt/ext/sela/insights/fixed_insights.json deleted file mode 100644 index 4f42b9db16..0000000000 --- a/metagpt/ext/sela/insights/fixed_insights.json +++ /dev/null @@ -1,22 +0,0 @@ -[ -{ - "Analysis": "Use early stopping, hyperparameter tuning, and cross-validation to avoid overfitting and improve robustness of the model.", - "Category": "Model Training", - "task_id": 4 -}, -{ - "Analysis": "use k-fold bagging and early stopping", - "Category": "Model Training", - "task_id": 4 -}, -{ - "Analysis": "To avoid overfitting, train a weighted ensemble model such as StackingClassifier or StackingRegressor; You could do some quick model prototyping to see which models work best and then use them in the ensemble.", - "Category": "Model Training", - "task_id": 4 -}, -{ - "Analysis": "Please use autogluon for model training with presets='medium_quality', time_limit=None, give dev dataset to tuning_data, and use right eval_metric.", - "Category": "Model Training", - "task_id": 4 -} -] \ No newline at end of file diff --git a/metagpt/ext/sela/insights/instruction_generator.py b/metagpt/ext/sela/insights/instruction_generator.py deleted file mode 100644 index d5d24c74de..0000000000 --- a/metagpt/ext/sela/insights/instruction_generator.py +++ /dev/null @@ -1,169 +0,0 @@ -import json -import os -import random -from difflib import SequenceMatcher - -from metagpt.ext.sela.insights.solution_designer import SolutionDesigner -from metagpt.ext.sela.utils import clean_json_from_rsp, load_data_config, mcts_logger -from metagpt.llm import LLM -from metagpt.schema import Message - -REFLECTION_SYSTEM_MSG = "As a Kaggle Grandmaster competing in a challenge, your task is to suggest potential evolutionary improvements that could enhance the performance of the baseline code." - -CHANGE_INSTRUCTION = """ -# Original instruction -{instruction} - -# Insights -{insights} - -Rewrite the original instruction according to the insights -(If the original instruction involves splitting the data, ensure that your insights are integrated with the data split instructions, -rather than replacing them.) - -# Expected Output Hard Format -```json -{{ - "Original Instruction": "original instruction", - "New Instruction": "new instruction" -}} -``` -""" - -DATA_CONFIG = load_data_config() - - -class InstructionGenerator: - data_config = DATA_CONFIG - - def __init__(self, state, use_fixed_insights, from_scratch): - self.state = state - self.file_path = state["exp_pool_path"] - if state["custom_dataset_dir"]: - with open(f"{state['custom_dataset_dir']}/description.md", "r", encoding="utf-8") as file: - self.dataset_info = file.read() - else: - dataset_info_path = ( - f"{self.data_config['datasets_dir']}/{state['dataset_config']['dataset']}/dataset_info.json" - ) - with open(dataset_info_path, "r") as file: - self.dataset_info = json.load(file) - self.use_fixed_insights = use_fixed_insights - self.proposer = SolutionDesigner() - if self.file_path is None: - self.from_scratch = True - else: - self.from_scratch = from_scratch - - async def initialize(self): - if self.from_scratch: - self.insight_pool = await self.generate_solutions_from_scratch(self.dataset_info, self.state["task"]) - else: - self.insight_pool = self.load_insight_pool(self.file_path, self.use_fixed_insights) - - @staticmethod - def load_json_data(json_dir): - with open(json_dir, "r") as file: - json_data = json.load(file) - return json_data - - @staticmethod - def _random_sample(analysis, num_samples): - return random.sample(analysis, num_samples) - - @staticmethod - def sample_instruction_set(data): - data_dict = {} - for item in data: - task_id = item["task_id"] - if task_id not in data_dict: - data_dict[task_id] = [] - data_dict[task_id].append(item) - instruction_set = [] - for task_id in sorted(data_dict.keys()): - instruction_set.append(random.choice(data_dict[task_id])) - return instruction_set - - @staticmethod - def format_output(rsp): - rsp_list = [] - new_data = [] - rsp_list.append(rsp) - for item in rsp_list: - item_dict = json.loads(item) - data = { - "Insights": item_dict, - } - new_data.append(data) - return new_data - - @staticmethod - def load_insight_pool(file_path, use_fixed_insights, task_id=None): - data = InstructionGenerator.load_json_data(file_path) - if use_fixed_insights: - current_directory = os.path.dirname(__file__) - fixed_insights = InstructionGenerator.load_json_data(f"{current_directory}/fixed_insights.json") - data.extend(fixed_insights) - for item in data: - if "task_id" not in item: - raise ValueError("task_id is not found in the insight_pool") - - if task_id: - data = [item for item in data if int(item["task_id"]) == int(task_id)] - return data - - async def generate_new_instructions(self, task_id, original_instruction, max_num, ext_info=None): - data = self.insight_pool - new_instructions = [] - if len(data) == 0: - mcts_logger.log("MCTS", f"No insights available for task {task_id}") - # return [original_instruction] # Return the original instruction if no insights are available - for i in range(max_num): - if len(data) == 0: - insights = "No insights available" - else: - item = data[i] - insights = item["Analysis"] - new_instruction = await InstructionGenerator.generate_new_instruction( - original_instruction, insights, ext_info - ) - new_instructions.append(new_instruction) - return new_instructions - - async def propose_new_insights(self, solution, score): - new_insights = await self.proposer.propose_insights(solution, score) - added_insights = self.add_insight(new_insights) - return added_insights - - async def generate_solutions_from_scratch(self, dataset_info, dataset_name): - insight_pool = await self.proposer.generate_solutions(dataset_info, dataset_name, save_analysis_pool=False) - return insight_pool - - def add_insight(self, new_insights): - added_insights = [] - for new_insight in new_insights: - if not self.is_similar_to_existing(new_insight): - added_insights.append(new_insight) - self.insight_pool.append(new_insight) - return added_insights - - def is_similar_to_existing(self, new_insight, similarity_threshold=0.8): - for existing_insight in self.insight_pool: - similarity = self.calculate_similarity(new_insight["Analysis"], existing_insight["Analysis"]) - if similarity > similarity_threshold: - return True - return False - - @staticmethod - def calculate_similarity(text1, text2): - return SequenceMatcher(None, text1, text2).ratio() - - @staticmethod - async def generate_new_instruction(original_instruction, insights, ext_info): - prompt = CHANGE_INSTRUCTION.format(instruction=original_instruction, insights=insights) - llm = LLM() - context = llm.format_msg([Message(content=prompt, role="user")]) - llm_response = await llm.aask(context, system_msgs=[REFLECTION_SYSTEM_MSG]) - rsp = clean_json_from_rsp(llm_response) - new_instruction = json.loads(rsp)["New Instruction"] - return new_instruction diff --git a/metagpt/ext/sela/insights/solution_designer.py b/metagpt/ext/sela/insights/solution_designer.py deleted file mode 100644 index 1b61c2141a..0000000000 --- a/metagpt/ext/sela/insights/solution_designer.py +++ /dev/null @@ -1,183 +0,0 @@ -import json - -from metagpt.ext.sela.utils import clean_json_from_rsp, load_data_config -from metagpt.llm import LLM - -DATA_CONFIG = load_data_config() - - -DATASET_DESCRIPTION_SELA_PROMPT = """ -# Dataset Description -{dataset} - -# Dataset Metadata -{metadata} - -# Dataset Head -{head} -""" - -DATASET_DESCRIPTION_CUSTOM_PROMPT = """ -# Dataset Description -{dataset_description} -""" - -DATASET_INSIGHT_PROMPT = """ -{description} - -# Instruction -Propose insights to help improve the performance of the model on this dataset. -The insights should be proposed based on the dataset description with different task types. -Each task type should have at least 5 insights. -Make sure each method is diverse enough and can be implemented separately. -Be specific about models' choices, ensemble and tuning techniques, and preprocessing & feature engineering techniques. -Your model choices should be advanced enough to be helpful. - -# Format -```json -[ - {{ - "task_type": "EDA", - "insights": [ - "insight1", - "insight2", - "insight3", - ... - "insightN" - ] - }}, - {{ - "task_type": "Data Preprocessing", - "insights": [ - "insight1", - "insight2", - "insight3", - ... - "insightN" - ] - }}, - {{ - "task_type": "Feature Engineering", - "insights": [ - "insight1", - "insight2", - "insight3", - ... - "insightN" - ] - }}, - {{ - "task_type": "Model Training", - "insights": [ - "insight1", - "insight2", - "insight3", - ... - "insightN" - ] - }} -] -``` -""" - - -INSIGHT_PROPOSAL_PROMPT = """ -You are an AI assistant tasked with analyzing a machine learning solution and proposing new insights to improve its performance. Given the current solution code and development score, suggest innovative approaches to enhance the model. - -Current Solution Code: -{solution_code} - -Development Score: {dev_score} - -Based on this information, propose 3-5 new insights across different aspects of the machine learning pipeline (Data Preprocessing, Feature Engineering, and Model Training). Your insights should be specific, actionable, and have the potential to improve the model's performance. - -Please format your response as a JSON array with the following structure: -[ - - {{ - "task_type": "Data Preprocessing", - "insights": [ - "insight1", - "insight2" - ] - }}, - {{ - "task_type": "Feature Engineering", - "insights": [ - "insight1", - "insight2" - ] - }}, - {{ - "task_type": "Model Training", - "insights": [ - "insight1", - "insight2" - ] - }} -] -""" - - -KEY_DATASET_FEATURES = [ - "NumberOfClasses", - "NumberOfFeatures", - "NumberOfInstances", - "NumberOfInstancesWithMissingValues", - "NumberOfMissingValues", - "NumberOfNumericFeatures", - "NumberOfSymbolicFeatures", -] - -TASK_TO_ID = {"EDA": 1, "Data Preprocessing": 2, "Feature Engineering": 3, "Model Training": 4, "Model Evaluation": 5} - - -class SolutionDesigner: - data_dir: str = DATA_CONFIG["datasets_dir"] - - async def generate_solutions(self, dataset_info, dataset_name, save_analysis_pool=True): - llm = LLM() - if type(dataset_info) == dict: - description_prompt = DATASET_DESCRIPTION_SELA_PROMPT.format( - dataset=dataset_info["description"], - metadata=self.metadata_builder(dataset_info["metadata"]), - head=dataset_info["df_head"], - ) - else: - description_prompt = DATASET_DESCRIPTION_CUSTOM_PROMPT.format(dataset_description=dataset_info) - context = DATASET_INSIGHT_PROMPT.format(description=description_prompt) - rsp = await llm.aask(context) - rsp = clean_json_from_rsp(rsp) - analysis_pool = self.process_analysis_pool(json.loads(rsp)) - if save_analysis_pool: - dataset_path = f"{self.data_dir}/{dataset_name}" - self.save_analysis_pool(dataset_path, analysis_pool) - return analysis_pool - - async def propose_new_insights(self, solution, score): - llm = LLM() - context = INSIGHT_PROPOSAL_PROMPT.format(solution_code=solution, dev_score=score) - rsp = await llm.aask(context) - rsp = clean_json_from_rsp(rsp) - new_insights = self.process_analysis_pool(json.loads(rsp)) - return new_insights - - def process_analysis_pool(self, insights_rsp): - analysis_pool = [] - for task_type_insights in insights_rsp: - task_type = task_type_insights["task_type"] - for insight in task_type_insights["insights"]: - analysis_pool.append({"Analysis": insight, "Category": task_type, "task_id": TASK_TO_ID[task_type]}) - return analysis_pool - - def metadata_builder(self, qualities): - metadata = {} - for key in KEY_DATASET_FEATURES: - metadata[key] = qualities.get(key, "N/A") - metadata_text = json.dumps(metadata, indent=4) - return metadata_text - - def save_analysis_pool(self, dataset_path, analysis_pool): - fpath = f"{dataset_path}/ds_analysis_pool.json" - with open(fpath, "w") as file: - json.dump(analysis_pool, file, indent=4) diff --git a/metagpt/ext/sela/requirements.txt b/metagpt/ext/sela/requirements.txt deleted file mode 100644 index e85818bbea..0000000000 --- a/metagpt/ext/sela/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -# expo -openml==0.14.2 -# ml module to run in DI -xgboost -catboost -lightgbm diff --git a/metagpt/ext/sela/run_experiment.py b/metagpt/ext/sela/run_experiment.py deleted file mode 100644 index 32130a6fb4..0000000000 --- a/metagpt/ext/sela/run_experiment.py +++ /dev/null @@ -1,99 +0,0 @@ -import argparse -import asyncio - -from metagpt.ext.sela.data.custom_task import get_mle_is_lower_better, get_mle_task_id -from metagpt.ext.sela.runner.autogluon import GluonRunner -from metagpt.ext.sela.runner.autosklearn import AutoSklearnRunner -from metagpt.ext.sela.runner.custom import CustomRunner -from metagpt.ext.sela.runner.mcts import MCTSRunner -from metagpt.ext.sela.runner.random_search import RandomSearchRunner -from metagpt.ext.sela.runner.runner import Runner - - -def get_args(cmd=True): - parser = argparse.ArgumentParser() - parser.add_argument("--name", type=str, default="") - parser.add_argument( - "--exp_mode", - type=str, - default="mcts", - choices=["mcts", "rs", "base", "custom", "greedy", "autogluon", "random", "autosklearn"], - ) - parser.add_argument("--role_timeout", type=int, default=1000) - get_di_args(parser) - get_mcts_args(parser) - get_rs_exp_args(parser) - if cmd: - args = parser.parse_args() - else: - args = parser.parse_args("") - - if args.custom_dataset_dir: - args.external_eval = False - args.eval_func = "mlebench" - args.from_scratch = True - args.task = get_mle_task_id(args.custom_dataset_dir) - args.low_is_better = get_mle_is_lower_better(args.task) - return args - - -def get_mcts_args(parser): - parser.add_argument("--load_tree", dest="load_tree", action="store_true") - parser.add_argument("--no_load_tree", dest="load_tree", action="store_false") - parser.set_defaults(load_tree=False) - parser.add_argument("--rollouts", type=int, default=5) - parser.add_argument("--use_fixed_insights", dest="use_fixed_insights", action="store_true") - parser.set_defaults(use_fixed_insights=False) - parser.add_argument("--start_task_id", type=int, default=2) - parser.add_argument( - "--from_scratch", dest="from_scratch", action="store_true", help="Generate solutions from scratch" - ) - parser.set_defaults(from_scratch=False) - parser.add_argument("--no_external_eval", dest="external_eval", action="store_false") - parser.set_defaults(external_eval=True) - parser.add_argument("--eval_func", type=str, default="sela", choices=["sela", "mlebench"]) - parser.add_argument("--custom_dataset_dir", type=str, default=None) - parser.add_argument("--max_depth", type=int, default=4) - - -def get_rs_exp_args(parser): - parser.add_argument("--rs_mode", type=str, default="single", choices=["single", "set"]) - parser.add_argument("--is_multimodal", action="store_true", help="Specify if the model is multi-modal") - - -def get_di_args(parser): - parser.add_argument("--task", type=str, default="titanic") - parser.add_argument("--low_is_better", dest="low_is_better", action="store_true") - parser.set_defaults(low_is_better=False) - parser.add_argument("--reflection", dest="reflection", action="store_true") - parser.add_argument("--no_reflection", dest="reflection", action="store_false") - parser.add_argument("--num_experiments", type=int, default=1) - parser.add_argument("--special_instruction", type=str, default=None, choices=["ag", "stacking", "text", "image"]) - parser.set_defaults(reflection=True) - - -async def main(args): - if args.exp_mode == "mcts": - runner = MCTSRunner(args) - elif args.exp_mode == "greedy": - runner = MCTSRunner(args, tree_mode="greedy") - elif args.exp_mode == "random": - runner = MCTSRunner(args, tree_mode="random") - elif args.exp_mode == "rs": - runner = RandomSearchRunner(args) - elif args.exp_mode == "base": - runner = Runner(args) - elif args.exp_mode == "autogluon": - runner = GluonRunner(args) - elif args.exp_mode == "custom": - runner = CustomRunner(args) - elif args.exp_mode == "autosklearn": - runner = AutoSklearnRunner(args) - else: - raise ValueError(f"Invalid exp_mode: {args.exp_mode}") - await runner.run_experiment() - - -if __name__ == "__main__": - args = get_args() - asyncio.run(main(args)) diff --git a/metagpt/ext/sela/runner/README.md b/metagpt/ext/sela/runner/README.md deleted file mode 100644 index 4867aa4f09..0000000000 --- a/metagpt/ext/sela/runner/README.md +++ /dev/null @@ -1,168 +0,0 @@ -# SELA: Tree-Search Enhanced LLM Agents for Automated Machine Learning - -This document provides instructions for running baseline models. To start with, ensure that you prepare the datasets as instructed in `sela/README.md`. - -## Baselines - -### 1. AIDE - -#### Setup - -We use the AIDE version from September 30, 2024. Clone the repository and check out the specified commit: - -```bash -git clone https://github.com/WecoAI/aideml.git -git checkout 77953247ea0a5dc1bd502dd10939dd6d7fdcc5cc -``` - - -Modify `aideml/aide/utils/config.yaml` to set the following parameters: - -```yaml -# agent hyperparams -agent: - steps: 10 # Number of improvement iterations - k_fold_validation: 1 # Set to 1 to disable cross-validation - code: - model: deepseek-coder - temp: 0.5 - feedback: - model: deepseek-coder - temp: 0.5 - search: - max_debug_depth: 3 - debug_prob: 0.5 - num_drafts: 5 -``` - -Update your OpenAI API credentials in the environment: - -```bash -export OPENAI_API_KEY="your api key" -export OPENAI_BASE_URL="your own url" -``` - -Modify `aideml/aide/backend/__init__.py` (line 30 and below): - -```python -model_kwargs = model_kwargs | { - "model": model, - "temperature": temperature, - "max_tokens": max_tokens, - } -if "claude-" in model: - query_func = backend_anthropic.query -else: - query_func = backend_openai.query -``` - -Since Deepseek V2.5 no longer supports system messages using function calls, modify `aideml/aide/agent.py` (line 312): - -```python -response = cast( - dict, - query( - system_message=None, - user_message=prompt, - func_spec=review_func_spec, - model=self.acfg.feedback.model, - temperature=self.acfg.feedback.temp, - ), -) -``` - -Finally, install AIDE: - -```bash -cd aideml -pip install -e . -``` - -#### Run - -Execute the following script to generate results. A `log` folder (containing experimental configurations) and a `workspace` folder (storing final results) will be created: - -```bash -python runner/aide.py -``` - ---- - -### 2. Autogluon - -#### Setup - -Install Autogluon: - -```bash -pip install -U pip -pip install -U setuptools wheel -pip install autogluon==1.1.1 -``` - -#### Run - -For Tabular data: - -```bash -python run_experiment.py --exp_mode autogluon --task {task_name} -``` - -For Multimodal data: - -```bash -python run_experiment.py --exp_mode autogluon --task {task_name} --is_multimodal -``` - -Replace `{task_name}` with the specific task you want to run. - ---- - -### 3. AutoSklearn - -**Note:** -AutoSklearn requires: -- Linux operating system (e.g., Ubuntu) -- Python (>=3.7) -- C++ compiler (with C++11 support) - -If installing on a system without wheel files for the `pyrfr` package, you also need: - -- [SWIG](https://www.swig.org/survey.html) - -Refer to the [Windows/macOS compatibility](https://automl.github.io/auto-sklearn/master/installation.html#windows-macos-compatibility) section for further details. - -#### Setup - -Install AutoSklearn: - -```bash -pip install auto-sklearn==0.15.0 -``` - -#### Run - -Execute the following command for the Titanic task: - -```bash -python run_experiment.py --exp_mode autosklearn --task titanic -``` - ---- - -### 4. Base Data Interpreter - -Run the following command for the Titanic task: - -```bash -python run_experiment.py --exp_mode base --task titanic --num_experiments 10 -``` - ---- - -### 5. Custom Baselines - -To run additional baselines: - -- Each baseline must produce `dev_predictions.csv` and `test_predictions.csv` with a `target` column. -- Use the `evaluate_score` function for evaluation. \ No newline at end of file diff --git a/metagpt/ext/sela/runner/__init__.py b/metagpt/ext/sela/runner/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/metagpt/ext/sela/runner/aide.py b/metagpt/ext/sela/runner/aide.py deleted file mode 100644 index 50fae94c14..0000000000 --- a/metagpt/ext/sela/runner/aide.py +++ /dev/null @@ -1,35 +0,0 @@ -import os -import time - -import aide - -os.environ["OPENAI_API_KEY"] = "sk-xxx" -os.environ["OPENAI_BASE_URL"] = "your url" - -start_time = time.time() - -data_dir = "xxx/data/titanic" - -goal = f""" -# User requirement -({data_dir}, 'This is a 04_titanic dataset. Your goal is to predict the target column `Survived`.\nPerform data analysis, data preprocessing, feature engineering, and modeling to predict the target. \nReport f1 on the eval data. Do not plot or make any visualizations.\n') - -# Data dir -training (with labels): train.csv -testing (without labels): test.csv -dataset description: dataset_info.json (You can use this file to get additional information about the dataset)""" - -exp = aide.Experiment( - data_dir=data_dir, # replace this with your own directory - goal=goal, - eval="f1", # replace with your own evaluation metric -) - -best_solution = exp.run(steps=10) - -print(f"Best solution has validation metric: {best_solution.valid_metric}") -print(f"Best solution code: {best_solution.code}") -end_time = time.time() -execution_time = end_time - start_time - -print(f"run time : {execution_time} seconds") diff --git a/metagpt/ext/sela/runner/autogluon.py b/metagpt/ext/sela/runner/autogluon.py deleted file mode 100644 index 48737da045..0000000000 --- a/metagpt/ext/sela/runner/autogluon.py +++ /dev/null @@ -1,128 +0,0 @@ -import os -from datetime import datetime - -import pandas as pd - -from metagpt.ext.sela.runner.custom import CustomRunner - - -class AGRunner: - def __init__(self, state=None): - self.state = state - self.datasets = self.state["datasets_dir"] - - def run(self): - from autogluon.tabular import TabularDataset, TabularPredictor - - train_path = self.datasets["train"] - dev_path = self.datasets["dev"] - dev_wo_target_path = self.datasets["dev_wo_target"] - test_wo_target_path = self.datasets["test_wo_target"] - target_col = self.state["dataset_config"]["target_col"] - train_data = TabularDataset(train_path) - dev_data = TabularDataset(dev_path) - dev_wo_target_data = TabularDataset(dev_wo_target_path) - test_data = TabularDataset(test_wo_target_path) - eval_metric = self.state["dataset_config"]["metric"].replace(" ", "_") - predictor = TabularPredictor( - label=target_col, - eval_metric=eval_metric, - path="AutogluonModels/ag-{}-{}".format(self.state["task"], datetime.now().strftime("%y%m%d_%H%M")), - ).fit(train_data=train_data, tuning_data=dev_data, num_gpus=1) - dev_preds = predictor.predict(dev_wo_target_data) - test_preds = predictor.predict(test_data) - return {"test_preds": test_preds, "dev_preds": dev_preds} - - def run_multimodal(self): - from autogluon.multimodal import MultiModalPredictor - - target_col = self.state["dataset_config"]["target_col"] - train_path = self.datasets["train"] - dev_path = self.datasets["dev"] - dev_wo_target_path = self.datasets["dev_wo_target"] # Updated variable name - test_wo_target_path = self.datasets["test_wo_target"] - eval_metric = self.state["dataset_config"]["metric"].replace(" ", "_") - - # Load the datasets - train_data, dev_data, dev_wo_target_data, test_data = self.load_split_dataset( - train_path, dev_path, dev_wo_target_path, test_wo_target_path - ) - - # Create and fit the predictor - predictor = MultiModalPredictor( - label=target_col, - eval_metric=eval_metric, - path="AutogluonModels/ag-{}-{}".format(self.state["task"], datetime.now().strftime("%y%m%d_%H%M")), - ).fit(train_data=train_data, tuning_data=dev_data) - - # Make predictions on dev and test datasets - dev_preds = predictor.predict(dev_wo_target_data) - test_preds = predictor.predict(test_data) - - # Return predictions for dev and test datasets - return {"dev_preds": dev_preds, "test_preds": test_preds} - - def load_split_dataset(self, train_path, dev_path, dev_wo_target_path, test_wo_target_path): - """ - Loads training, dev, and test datasets from given file paths - - Args: - train_path (str): Path to the training dataset. - dev_path (str): Path to the dev dataset with target labels. - dev_wo_target_path (str): Path to the dev dataset without target labels. - test_wo_target_path (str): Path to the test dataset without target labels. - - Returns: - train_data (pd.DataFrame): Loaded training dataset with updated image paths. - dev_data (pd.DataFrame): Loaded dev dataset with updated image paths. - dev_wo_target_data (pd.DataFrame): Loaded dev dataset without target labels and updated image paths. - test_data (pd.DataFrame): Loaded test dataset with updated image paths. - """ - - # Define the root path to append - root_folder = os.path.join("F:/Download/Dataset/", self.state["task"]) - - # Load the datasets - train_data = pd.read_csv(train_path) - dev_data = pd.read_csv(dev_path) # Load dev dataset with target labels - dev_wo_target_data = pd.read_csv(dev_wo_target_path) # Load dev dataset without target labels - test_data = pd.read_csv(test_wo_target_path) - - # Get the name of the first column (assuming it's the image path column) - image_column = train_data.columns[0] - - # Append root folder path to the image column in each dataset - train_data[image_column] = train_data[image_column].apply(lambda x: os.path.join(root_folder, x)) - dev_data[image_column] = dev_data[image_column].apply(lambda x: os.path.join(root_folder, x)) - dev_wo_target_data[image_column] = dev_wo_target_data[image_column].apply( - lambda x: os.path.join(root_folder, x) - ) - test_data[image_column] = test_data[image_column].apply(lambda x: os.path.join(root_folder, x)) - - return train_data, dev_data, dev_wo_target_data, test_data - - -class GluonRunner(CustomRunner): - result_path: str = "results/autogluon" - - def __init__(self, args, **kwargs): - super().__init__(args, **kwargs) - self.framework = AGRunner(self.state) - self.is_multimodal = args.is_multimodal if hasattr(args, "is_multimodal") else False - - async def run_experiment(self): - if not self.is_multimodal: - result = self.framework.run() - else: - result = self.framework.run_multimodal() - - assert result is not None - user_requirement = self.state["requirement"] - dev_preds = result["dev_preds"] - test_preds = result["test_preds"] - score_dict = { - "dev_score": self.evaluate_predictions(dev_preds, "dev"), - "test_score": self.evaluate_predictions(test_preds, "test"), - } - results = [0, {"score_dict": score_dict, "user_requirement": user_requirement, "args": vars(self.args)}] - self.save_result(results) diff --git a/metagpt/ext/sela/runner/autosklearn.py b/metagpt/ext/sela/runner/autosklearn.py deleted file mode 100644 index 7d0eb364e5..0000000000 --- a/metagpt/ext/sela/runner/autosklearn.py +++ /dev/null @@ -1,96 +0,0 @@ -from datetime import datetime -from functools import partial - -import pandas as pd - -from metagpt.ext.sela.evaluation.evaluation import evaluate_score -from metagpt.ext.sela.runner.custom import CustomRunner - - -def custom_scorer(y_true, y_pred, metric_name): - return evaluate_score(y_pred, y_true, metric_name) - - -class ASRunner: - time_limit = 600 - - def __init__(self, state=None): - self.state = state - self.datasets = self.state["datasets_dir"] - - def create_autosklearn_scorer(self, metric_name): - from autosklearn.metrics import make_scorer - - return make_scorer(name=metric_name, score_func=partial(custom_scorer, metric_name=metric_name)) - - def run(self): - import autosklearn.classification - import autosklearn.regression - - train_path = self.datasets["train"] - dev_wo_target_path = self.datasets["dev_wo_target"] - test_wo_target_path = self.datasets["test_wo_target"] - target_col = self.state["dataset_config"]["target_col"] - - train_data = pd.read_csv(train_path) - dev_data = pd.read_csv(dev_wo_target_path) - test_data = pd.read_csv(test_wo_target_path) - eval_metric = self.state["dataset_config"]["metric"] - X_train = train_data.drop(columns=[target_col]) - y_train = train_data[target_col] - - if eval_metric == "rmse": - automl = autosklearn.regression.AutoSklearnRegressor( - time_left_for_this_task=self.time_limit, - metric=self.create_autosklearn_scorer(eval_metric), - memory_limit=8192, - tmp_folder="AutosklearnModels/as-{}-{}".format( - self.state["task"], datetime.now().strftime("%y%m%d_%H%M") - ), - n_jobs=-1, - ) - elif eval_metric in ["f1", "f1 weighted"]: - automl = autosklearn.classification.AutoSklearnClassifier( - time_left_for_this_task=self.time_limit, - metric=self.create_autosklearn_scorer(eval_metric), - memory_limit=8192, - tmp_folder="AutosklearnModels/as-{}-{}".format( - self.state["task"], datetime.now().strftime("%y%m%d_%H%M") - ), - n_jobs=-1, - ) - else: - raise ValueError(f"Unsupported metric: {eval_metric}") - automl.fit(X_train, y_train) - - dev_preds = automl.predict(dev_data) - test_preds = automl.predict(test_data) - - return {"test_preds": test_preds, "dev_preds": dev_preds} - - -class AutoSklearnRunner(CustomRunner): - result_path: str = "results/autosklearn" - - def __init__(self, args, **kwargs): - super().__init__(args, **kwargs) - self.framework = ASRunner(self.state) - - async def run_experiment(self): - result = self.framework.run() - user_requirement = self.state["requirement"] - dev_preds = result["dev_preds"] - test_preds = result["test_preds"] - score_dict = { - "dev_score": self.evaluate_predictions(dev_preds, "dev"), - "test_score": self.evaluate_predictions(test_preds, "test"), - } - results = [ - 0, - { - "score_dict": score_dict, - "user_requirement": user_requirement, - "args": vars(self.args), - }, - ] - self.save_result(results) diff --git a/metagpt/ext/sela/runner/custom.py b/metagpt/ext/sela/runner/custom.py deleted file mode 100644 index e9a8ee276f..0000000000 --- a/metagpt/ext/sela/runner/custom.py +++ /dev/null @@ -1,62 +0,0 @@ -import os - -import pandas as pd - -from metagpt.ext.sela.evaluation.evaluation import evaluate_score -from metagpt.ext.sela.runner.runner import Runner -from metagpt.ext.sela.search.tree_search import create_initial_state - - -class CustomRunner(Runner): - result_path: str = "results/custom" - - def __init__(self, args, **kwargs): - super().__init__(args, **kwargs) - self.framework = kwargs.get("framework", None) # todo - self.task = kwargs.get("task", self.args.task) - self.low_is_better = kwargs.get("low_is_better", self.args.low_is_better) - self.name = kwargs.get("name", "") - self.result_path = f"results/custom_{self.name}" - self.state = create_initial_state( - self.task, - start_task_id=1, - data_config=self.data_config, - args=self.args, - ) - - def run_experiment(self): - user_requirement = self.state["requirement"] - preds = self.framework.run(user_requirement) - test_preds = preds["test_preds"] - dev_preds = preds["dev_preds"] - score_dict = { - "dev_score": self.evaluate_predictions(dev_preds, "dev"), - "test_score": self.evaluate_predictions(test_preds, "test"), - } - results = {"score_dict": score_dict, "user_requirement": user_requirement, "args": vars(self.args)} - self.save_result(results) - - def evaluate_pred_files(self, dev_pred_path, test_pred_path): - dev_preds = pd.read_csv(dev_pred_path)["target"] - test_preds = pd.read_csv(test_pred_path)["target"] - score_dict = { - "dev_score": self.evaluate_score(dev_preds, "dev"), - "test_score": self.evaluate_score(test_preds, "test"), - } - return score_dict - - def evaluate_predictions(self, preds, split): - metric = self.state["dataset_config"]["metric"] - gt_path = os.path.join(self.state["datasets_dir"][f"{split}_target"]) - gt = pd.read_csv(gt_path)["target"] - score = evaluate_score(preds, gt, metric) - return score - - def load_datasets(self): - train_path = self.state["datasets_dir"]["train"] - dev_path = self.state["datasets_dir"]["dev"] - test_path = self.state["datasets_dir"]["test"] - train = pd.read_csv(train_path) - dev = pd.read_csv(dev_path) - test = pd.read_csv(test_path) - return train, dev, test diff --git a/metagpt/ext/sela/runner/mcts.py b/metagpt/ext/sela/runner/mcts.py deleted file mode 100644 index 8b6c141002..0000000000 --- a/metagpt/ext/sela/runner/mcts.py +++ /dev/null @@ -1,80 +0,0 @@ -import shutil - -from metagpt.ext.sela.evaluation.evaluation import ( - node_evaluate_score_mlebench, - node_evaluate_score_sela, -) -from metagpt.ext.sela.evaluation.visualize_mcts import get_tree_text -from metagpt.ext.sela.runner.runner import Runner -from metagpt.ext.sela.search.search_algorithm import MCTS, Greedy, Random - - -class MCTSRunner(Runner): - result_path: str = "results/mcts" - - def __init__(self, args, tree_mode=None, **kwargs): - if args.special_instruction == "image": - self.start_task_id = 1 # start from datapreprocessing if it is image task - else: - self.start_task_id = args.start_task_id - - if args.eval_func == "sela": - self.eval_func = node_evaluate_score_sela - elif args.eval_func == "mlebench": - self.eval_func = node_evaluate_score_mlebench - - super().__init__(args, **kwargs) - self.tree_mode = tree_mode - - async def run_experiment(self): - use_fixed_insights = self.args.use_fixed_insights - depth = self.args.max_depth - if self.tree_mode == "greedy": - mcts = Greedy(root_node=None, max_depth=depth, use_fixed_insights=use_fixed_insights) - elif self.tree_mode == "random": - mcts = Random(root_node=None, max_depth=depth, use_fixed_insights=use_fixed_insights) - else: - mcts = MCTS(root_node=None, max_depth=depth, use_fixed_insights=use_fixed_insights) - best_nodes = await mcts.search(state=self.state, args=self.args) - best_node = best_nodes["global_best"] - dev_best_node = best_nodes["dev_best"] - score_dict = best_nodes["scores"] - additional_scores = {"grader": self.eval_func(dev_best_node)} - - text, num_generated_codes = get_tree_text(mcts.root_node) - text += f"Generated {num_generated_codes} unique codes.\n" - text += f"Best node: {best_node.id}, score: {best_node.raw_reward}\n" - text += f"Dev best node: {dev_best_node.id}, score: {dev_best_node.raw_reward}\n" - text += f"Grader score: {additional_scores['grader']}\n" - print(text) - results = [ - { - "best_node": best_node.id, - "best_node_score": best_node.raw_reward, - "dev_best_node": dev_best_node.id, - "dev_best_node_score": dev_best_node.raw_reward, - "num_generated_codes": num_generated_codes, - "user_requirement": best_node.state["requirement"], - "tree_text": text, - "args": vars(self.args), - "scores": score_dict, - "additional_scores": additional_scores, - } - ] - self.save_result(results) - self.copy_notebook(best_node, "best") - self.copy_notebook(dev_best_node, "dev_best") - self.save_tree(text) - - def copy_notebook(self, node, name): - node_dir = node.get_node_dir() - node_nb_dir = f"{node_dir}/Node-{node.id}.ipynb" - save_name = self.get_save_name() - copy_nb_dir = f"{self.result_path}/{save_name}_{name}.ipynb" - shutil.copy(node_nb_dir, copy_nb_dir) - - def save_tree(self, tree_text): - save_name = self.get_save_name() - fpath = f"{self.result_path}/{save_name}_tree.txt" - with open(fpath, "w") as f: - f.write(tree_text) diff --git a/metagpt/ext/sela/runner/mle_bench/instructions.py b/metagpt/ext/sela/runner/mle_bench/instructions.py deleted file mode 100644 index 136726bcfe..0000000000 --- a/metagpt/ext/sela/runner/mle_bench/instructions.py +++ /dev/null @@ -1,48 +0,0 @@ -SUBMISSION_INSTURCTION = """ -- **Submission checker**: We provide a tool for checking the validity of your submission file, in the form of a server endpoint at `http://localhost:5000/validate`. If you post a submission file to the server (e.g. `curl -X POST -F "file=@${SUBMISSION_FILE}" ${SERVER_URL}`), you will receive a response message telling you if your submission is valid or not (note that this does NOT give you a score). For your convenience, we provide a script `/home/validate_submission.sh` which can help you make this submission to the validation server. -""" -INSTRUCTIONS = """ -You are participating in *MLE-bench*, an offline version of Kaggle competitions adapted to test the coding ability of agents like yourself. - -You will be given a machine learning task. You must solve the task by training a model and running the model on the test set to produce a submission file. You may not hand-label the data to produce a submission file. - -BENCHMARK INSTRUCTIONS ------- -First, please read the instructions below which are specific to our benchmark setup. Note, these instructions can be found again in `runner/mle_bench/instructions.py`. - -- **Competition-specific instructions**: The instructions for the competition are available in `{dataset_dir}/description.md`. Read this file to understand the problem setup for the competition you are currently solving. -- **Dataset**: The dataset files for the competition are available in `{dataset_dir}`. -- **Submission**: We have simplified all competition types to use a simple CSV submission format. Regardless of what the competition instructions say, you MUST produce a submission file at `{output_dir}/submission.csv`. We will only evaluate submissions found at this path; failure to submit a `submission.csv` at this path will result in a failed attempt. -- **Test set**: In general, since we do not have access to the original test labels, we have constructed our own train/test split for each competition. As such, the dataset you see in `{dataset_dir}` may differ slightly from what is described in the competition instructions. Nevertheless the files available to you should otherwise be similar to the original and you should proceed with the competition task on the train/test splits available to you. -- **Cheating**: You are not allowed to view others' solutions to this competition. If we detect that your submission is plagiarized from others, the submission will be disqualified. - -Your submission will be graded based on the metric in the competition-specific instructions. Your goal is to achieve the best score possible on the competition task. - -Wherever there is a conflict between the points above and the competition-specific instructions in `{dataset_dir}/description.md`, the above points should always take priority since these are always true for our offline benchmark setup. -""" - -INSTRUCTIONS_OBFUSCATED = """ -You are participating in *MLE-bench*, a benchmark designed to test the coding ability of agents like yourself. - -You will be given a machine learning task. You must solve the task by training a model and running the model on the test set to produce a submission file. You may not hand-label the data to produce a submission file. - -BENCHMARK INSTRUCTIONS ------- -First, please read the instructions below which are specific to our benchmark setup. Note, these instructions can be found again in `runner/mle_bench/instructions.py`. - -- **Task-specific instructions**: The instructions for the task are available in `{dataset_dir}/description.md`. Read this file to understand the problem setup for the task you are currently solving. -- **Dataset**: The dataset files for the task are available in `{dataset_dir}/`. -- **Submission**: Regardless of what the task instructions say, you MUST produce a submission file at `{output_dir}/submission.csv`. We will only evaluate submissions found at this path; failure to submit a `submission.csv` at this path will result in a failed attempt. -- **Test set**: In general, since we do not have access to the original test labels, we have constructed our own train/test split for each task. As such, the dataset you see in `{dataset_dir}` may differ slightly from what is described in the task instructions. Nevertheless the files available to you should otherwise be similar to the original and you should proceed with the task on the train/test splits available to you. -- **Cheating**: You are not allowed to view others' solutions to this task. If we detect that your submission is plagiarized from others, the submission will be disqualified. - -Your submission will be graded based on the metric in the task-specific instructions. Your goal is to achieve the best score possible on the task. - -Wherever there is a conflict between the points above and the task-specific instructions in `{dataset_dir}/description.md`, the above points should always take priority since these are always true for our offline benchmark setup. -""" - -ADDITIONAL_NOTES = """ -ADDITIONAL NOTES ------- -- **Compute**: You have access to gpu with the appropriate drivers installed. -""" diff --git a/metagpt/ext/sela/runner/random_search.py b/metagpt/ext/sela/runner/random_search.py deleted file mode 100644 index b1f43ac0c9..0000000000 --- a/metagpt/ext/sela/runner/random_search.py +++ /dev/null @@ -1,53 +0,0 @@ -from metagpt.ext.sela.experimenter import Experimenter -from metagpt.ext.sela.insights.instruction_generator import InstructionGenerator -from metagpt.ext.sela.runner.runner import Runner -from metagpt.ext.sela.utils import get_exp_pool_path - -EXPS_PROMPT = """ -When doing the tasks, you can refer to the insights below: -{experience} - -""" - - -class RandomSearchRunner(Runner): - result_path: str = "results/random_search" - - async def run_experiment(self): - # state = create_initial_state(self.args.task, start_task_id=1, data_config=self.data_config, low_is_better=self.args.low_is_better, name="") - user_requirement = self.state["requirement"] - exp_pool_path = get_exp_pool_path(self.args.task, self.data_config, pool_name="ds_analysis_pool") - exp_pool = InstructionGenerator.load_insight_pool( - exp_pool_path, use_fixed_insights=self.args.use_fixed_insights - ) - if self.args.rs_mode == "single": - exps = InstructionGenerator._random_sample(exp_pool, self.args.num_experiments) - exps = [exp["Analysis"] for exp in exps] - elif self.args.rs_mode == "set": - exps = [] - for i in range(self.args.num_experiments): - exp_set = InstructionGenerator.sample_instruction_set(exp_pool) - exp_set_text = "\n".join([f"{exp['task_id']}: {exp['Analysis']}" for exp in exp_set]) - exps.append(exp_set_text) - else: - raise ValueError(f"Invalid mode: {self.args.rs_mode}") - - results = [] - for i in range(self.args.num_experiments): - di = Experimenter(node_id=str(i), use_reflection=self.args.reflection, role_timeout=self.args.role_timeout) - di.role_dir = f"{di.role_dir}_{self.args.task}" - requirement = user_requirement + EXPS_PROMPT.format(experience=exps[i]) - print(requirement) - score_dict = await self.run_di(di, requirement, run_idx=i) - results.append( - { - "idx": i, - "score_dict": score_dict, - "rs_mode": self.args.rs_mode, - "insights": exps[i], - "user_requirement": requirement, - "args": vars(self.args), - } - ) - results = self.summarize_results(results) - self.save_result(results) diff --git a/metagpt/ext/sela/runner/runner.py b/metagpt/ext/sela/runner/runner.py deleted file mode 100644 index 4b5504e096..0000000000 --- a/metagpt/ext/sela/runner/runner.py +++ /dev/null @@ -1,133 +0,0 @@ -import datetime -import json -import os - -import numpy as np -import pandas as pd - -from metagpt.ext.sela.evaluation.evaluation import evaluate_score -from metagpt.ext.sela.experimenter import Experimenter -from metagpt.ext.sela.search.tree_search import create_initial_state -from metagpt.ext.sela.utils import DATA_CONFIG, save_notebook - - -class Runner: - result_path: str = "results/base" - data_config = DATA_CONFIG - start_task_id = 1 - - def __init__(self, args, **kwargs): - self.args = args - self.start_time_raw = datetime.datetime.now() - self.start_time = self.start_time_raw.strftime("%Y%m%d%H%M") - self.state = create_initial_state( - self.args.task, - start_task_id=self.start_task_id, - data_config=self.data_config, - args=self.args, - ) - - async def run_di(self, di, user_requirement, run_idx): - max_retries = 3 - num_runs = 1 - run_finished = False - while num_runs <= max_retries and not run_finished: - try: - await di.run(user_requirement) - score_dict = await di.get_score() - score_dict = self.evaluate(score_dict, self.state) - run_finished = True - except Exception as e: - print(f"Error: {e}") - num_runs += 1 - # save_notebook(role=di, save_dir=self.result_path, name=f"{self.args.task}_{self.start_time}_{run_idx}") - save_name = self.get_save_name() - save_notebook(role=di, save_dir=self.result_path, name=f"{save_name}_{run_idx}") - - if not run_finished: - score_dict = {"train_score": -1, "dev_score": -1, "test_score": -1, "score": -1} - return score_dict - - def summarize_results(self, results): - dev_scores = [result["score_dict"]["dev_score"] for result in results] - best_dev_score = ( - max(dev_scores) - if not self.args.low_is_better - else min([score for score in dev_scores if score != -1] + [np.inf]) - ) - best_score_idx = dev_scores.index(best_dev_score) - - test_scores = [result["score_dict"]["test_score"] for result in results] - avg_score = sum(test_scores) / len(test_scores) - global_best_score = ( - max(test_scores) - if not self.args.low_is_better - else min([score for i, score in enumerate(test_scores) if dev_scores[i] != -1] + [np.inf]) - ) - - results.insert( - 0, - { - "best_dev_score": best_dev_score, - "best_dev_score_idx": best_score_idx, - "best_dev_test_score": test_scores[best_score_idx], - "avg_test_score": avg_score, - "global_best_test_score": global_best_score, - }, - ) - return results - - async def run_experiment(self): - state = self.state - user_requirement = state["requirement"] - results = [] - - for i in range(self.args.num_experiments): - di = Experimenter(node_id="0", use_reflection=self.args.reflection, role_timeout=self.args.role_timeout) - score_dict = await self.run_di(di, user_requirement, run_idx=i) - results.append( - {"idx": i, "score_dict": score_dict, "user_requirement": user_requirement, "args": vars(self.args)} - ) - self.save_result(results) # save intermediate results - results = self.summarize_results(results) - - self.save_result(results) - - def evaluate_prediction(self, split, state): - pred_path = os.path.join(state["work_dir"], state["task"], f"{split}_predictions.csv") - os.makedirs(state["node_dir"], exist_ok=True) - pred_node_path = os.path.join(state["node_dir"], f"{self.start_time}-{split}_predictions.csv") - gt_path = os.path.join(state["datasets_dir"][f"{split}_target"]) - preds = pd.read_csv(pred_path) - preds = preds[preds.columns.tolist()[-1]] - preds.to_csv(pred_node_path, index=False) - gt = pd.read_csv(gt_path)["target"] - metric = state["dataset_config"]["metric"] - os.remove(pred_path) - return evaluate_score(preds, gt, metric) - - def evaluate(self, score_dict, state): - scores = { - "dev_score": self.evaluate_prediction("dev", state), - "test_score": self.evaluate_prediction("test", state), - } - score_dict.update(scores) - return score_dict - - def get_save_name(self): - return f"{self.args.exp_mode}-{self.args.task}_{self.start_time}" - - def save_result(self, result): - end_time_raw = datetime.datetime.now() - end_time = end_time_raw.strftime("%Y%m%d%H%M") - time_info = { - "start_time": self.start_time, - "end_time": end_time, - "duration (seconds)": (end_time_raw - self.start_time_raw).seconds, - } - result = result.copy() - result.insert(0, time_info) - save_name = self.get_save_name() - os.makedirs(self.result_path, exist_ok=True) - with open(f"{self.result_path}/{save_name}.json", "w") as f: - json.dump(result, f, indent=4) diff --git a/metagpt/ext/sela/scripts/run_cls.sh b/metagpt/ext/sela/scripts/run_cls.sh deleted file mode 100644 index f0ee5ddcf1..0000000000 --- a/metagpt/ext/sela/scripts/run_cls.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -tasks=("smoker-status" "software-defects" "jasmine" "credit-g" "Click_prediction_small" "kick" "kc1" "titanic" "icr" "wine-quality-white" "mfeat-factors" "segment" "GesturePhaseSegmentationProcessed") - - -for i in {1..3} -do - for task in "${tasks[@]}"; do - echo "Running experiment for task: $task" - python run_experiment.py --exp_mode mcts --task "$task" --rollouts 10 --special_instruction stacking - echo "Experiment for task $task completed." - done -done - -echo "All experiments completed." diff --git a/metagpt/ext/sela/scripts/run_cls_mod.sh b/metagpt/ext/sela/scripts/run_cls_mod.sh deleted file mode 100644 index ae3622b7a9..0000000000 --- a/metagpt/ext/sela/scripts/run_cls_mod.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -tasks=("banking77" "gnad10" "sms_spam" "oxford-iiit-pet" "stanford_cars" "fashion_mnist" ) - -for i in {1..3} -do - for task in "${tasks[@]}"; do - echo "Running experiment for task: $task" - python run_experiment.py --exp_mode mcts --task "$task" --rollouts 10 - echo "Experiment for task $task completed." - done -done -echo "All experiments completed." diff --git a/metagpt/ext/sela/scripts/run_reg.sh b/metagpt/ext/sela/scripts/run_reg.sh deleted file mode 100644 index f8a7428864..0000000000 --- a/metagpt/ext/sela/scripts/run_reg.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -tasks=("concrete-strength" "Moneyball" "colleges" "SAT11-HAND-runtime-regression" "diamonds" "boston" "house-prices") - -for i in {1..3} -do - for task in "${tasks[@]}"; do - echo "Running experiment for task: $task" - python run_experiment.py --exp_mode mcts --task "$task" --rollouts 10 --low_is_better --special_instruction stacking - echo "Experiment for task $task completed." - done -done - -echo "All experiments completed." diff --git a/metagpt/ext/sela/scripts/visualize_experiment.py b/metagpt/ext/sela/scripts/visualize_experiment.py deleted file mode 100644 index a6d980d118..0000000000 --- a/metagpt/ext/sela/scripts/visualize_experiment.py +++ /dev/null @@ -1,28 +0,0 @@ -import networkx as nx - -from metagpt.ext.sela.evaluation.visualize_mcts import ( - build_tree_recursive, - visualize_tree, -) -from metagpt.ext.sela.MCTS import MCTS, create_initial_state, initialize_di_root_node -from metagpt.ext.sela.run_experiment import get_args -from metagpt.ext.sela.utils import DATA_CONFIG - -if __name__ == "__main__": - args = get_args() - data_config = DATA_CONFIG - state = create_initial_state(args.task, 0, data_config, args=args) - role, node = initialize_di_root_node(state) - mcts = MCTS( - root_node=node, - max_depth=5, - use_fixed_insights=False, - ) - - mcts.load_tree() - mcts.load_node_order() - root = mcts.root_node - node_order = mcts.node_order - G = nx.DiGraph() - build_tree_recursive(G, "0", root, node_order) - visualize_tree(G, save_path=f"results/{args.task}-tree.png") diff --git a/metagpt/ext/sela/search/search_algorithm.py b/metagpt/ext/sela/search/search_algorithm.py deleted file mode 100644 index ca47d8cf6c..0000000000 --- a/metagpt/ext/sela/search/search_algorithm.py +++ /dev/null @@ -1,32 +0,0 @@ -import numpy as np - -from metagpt.ext.sela.search.tree_search import BaseTreeSearch, Node - - -class Greedy(BaseTreeSearch): - def best_child(self): - if len(self.children) == 0: - return self.root_node - all_children = [child for children in self.children.values() for child in children] - return max(all_children, key=lambda x: x.normalized_reward.get("dev_score", 0)) - - -class Random(BaseTreeSearch): - def best_child(self): - if len(self.children) == 0: - return self.root_node - all_children = [child for children in self.children.values() for child in children] - return np.random.choice(all_children) - - -class MCTS(BaseTreeSearch): - def best_child(self): - def uct(node: Node): - n_visits = node.visited if node.visited else self.c_unvisited - avg_value = node.avg_value() if node.visited else node.value / self.c_unvisited - return avg_value + self.c_explore * np.sqrt(np.log(node.parent.visited) / n_visits) - - if len(self.children) == 0: - return self.root_node - all_children = [child for children in self.children.values() for child in children] - return max(all_children, key=uct) diff --git a/metagpt/ext/sela/search/tree_search.py b/metagpt/ext/sela/search/tree_search.py deleted file mode 100644 index eac26c86ca..0000000000 --- a/metagpt/ext/sela/search/tree_search.py +++ /dev/null @@ -1,492 +0,0 @@ -import json -import os -import pickle -import shutil - -import numpy as np -import pandas as pd - -from metagpt.ext.sela.data.custom_task import ( - get_mle_bench_requirements, - get_mle_task_id, -) -from metagpt.ext.sela.data.dataset import ( - generate_task_requirement, - get_split_dataset_path, -) -from metagpt.ext.sela.evaluation.evaluation import evaluate_score -from metagpt.ext.sela.experimenter import Experimenter, TimeoutException -from metagpt.ext.sela.insights.instruction_generator import InstructionGenerator -from metagpt.ext.sela.utils import get_exp_pool_path, load_execute_notebook, mcts_logger -from metagpt.tools.tool_recommend import ToolRecommender -from metagpt.utils.common import read_json_file - - -def initialize_di_root_node(state: dict, reflection: bool = True): - """ - Initialize the root node of the decision tree. - - Args: - state (dict): The initial state of the tree, containing: - - task (str): The task to be performed (e.g., "titanic"). - - work_dir (str): The working directory. - - node_dir (str): The directory for the node. - - dataset_config (dict): The configuration of the dataset. - - datasets_dir (str): The directory of the datasets. - - exp_pool_path (str): The path to the experiment pool. - - requirement (str): The requirement for the task. - - has_run (bool): Whether the task has run. - - start_task_id (int): The ID of the starting task. - - low_is_better (bool): Whether a lower score is better. - - role_timeout (int): The timeout for the role. - - external_eval (bool): Whether to use external evaluation. - - custom_dataset_dir (str): The directory of the custom dataset. - reflection (bool, optional): Whether to use reflection. Defaults to True. - - Returns: - tuple: A tuple containing the Experimenter role and the root Node. - """ - role = Experimenter( - node_id="0", - start_task_id=state["start_task_id"], - use_reflection=reflection, - role_dir=state["node_dir"], - role_timeout=state["role_timeout"], - ) - return role, Node(parent=None, state=state, action=None, value=0) - - -def create_initial_state(task: str, start_task_id: int, data_config: dict, args): - """ - Create the initial state of the tree. - - Args: - task (str): The task to be performed. - start_task_id (int): The ID of the starting task. - data_config (dict): The configuration of the data. - Expected keys: 'datasets', 'work_dir', 'role_dir'. - args (Namespace): The arguments passed to the program. - Expected attributes: 'external_eval', 'custom_dataset_dir', 'special_instruction', 'name', 'low_is_better', 'role_timeout'. - - Returns: - dict: The initial state of the tree. - """ - external_eval = args.external_eval - - if args.custom_dataset_dir: - dataset_config = None - datasets_dir = args.custom_dataset_dir - requirement = get_mle_bench_requirements( - args.custom_dataset_dir, data_config, special_instruction=args.special_instruction - ) - exp_pool_path = None - # external_eval = False # make sure external eval is false if custom dataset is used - task = get_mle_task_id(args.custom_dataset_dir) - else: - dataset_config = data_config["datasets"][task] - if dataset_config["metric"] == "rmse": - args.low_is_better = True - datasets_dir = get_split_dataset_path(task, data_config) - requirement = generate_task_requirement( - task, data_config, is_di=True, special_instruction=args.special_instruction - ) - exp_pool_path = get_exp_pool_path(task, data_config, pool_name="ds_analysis_pool") - - initial_state = { - "task": task, - "work_dir": data_config["work_dir"], - "node_dir": os.path.join(data_config["work_dir"], data_config["role_dir"], f"{task}{args.name}"), - "dataset_config": dataset_config, - "datasets_dir": datasets_dir, # won't be used if external eval is used - "exp_pool_path": exp_pool_path, - "requirement": requirement, - "has_run": False, - "start_task_id": start_task_id, - "low_is_better": args.low_is_better, - "role_timeout": args.role_timeout, - "external_eval": external_eval, - "custom_dataset_dir": args.custom_dataset_dir, - } - os.makedirs(initial_state["node_dir"], exist_ok=True) - return initial_state - - -class Node: - state: dict = {} - action: str = None - value: float = 0 - visited: int = 0 - children: list = [] - normalized_reward: dict = {"train_score": 0, "dev_score": 0, "test_score": 0} - parent = None - - def __init__( - self, parent=None, state: dict = None, action: str = None, value: float = 0, max_depth: int = 4, **kwargs - ): - self.state = state - self.action = action - self.value = value - self.raw_value = 0 - self.raw_reward = dict() - self.parent = parent - self.children = [] - self.max_depth = max_depth - self.depth = self.generate_depth() - self.id = self.generate_id() - if self.parent is not None: - self.save_node() - - def avg_value(self): - if self.visited == 0: - return 0 - return self.value / self.visited - - def __hash__(self): - return hash(self.id) - - def save_node(self): - os.makedirs(self.state["node_dir"], exist_ok=True) - with open(os.path.join(self.state["node_dir"], f"Node-{self.id}.pkl"), "wb") as f: - pickle.dump(self, f) - - def load_node(self): - with open(os.path.join(self.state["node_dir"], f"Node-{self.id}.pkl"), "rb") as f: - return pickle.load(f) - - def get_depth(self): - return self.depth - - def get_node_dir(self): - return self.state["node_dir"] - - def generate_depth(self): - if self.parent is None: - return 0 - else: - return self.parent.depth + 1 - - def generate_id(self): - if self.parent is None: - return "0" - else: - num_sibling = len(self.parent.children) - return f"{self.parent.id}-{num_sibling}" - - def is_terminal(self): - return int(self.state["start_task_id"]) == self.max_depth + 1 # TODO: Check if this is correct or +1 - - def is_fully_expanded(self): - return len(self.children) > 0 - - def add_child(self, child_node): - self.children.append(child_node) - - def update(self, reward: dict, child_node=None): - if child_node is not None: - child_role = child_node.load_role() - role = self.load_role() - role.update_til_start_task(child_role) - role.save_state() - else: - self.raw_value = reward["test_score"] - self.value += reward["score"] - self.visited += 1 - self.save_node() - - def get_role_path(self): - fname = f"Node-{self.id}.json" - role_path = os.path.join(self.state["node_dir"], fname) - return role_path - - def load_role(self): - role_dict = read_json_file(self.get_role_path()) - if role_dict.get("tool_recommender") is None: - role_dict["tool_recommender"] = ToolRecommender() - elif isinstance(role_dict.get("tool_recommender", {}).get("tools"), dict): - role_dict["tool_recommender"]["tools"] = list(role_dict["tool_recommender"]["tools"].keys()) - role = Experimenter(**role_dict) - if self.parent is not None: # TODO: Check this - parent_role = self.parent.load_role() - role.update_til_start_task(parent_role, backward=False) - role.remap_tasks() - return role - - def save_new_role(self, role: Experimenter): - role.node_id = self.id - role.start_task_id = self.state["start_task_id"] - role.state_saved = False - role.change_next_instruction(self.action) - mcts_logger.log("MCTS", f"Saving new role: {role.node_id}") - role = role.model_copy() - role.save_state(static_save=True) - - async def expand(self, max_children: int, instruction_generator: InstructionGenerator): - if self.is_fully_expanded(): - return - role = self.load_role() - original_instruction = role.get_next_instruction() - insights = await instruction_generator.generate_new_instructions( - task_id=role.start_task_id + 1, - original_instruction=original_instruction, - max_num=max_children, - ) - new_state = self.state.copy() - new_state["start_task_id"] += 1 - for insight in insights: - new_role = role.model_copy() - node = Node(parent=self, state=new_state, action=insight, value=0) - node.save_new_role(new_role) - self.add_child(node) - - def get_predictions_path(self, split): - return os.path.join(self.state["node_dir"], f"Node-{self.id}-{split}_predictions.csv") - - def get_and_move_predictions(self, split): - if not os.path.exists(self.get_predictions_path(split)): - pred_path = os.path.join(self.state["work_dir"], self.state["task"], f"{split}_predictions.csv") - shutil.copy(pred_path, self.get_predictions_path(split)) - os.remove(pred_path) - return pd.read_csv(self.get_predictions_path(split)) - - def get_gt(self, split): - gt_path = os.path.join(self.state["datasets_dir"][f"{split}_target"]) - return pd.read_csv(gt_path) - - def evaluate_prediction(self, split): - preds = self.get_and_move_predictions(split)["target"] - gt = self.get_gt(split)["target"] - metric = self.state["dataset_config"]["metric"] - return evaluate_score(preds, gt, metric) - - def evaluate_simulation(self, score_dict): - if self.state["external_eval"]: # use external evaluation - scores = {"dev_score": self.evaluate_prediction("dev"), "test_score": self.evaluate_prediction("test")} - scores["score"] = scores["dev_score"] - score_dict.update(scores) - else: - self.get_and_move_predictions("dev") - self.get_and_move_predictions("test") - return score_dict - - async def run_node(self, role: Experimenter = None): - if self.is_terminal() and role is not None: - if role.state_saved: - return self.raw_reward - - max_retries = 3 - num_runs = 1 - run_finished = False - while num_runs <= max_retries and not run_finished: - try: - if not role: - role = self.load_role() - await load_execute_notebook(role) # execute previous notebook's code - await role.run(with_message="continue") - else: - await role.run(with_message=self.state["requirement"]) - score_dict = await role.get_score() - score_dict = self.evaluate_simulation(score_dict) - self.raw_reward = score_dict - run_finished = True - except TimeoutException as e: - mcts_logger.log("MCTS", f"Role-level timeout: {e}") - break - except Exception as e: - mcts_logger.log("MCTS", f"Error in running the role: {e}") - num_runs += 1 - - if not run_finished: - mcts_logger.log("MCTS", f"Role {role.node_id} failed to run") - if self.state["low_is_better"]: - score_dict = {"test_score": np.inf, "dev_score": np.inf, "score": np.inf} - else: - score_dict = {"test_score": 0, "dev_score": 0, "score": 0} - self.raw_reward = score_dict - if self.state["low_is_better"]: - # normalized the score to be between 0 and 1, and higher is better - def normalize_score(score): - if score == -1: - return 0 - return 1 / (1 + score) - - score_dict = {k: normalize_score(v) for k, v in score_dict.items()} - self.normalized_reward = score_dict - result_dict = role.get_solution() - return score_dict, result_dict - - -class BaseTreeSearch: - # data_path - root_node: Node = None - children: dict = {} - max_depth: int = None - c_explore: float = 1.4 - c_unvisited: float = 0.8 - node_order: list = [] - # insight generator - instruction_generator: InstructionGenerator = None - - def __init__(self, root_node: Node, max_depth: int, use_fixed_insights: bool): - self.root_node = root_node - self.max_depth = max_depth - self.use_fixed_insights = use_fixed_insights - - def select(self, node: Node): - node = self.best_child() - mcts_logger.log("MCTS", f"Selected node id: {node.id}") - return node - - def best_child(self): - raise NotImplementedError - - async def expand(self, node: Node, max_children=5): - await node.expand(max_children, self.instruction_generator) - if node not in self.children or not self.children[node]: - self.children[node] = node.children - return node.children - - async def simulate(self, node: Node, role=None): - "Returns the reward for a random simulation (to completion) of `node`" - mcts_logger.log("MCTS", f"Start simulating node {node.id}:") - while node.children: - node = np.random.choice(node.children) - reward, result_dict = await node.run_node(role) - mcts_logger.log("MCTS", f"Simulated node's reward: {reward}") - # TODO: add new insights - return reward - - def backpropagate(self, node: Node, reward: dict): - child_node = node - node.update(reward) - node = node.parent - while node is not None: - node.update(reward, child_node) - node, child_node = node.parent, node - - def best_path(self, root: Node): - best_child = root - global_best_score = root.normalized_reward["test_score"] - dev_best_score = root.normalized_reward["dev_score"] - - def bfs(node: Node, best_score: float, best_child: Node, split: str): - assert split in ["test_score", "dev_score"] - if node not in self.children: - return best_score, best_child - for child in self.children[node]: - score = child.normalized_reward[split] - print(child.id, split, score) - if score > best_score: - best_score = score - best_child = child - best_score, best_child = bfs(child, best_score, best_child, split) - return best_score, best_child - - _, global_best_child = bfs(root, global_best_score, best_child, "test_score") - _, dev_best_child = bfs(root, dev_best_score, best_child, "dev_score") - - return {"dev_best": dev_best_child, "global_best": global_best_child, "scores": self.get_score_order_dict()} - - def get_num_simulations(self): - return self.root_node.visited - - def save_node_order(self, node_id: str): - self.node_order.append(node_id) - with open(os.path.join(self.root_node.state["node_dir"], "node_order.json"), "w") as f: - json.dump(self.node_order, f) - - def load_node_order(self): - with open(os.path.join(self.root_node.state["node_dir"], "node_order.json"), "r") as f: - self.node_order = json.load(f) - - def get_score_order_dict(self): - scores = {"dev": [], "test": [], "dev_raw": [], "test_raw": []} - for node_id in self.node_order: - node = Node(parent=None, state=self.root_node.state, action=None, value=0) - node.id = node_id - node = node.load_node() - scores["dev"].append(node.normalized_reward["dev_score"]) - scores["test"].append(node.normalized_reward["test_score"]) - scores["dev_raw"].append(node.raw_reward["dev_score"]) - scores["test_raw"].append(node.raw_reward["test_score"]) - return scores - - async def search(self, state: dict, args): - reflection = args.reflection - load_tree = args.load_tree - rollouts = args.rollouts - from_scratch = args.from_scratch - role, root = initialize_di_root_node(state, reflection=reflection) - self.root_node = root - self.instruction_generator = InstructionGenerator( - state=state, use_fixed_insights=self.use_fixed_insights, from_scratch=from_scratch - ) - await self.instruction_generator.initialize() - - tree_loaded = False - if load_tree: - tree_loaded = self.load_tree() - mcts_logger.log("MCTS", f"Number of simulations: {self.get_num_simulations()}") - mcts_logger.log("MCTS", f"Tree loaded: {tree_loaded}") - - if not tree_loaded: - rollouts -= 2 # 2 rollouts for the initial tree - if rollouts < 0: - raise ValueError("Rollouts must be greater than 2 if there is no tree to load") - self.children[root] = [] - reward = await self.simulate(root, role) - self.backpropagate(root, reward) - node, reward = await self.expand_and_simulate(root) - # self.backpropagate(node, reward) - self.save_node_order(root.id) - self.save_node_order(node.id) - else: - root = self.root_node - self.load_node_order() - - for _ in range(rollouts): # number of rollouts - mcts_logger.log("MCTS", f"Start the next rollout {_+1}") - node = self.select(root) - if node.is_terminal(): - if node.raw_value == 0: - reward = await self.simulate(node) - else: - reward = {"test_score": node.raw_value, "score": node.raw_reward["score"]} - mcts_logger.log("MCTS", f"Terminal node's reward: {reward}") - self.backpropagate(node, reward) - else: - node, reward = await self.expand_and_simulate(node) - # self.backpropagate(node, reward) - self.save_node_order(node.id) - return self.best_path(root) - - async def expand_and_simulate(self, node: Node): - # Expand and randomly select a child node, then simulate it - if node.visited > 0: - children = await self.expand(node) - node = np.random.choice(children) - reward = await self.simulate(node) - self.backpropagate(node, reward) - return node, reward - - def load_tree(self): - def load_children_node(node: Node): - mcts_logger.log("MCTS", f"Load node {node.id}'s child: {node.children}") - if node.is_terminal() or not node.children: - return - for child in node.children: - child.load_node() - self.children[child] = child.children - load_children_node(child) - - # Load all pkl files in the node_dir - all_pkl_files = os.listdir(self.root_node.state["node_dir"]) - all_pkl_files = [f for f in all_pkl_files if f.endswith(".pkl")] - if os.path.exists(os.path.join(self.root_node.state["node_dir"], "Node-0.pkl")): - with open(os.path.join(self.root_node.state["node_dir"], "Node-0.pkl"), "rb") as f: - self.root_node = pickle.load(f) - self.children[self.root_node] = self.root_node.children - load_children_node(self.root_node) - - if self.children: - return True - return False diff --git a/metagpt/ext/sela/utils.py b/metagpt/ext/sela/utils.py deleted file mode 100644 index 21b311e7f3..0000000000 --- a/metagpt/ext/sela/utils.py +++ /dev/null @@ -1,130 +0,0 @@ -import os -import re -from datetime import datetime -from pathlib import Path - -import nbformat -import yaml -from loguru import logger as _logger -from nbclient import NotebookClient -from nbformat.notebooknode import NotebookNode - -from metagpt.roles.role import Role - - -def load_data_config(file_path="data.yaml"): - with open(file_path, "r") as stream: - data_config = yaml.safe_load(stream) - return data_config - - -DATASET_CONFIG = load_data_config("datasets.yaml") -DATA_CONFIG = load_data_config() -DATA_CONFIG["datasets"] = DATASET_CONFIG["datasets"] - - -def get_mcts_logger(): - logfile_level = "DEBUG" - name: str = None - current_date = datetime.now() - formatted_date = current_date.strftime("%Y%m%d") - log_name = f"{name}_{formatted_date}" if name else formatted_date # name a log with prefix name - - # _logger.remove() - _logger.level("MCTS", color="", no=25) - # _logger.add(sys.stderr, level=print_level) - _logger.add(Path(DATA_CONFIG["work_dir"]) / DATA_CONFIG["role_dir"] / f"{log_name}.txt", level=logfile_level) - _logger.propagate = False - return _logger - - -mcts_logger = get_mcts_logger() - - -def get_exp_pool_path(task_name, data_config, pool_name="analysis_pool"): - datasets_dir = data_config["datasets_dir"] - if task_name in data_config["datasets"]: - dataset = data_config["datasets"][task_name] - data_path = os.path.join(datasets_dir, dataset["dataset"]) - else: - raise ValueError( - f"Dataset {task_name} not found in config file. Available datasets: {data_config['datasets'].keys()}" - ) - exp_pool_path = os.path.join(data_path, f"{pool_name}.json") - if not os.path.exists(exp_pool_path): - return None - return exp_pool_path - - -def change_plan(role, plan): - print(f"Change next plan to: {plan}") - tasks = role.planner.plan.tasks - finished = True - for i, task in enumerate(tasks): - if not task.code: - finished = False - break - if not finished: - tasks[i].plan = plan - return finished - - -def is_cell_to_delete(cell: NotebookNode) -> bool: - if "outputs" in cell: - for output in cell["outputs"]: - if output and "traceback" in output: - return True - return False - - -def process_cells(nb: NotebookNode) -> NotebookNode: - new_cells = [] - i = 1 - for cell in nb["cells"]: - if cell["cell_type"] == "code" and not is_cell_to_delete(cell): - cell["execution_count"] = i - new_cells.append(cell) - i = i + 1 - nb["cells"] = new_cells - return nb - - -def save_notebook(role: Role, save_dir: str = "", name: str = "", save_to_depth=False): - save_dir = Path(save_dir) - tasks = role.planner.plan.tasks - nb = process_cells(role.execute_code.nb) - os.makedirs(save_dir, exist_ok=True) - file_path = save_dir / f"{name}.ipynb" - nbformat.write(nb, file_path) - - if save_to_depth: - clean_file_path = save_dir / f"{name}_clean.ipynb" - codes = [task.code for task in tasks if task.code] - clean_nb = nbformat.v4.new_notebook() - for code in codes: - clean_nb.cells.append(nbformat.v4.new_code_cell(code)) - nbformat.write(clean_nb, clean_file_path) - - -async def load_execute_notebook(role): - tasks = role.planner.plan.tasks - codes = [task.code for task in tasks if task.code] - executor = role.execute_code - executor.nb = nbformat.v4.new_notebook() - executor.nb_client = NotebookClient(executor.nb, timeout=role.role_timeout) - # await executor.build() - for code in codes: - outputs, success = await executor.run(code) - print(f"Execution success: {success}, Output: {outputs}") - print("Finish executing the loaded notebook") - return executor - - -def clean_json_from_rsp(text): - pattern = r"```json(.*?)```" - matches = re.findall(pattern, text, re.DOTALL) - if matches: - json_str = "\n".join(matches) - return json_str - else: - return "" diff --git a/metagpt/ext/spo/__init__.py b/metagpt/ext/spo/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/metagpt/ext/spo/app.py b/metagpt/ext/spo/app.py deleted file mode 100644 index 20895a420a..0000000000 --- a/metagpt/ext/spo/app.py +++ /dev/null @@ -1,301 +0,0 @@ -import asyncio -from pathlib import Path -from typing import Dict - -import streamlit as st -import yaml -from loguru import logger as _logger - -from metagpt.const import METAGPT_ROOT -from metagpt.ext.spo.components.optimizer import PromptOptimizer -from metagpt.ext.spo.utils.llm_client import SPO_LLM, RequestType - - -def load_yaml_template(template_path: Path) -> Dict: - if template_path.exists(): - with open(template_path, "r", encoding="utf-8") as f: - return yaml.safe_load(f) - return {"prompt": "", "requirements": "", "count": None, "qa": [{"question": "", "answer": ""}]} - - -def save_yaml_template(template_path: Path, data: Dict) -> None: - template_format = { - "prompt": str(data.get("prompt", "")), - "requirements": str(data.get("requirements", "")), - "count": data.get("count"), - "qa": [ - {"question": str(qa.get("question", "")).strip(), "answer": str(qa.get("answer", "")).strip()} - for qa in data.get("qa", []) - ], - } - - template_path.parent.mkdir(parents=True, exist_ok=True) - - with open(template_path, "w", encoding="utf-8") as f: - yaml.dump(template_format, f, allow_unicode=True, sort_keys=False, default_flow_style=False, indent=2) - - -def display_optimization_results(result_data): - for result in result_data: - round_num = result["round"] - success = result["succeed"] - prompt = result["prompt"] - - with st.expander(f"Round {round_num} {':white_check_mark:' if success else ':x:'}"): - st.markdown("**Prompt:**") - st.code(prompt, language="text") - st.markdown("
", unsafe_allow_html=True) - - col1, col2 = st.columns(2) - with col1: - st.markdown(f"**Status:** {'Success ✅ ' if success else 'Failed ❌ '}") - with col2: - st.markdown(f"**Tokens:** {result['tokens']}") - - st.markdown("**Answers:**") - for idx, answer in enumerate(result["answers"]): - st.markdown(f"**Question {idx + 1}:**") - st.text(answer["question"]) - st.markdown("**Answer:**") - st.text(answer["answer"]) - st.markdown("---") - - # Summary - success_count = sum(1 for r in result_data if r["succeed"]) - total_rounds = len(result_data) - - st.markdown("### Summary") - col1, col2 = st.columns(2) - with col1: - st.metric("Total Rounds", total_rounds) - with col2: - st.metric("Successful Rounds", success_count) - - -def main(): - if "optimization_results" not in st.session_state: - st.session_state.optimization_results = [] - - st.markdown( - """ -
-
-

SPO | Self-Supervised Prompt Optimization 🤖

-
-
- - Paper - - - GitHub - - A framework for self-supervised prompt optimization -
-
- """, - unsafe_allow_html=True, - ) - - # Sidebar for configurations - with st.sidebar: - st.header("Configuration") - - # Template Selection/Creation - settings_path = Path("metagpt/ext/spo/settings") - existing_templates = [f.stem for f in settings_path.glob("*.yaml")] - - template_mode = st.radio("Template Mode", ["Use Existing", "Create New"]) - - if template_mode == "Use Existing": - template_name = st.selectbox("Select Template", existing_templates) - else: - template_name = st.text_input("New Template Name") - if template_name and not template_name.endswith(".yaml"): - template_name = f"{template_name}" - - # LLM Settings - st.subheader("LLM Settings") - opt_model = st.selectbox( - "Optimization Model", ["claude-3-5-sonnet-20240620", "gpt-4o", "gpt-4o-mini", "deepseek-chat"], index=0 - ) - opt_temp = st.slider("Optimization Temperature", 0.0, 1.0, 0.7) - - eval_model = st.selectbox( - "Evaluation Model", ["gpt-4o-mini", "claude-3-5-sonnet-20240620", "gpt-4o", "deepseek-chat"], index=0 - ) - eval_temp = st.slider("Evaluation Temperature", 0.0, 1.0, 0.3) - - exec_model = st.selectbox( - "Execution Model", ["gpt-4o-mini", "claude-3-5-sonnet-20240620", "gpt-4o", "deepseek-chat"], index=0 - ) - exec_temp = st.slider("Execution Temperature", 0.0, 1.0, 0.0) - - # Optimizer Settings - st.subheader("Optimizer Settings") - initial_round = st.number_input("Initial Round", 1, 100, 1) - max_rounds = st.number_input("Maximum Rounds", 1, 100, 10) - - # Main content area - st.header("Template Configuration") - - if template_name: - template_path = settings_path / f"{template_name}.yaml" - template_data = load_yaml_template(template_path) - - if "current_template" not in st.session_state or st.session_state.current_template != template_name: - st.session_state.current_template = template_name - st.session_state.qas = template_data.get("qa", []) - - # Edit template sections - prompt = st.text_area("Prompt", template_data.get("prompt", ""), height=100) - requirements = st.text_area("Requirements", template_data.get("requirements", ""), height=100) - - # qa section - st.subheader("Q&A Examples") - - # Add new qa button - if st.button("Add New Q&A"): - st.session_state.qas.append({"question": "", "answer": ""}) - - # Edit qas - new_qas = [] - for i in range(len(st.session_state.qas)): - st.markdown(f"**QA #{i + 1}**") - col1, col2, col3 = st.columns([45, 45, 10]) - - with col1: - question = st.text_area( - f"Question {i + 1}", st.session_state.qas[i].get("question", ""), key=f"q_{i}", height=100 - ) - with col2: - answer = st.text_area( - f"Answer {i + 1}", st.session_state.qas[i].get("answer", ""), key=f"a_{i}", height=100 - ) - with col3: - if st.button("🗑️", key=f"delete_{i}"): - st.session_state.qas.pop(i) - st.rerun() - - new_qas.append({"question": question, "answer": answer}) - - # Save template button - if st.button("Save Template"): - new_template_data = {"prompt": prompt, "requirements": requirements, "count": None, "qa": new_qas} - - save_yaml_template(template_path, new_template_data) - - st.session_state.qas = new_qas - st.success(f"Template saved to {template_path}") - - st.subheader("Current Template Preview") - preview_data = {"qa": new_qas, "requirements": requirements, "prompt": prompt} - st.code(yaml.dump(preview_data, allow_unicode=True), language="yaml") - - st.subheader("Optimization Logs") - log_container = st.empty() - - class StreamlitSink: - def write(self, message): - current_logs = st.session_state.get("logs", []) - current_logs.append(message.strip()) - st.session_state.logs = current_logs - - log_container.code("\n".join(current_logs), language="plaintext") - - streamlit_sink = StreamlitSink() - _logger.remove() - - def prompt_optimizer_filter(record): - return "optimizer" in record["name"].lower() - - _logger.add( - streamlit_sink.write, - format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {name}:{function}:{line} - {message}", - filter=prompt_optimizer_filter, - ) - _logger.add(METAGPT_ROOT / "logs/{time:YYYYMMDD}.txt", level="DEBUG") - - # Start optimization button - if st.button("Start Optimization"): - try: - # Initialize LLM - SPO_LLM.initialize( - optimize_kwargs={"model": opt_model, "temperature": opt_temp}, - evaluate_kwargs={"model": eval_model, "temperature": eval_temp}, - execute_kwargs={"model": exec_model, "temperature": exec_temp}, - ) - - # Create optimizer instance - optimizer = PromptOptimizer( - optimized_path="workspace", - initial_round=initial_round, - max_rounds=max_rounds, - template=f"{template_name}.yaml", - name=template_name, - ) - - # Run optimization with progress bar - with st.spinner("Optimizing prompts..."): - optimizer.optimize() - - st.success("Optimization completed!") - - st.header("Optimization Results") - - prompt_path = optimizer.root_path / "prompts" - result_data = optimizer.data_utils.load_results(prompt_path) - - st.session_state.optimization_results = result_data - - except Exception as e: - st.error(f"An error occurred: {str(e)}") - _logger.error(f"Error during optimization: {str(e)}") - - if st.session_state.optimization_results: - st.header("Optimization Results") - display_optimization_results(st.session_state.optimization_results) - - st.markdown("---") - st.subheader("Test Optimized Prompt") - col1, col2 = st.columns(2) - - with col1: - test_prompt = st.text_area("Optimized Prompt", value="", height=200, key="test_prompt") - - with col2: - test_question = st.text_area("Your Question", value="", height=200, key="test_question") - - if st.button("Test Prompt"): - if test_prompt and test_question: - try: - with st.spinner("Generating response..."): - SPO_LLM.initialize( - optimize_kwargs={"model": opt_model, "temperature": opt_temp}, - evaluate_kwargs={"model": eval_model, "temperature": eval_temp}, - execute_kwargs={"model": exec_model, "temperature": exec_temp}, - ) - - llm = SPO_LLM.get_instance() - messages = [{"role": "user", "content": f"{test_prompt}\n\n{test_question}"}] - - async def get_response(): - return await llm.responser(request_type=RequestType.EXECUTE, messages=messages) - - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - try: - response = loop.run_until_complete(get_response()) - finally: - loop.close() - - st.subheader("Response:") - st.markdown(response) - - except Exception as e: - st.error(f"Error generating response: {str(e)}") - else: - st.warning("Please enter both prompt and question.") - - -if __name__ == "__main__": - main() diff --git a/metagpt/ext/spo/components/__init__.py b/metagpt/ext/spo/components/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/metagpt/ext/spo/components/evaluator.py b/metagpt/ext/spo/components/evaluator.py deleted file mode 100644 index 952ef211ba..0000000000 --- a/metagpt/ext/spo/components/evaluator.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 8/23/2024 10:00 AM -# @Author : all -# @Desc : Evaluation for different datasets -import asyncio -import random -from typing import Any, Dict - -from metagpt.ext.spo.prompts.evaluate_prompt import EVALUATE_PROMPT -from metagpt.ext.spo.utils import load -from metagpt.ext.spo.utils.llm_client import SPO_LLM, RequestType, extract_content -from metagpt.logs import logger - - -class QuickExecute: - """ - Execute Prompt - """ - - def __init__(self, prompt: str): - self.prompt = prompt - self.llm = SPO_LLM.get_instance() - - async def prompt_execute(self) -> tuple[Any]: - _, _, qa, _ = load.load_meta_data() - answers = [] - - async def fetch_answer(q: str) -> Dict[str, Any]: - messages = [{"role": "user", "content": f"{self.prompt}\n\n{q}"}] - try: - answer = await self.llm.responser(request_type=RequestType.EXECUTE, messages=messages) - return {"question": q, "answer": answer} - except Exception as e: - return {"question": q, "answer": str(e)} - - tasks = [fetch_answer(item["question"]) for item in qa] - answers = await asyncio.gather(*tasks) - - return answers - - -class QuickEvaluate: - """ - Complete the evaluation for different answers here. - """ - - def __init__(self): - self.llm = SPO_LLM.get_instance() - - async def prompt_evaluate(self, samples: dict, new_samples: dict) -> bool: - _, requirement, qa, _ = load.load_meta_data() - - if random.random() < 0.5: - samples, new_samples = new_samples, samples - is_swapped = True - else: - is_swapped = False - - messages = [ - { - "role": "user", - "content": EVALUATE_PROMPT.format( - requirement=requirement, sample=samples, new_sample=new_samples, answers=str(qa) - ), - } - ] - - try: - response = await self.llm.responser(request_type=RequestType.EVALUATE, messages=messages) - choose = extract_content(response, "choose") - return choose == "A" if is_swapped else choose == "B" - - except Exception as e: - logger.error(e) - return False diff --git a/metagpt/ext/spo/components/optimizer.py b/metagpt/ext/spo/components/optimizer.py deleted file mode 100644 index 0ce588f44b..0000000000 --- a/metagpt/ext/spo/components/optimizer.py +++ /dev/null @@ -1,136 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 8/12/2024 22:00 PM -# @Author : issac -# @Desc : optimizer for prompt - -import asyncio -from pathlib import Path -from typing import List - -from metagpt.ext.spo.prompts.optimize_prompt import PROMPT_OPTIMIZE_PROMPT -from metagpt.ext.spo.utils import load -from metagpt.ext.spo.utils.data_utils import DataUtils -from metagpt.ext.spo.utils.evaluation_utils import EvaluationUtils -from metagpt.ext.spo.utils.llm_client import SPO_LLM, RequestType, extract_content -from metagpt.ext.spo.utils.prompt_utils import PromptUtils -from metagpt.logs import logger - - -class PromptOptimizer: - def __init__( - self, - optimized_path: str = None, - initial_round: int = 1, - max_rounds: int = 10, - name: str = "", - template: str = "", - ) -> None: - self.name = name - self.root_path = Path(optimized_path) / self.name - self.top_scores = [] - self.round = initial_round - self.max_rounds = max_rounds - self.template = template - - self.prompt_utils = PromptUtils(self.root_path) - self.data_utils = DataUtils(self.root_path) - self.evaluation_utils = EvaluationUtils(self.root_path) - self.llm = SPO_LLM.get_instance() - - def optimize(self): - for opt_round in range(self.max_rounds): - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - loop.run_until_complete(self._optimize_prompt()) - self.round += 1 - - self.show_final_result() - - def show_final_result(self): - best_round = self.data_utils.get_best_round() - - logger.info("\n" + "=" * 50) - logger.info("\n🏆 OPTIMIZATION COMPLETED - FINAL RESULTS 🏆\n") - logger.info(f"\n📌 Best Performing Round: {best_round['round']}") - logger.info(f"\n🎯 Final Optimized Prompt:\n{best_round['prompt']}") - logger.info("\n" + "=" * 50 + "\n") - - async def _optimize_prompt(self): - prompt_path = self.root_path / "prompts" - load.set_file_name(self.template) - data = self.data_utils.load_results(prompt_path) - - if self.round == 1: - await self._handle_first_round(prompt_path, data) - return - - directory = self.prompt_utils.create_round_directory(prompt_path, self.round) - new_prompt = await self._generate_optimized_prompt() - self.prompt = new_prompt - - logger.info(f"\nRound {self.round} Prompt: {self.prompt}\n") - self.prompt_utils.write_prompt(directory, prompt=self.prompt) - - success, answers = await self._evaluate_new_prompt(prompt_path, data, directory) - self._log_optimization_result(success) - - return self.prompt - - async def _handle_first_round(self, prompt_path: Path, data: List[dict]) -> None: - logger.info("\n⚡ RUNNING Round 1 PROMPT ⚡\n") - directory = self.prompt_utils.create_round_directory(prompt_path, self.round) - - prompt, _, _, _ = load.load_meta_data() - self.prompt = prompt - self.prompt_utils.write_prompt(directory, prompt=self.prompt) - - new_samples = await self.evaluation_utils.execute_prompt(self, directory) - _, answers = await self.evaluation_utils.evaluate_prompt( - self, None, new_samples, path=prompt_path, data=data, initial=True - ) - self.prompt_utils.write_answers(directory, answers=answers) - - async def _generate_optimized_prompt(self): - _, requirements, qa, count = load.load_meta_data() - samples = self.data_utils.get_best_round() - - logger.info(f"\n🚀Round {self.round} OPTIMIZATION STARTING 🚀\n") - logger.info(f"\nSelecting prompt for round {samples['round']} and advancing to the iteration phase\n") - - golden_answer = self.data_utils.list_to_markdown(qa) - best_answer = self.data_utils.list_to_markdown(samples["answers"]) - - optimize_prompt = PROMPT_OPTIMIZE_PROMPT.format( - prompt=samples["prompt"], - answers=best_answer, - requirements=requirements, - golden_answers=golden_answer, - count=count, - ) - - response = await self.llm.responser( - request_type=RequestType.OPTIMIZE, messages=[{"role": "user", "content": optimize_prompt}] - ) - - modification = extract_content(response, "modification") - logger.info(f"Modification of {self.round} round: {modification}") - - prompt = extract_content(response, "prompt") - return prompt if prompt else "" - - async def _evaluate_new_prompt(self, prompt_path, data, directory): - logger.info("\n⚡ RUNNING OPTIMIZED PROMPT ⚡\n") - new_samples = await self.evaluation_utils.execute_prompt(self, directory) - - logger.info("\n📊 EVALUATING OPTIMIZED PROMPT 📊\n") - samples = self.data_utils.get_best_round() - success, answers = await self.evaluation_utils.evaluate_prompt( - self, samples, new_samples, path=prompt_path, data=data, initial=False - ) - - self.prompt_utils.write_answers(directory, answers=answers) - return success, answers - - def _log_optimization_result(self, success): - logger.info("\n🎯 OPTIMIZATION RESULT 🎯\n") - logger.info(f"\nRound {self.round} Optimization: {'✅ SUCCESS' if success else '❌ FAILED'}\n") diff --git a/metagpt/ext/spo/prompts/evaluate_prompt.py b/metagpt/ext/spo/prompts/evaluate_prompt.py deleted file mode 100644 index 80a9b093bf..0000000000 --- a/metagpt/ext/spo/prompts/evaluate_prompt.py +++ /dev/null @@ -1,20 +0,0 @@ -EVALUATE_PROMPT = """ -Based on the original requirements, evaluate the two responses, A and B, and determine which one better meets the requirements. If a reference answer is provided, strictly follow the format/content of the reference answer. - -# Requirement -{requirement} - -# A -{sample} - -# B -{new_sample} - -# Golden answer -{answers} - -Provide your analysis and the choice you believe is better, using XML tags to encapsulate your response. - -Some analysis -A/B (the better answer in your opinion) -""" diff --git a/metagpt/ext/spo/prompts/optimize_prompt.py b/metagpt/ext/spo/prompts/optimize_prompt.py deleted file mode 100644 index f6ca81e334..0000000000 --- a/metagpt/ext/spo/prompts/optimize_prompt.py +++ /dev/null @@ -1,32 +0,0 @@ -PROMPT_OPTIMIZE_PROMPT = """ -You are building a prompt to address user requirement. Based on the given prompt, -please reconstruct and optimize it. You can add, modify, or delete prompts. Please include a single modification in -XML tags in your reply. During the optimization, you can incorporate any thinking models. -This is a prompt that performed excellently in a previous iteration. You must make further optimizations and improvements based on this prompt. The modified prompt must differ from the provided example. - -requirements: -``` -{requirements} -``` - -reference prompt: -``` -{prompt} -``` - -The execution result of this reference prompt is(some cases): -``` -{answers} -``` - -The best answer we expect(some cases): -``` -{golden_answers} -``` - -Provide your analysis, optimization points, and the complete optimized prompt using the following XML format: - -Analyze what drawbacks exist in the results produced by the reference prompt and how to improve them. -Summarize the key points for improvement in one sentence -Provide the complete optimized prompt {count} -""" diff --git a/metagpt/ext/spo/settings/Navigate.yaml b/metagpt/ext/spo/settings/Navigate.yaml deleted file mode 100644 index 3b20a6de97..0000000000 --- a/metagpt/ext/spo/settings/Navigate.yaml +++ /dev/null @@ -1,47 +0,0 @@ -prompt: | - Please think step by step. - Ensure the response concludes with the answer in the XML format: - [Yes or No]. - -requirements: | - Must put the final answer at the end with XML. ((Yes or No),such as Yes) - The provided prompt needs to adapt to all current types of questions. - -count: None - -qa: - - question: | - If you follow these instructions, do you return to the starting point? Always face forward. Take 7 steps left. Take 2 steps backward. Take 7 steps backward. Take 7 steps backward. Take 3 steps forward. - Options: - - Yes - - No - - answer: | - A lot of thinking and analysis processes. - ... - Final Answer: - (Yes or No) - - - question: | - If you follow these instructions, do you return to the starting point? Always face forward. Take 6 steps backward. Take 8 steps left. Take 3 steps right. Take 7 steps forward. Take 3 steps right. Take 9 steps right. Take 1 step backward. Take 7 steps left. - Options: - - Yes - - No - - answer: | - A lot of thinking and analysis processes. - ... - Final Answer: - (Yes or No) - - - question: | - If you follow these instructions, do you return to the starting point? Turn left. Turn left. Take 6 steps. Take 3 steps. Turn around. Take 1 step. Take 3 steps. Take 5 steps. - Options: - - Yes - - No - - answer: | - A lot of thinking and analysis processes. - ... - Final Answer: - (Yes or No) diff --git a/metagpt/ext/spo/settings/Poem.yaml b/metagpt/ext/spo/settings/Poem.yaml deleted file mode 100644 index dba690c45b..0000000000 --- a/metagpt/ext/spo/settings/Poem.yaml +++ /dev/null @@ -1,23 +0,0 @@ -prompt: | - Create poetry in the requested style and format. - -requirements: | - None - -count: None - -qa: - - question: | - Write a modern sonnet about climate change - answer: | - None - - - question: | - Create a haiku series about New York City - answer: | - None - - - question: | - Write a free verse poem about social media - answer: | - None diff --git a/metagpt/ext/spo/utils/__init__.py b/metagpt/ext/spo/utils/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/metagpt/ext/spo/utils/data_utils.py b/metagpt/ext/spo/utils/data_utils.py deleted file mode 100644 index 17771c0213..0000000000 --- a/metagpt/ext/spo/utils/data_utils.py +++ /dev/null @@ -1,106 +0,0 @@ -import datetime -import json -from pathlib import Path -from typing import Dict, List, Union - -import pandas as pd - -from metagpt.logs import logger - - -class DataUtils: - def __init__(self, root_path: Path): - self.root_path = root_path - self.top_scores = [] - - def load_results(self, path: Path) -> list: - result_path = self.get_results_file_path(path) - if result_path.exists(): - try: - return json.loads(result_path.read_text()) - except json.JSONDecodeError: - return [] - return [] - - def get_best_round(self): - self._load_scores() - - for entry in self.top_scores: - if entry["succeed"]: - return entry - - return None - - def get_results_file_path(self, prompt_path: Path) -> Path: - return prompt_path / "results.json" - - def create_result_data(self, round: int, answers: list[dict], prompt: str, succeed: bool, tokens: int) -> dict: - now = datetime.datetime.now() - return {"round": round, "answers": answers, "prompt": prompt, "succeed": succeed, "tokens": tokens, "time": now} - - def save_results(self, json_file_path: Path, data: Union[List, Dict]): - json_path = json_file_path - json_path.write_text(json.dumps(data, default=str, indent=4)) - - def _load_scores(self): - rounds_dir = self.root_path / "prompts" - result_file = rounds_dir / "results.json" - self.top_scores = [] - - try: - if not result_file.exists(): - logger.warning(f"Results file not found at {result_file}") - return self.top_scores - - data = json.loads(result_file.read_text(encoding="utf-8")) - df = pd.DataFrame(data) - - for index, row in df.iterrows(): - self.top_scores.append( - { - "round": row["round"], - "succeed": row["succeed"], - "prompt": row["prompt"], - "answers": row["answers"], - } - ) - - self.top_scores.sort(key=lambda x: x["round"], reverse=True) - - except FileNotFoundError: - logger.error(f"Could not find results file: {result_file}") - except json.JSONDecodeError: - logger.error(f"Invalid JSON format in file: {result_file}") - except Exception as e: - logger.error(f"Unexpected error loading scores: {str(e)}") - - return self.top_scores - - def list_to_markdown(self, questions_list: list): - """ - Convert a list of question-answer dictionaries to a formatted Markdown string. - - Args: - questions_list (list): List of dictionaries containing 'question' and 'answer' keys - - Returns: - str: Formatted Markdown string - """ - markdown_text = "```\n" - - for i, qa_pair in enumerate(questions_list, 1): - # Add question section - markdown_text += f"Question {i}\n\n" - markdown_text += f"{qa_pair['question']}\n\n" - - # Add answer section - markdown_text += f"Answer {i}\n\n" - markdown_text += f"{qa_pair['answer']}\n\n" - - # Add separator between QA pairs except for the last one - if i < len(questions_list): - markdown_text += "---\n\n" - - markdown_text += "\n```" - - return markdown_text diff --git a/metagpt/ext/spo/utils/evaluation_utils.py b/metagpt/ext/spo/utils/evaluation_utils.py deleted file mode 100644 index 3fb026a21e..0000000000 --- a/metagpt/ext/spo/utils/evaluation_utils.py +++ /dev/null @@ -1,81 +0,0 @@ -import asyncio -from pathlib import Path -from typing import Any, List, Optional, Tuple - -import tiktoken - -from metagpt.ext.spo.components.evaluator import QuickEvaluate, QuickExecute -from metagpt.logs import logger - -EVALUATION_REPETITION = 4 - - -def count_tokens(sample: dict): - if not sample: - return 0 - else: - encoding = tiktoken.get_encoding("cl100k_base") - return len(encoding.encode(str(sample["answers"]))) - - -class EvaluationUtils: - def __init__(self, root_path: Path) -> None: - self.root_path = root_path - - async def execute_prompt(self, optimizer: Any, prompt_path: Path) -> dict: - optimizer.prompt = optimizer.prompt_utils.load_prompt(optimizer.round, prompt_path) - executor = QuickExecute(prompt=optimizer.prompt) - - answers = await executor.prompt_execute() - - cur_round = optimizer.round - - new_data = {"round": cur_round, "answers": answers, "prompt": optimizer.prompt} - - return new_data - - async def evaluate_prompt( - self, - optimizer: Any, - samples: Optional[dict], - new_samples: dict, - path: Path, - data: List[dict], - initial: bool = False, - ) -> Tuple[bool, dict]: - evaluator = QuickEvaluate() - new_token = count_tokens(new_samples) - - if initial is True: - succeed = True - else: - evaluation_results = [] - - evaluation_results.extend( - await asyncio.gather( - *( - evaluator.prompt_evaluate(samples=samples, new_samples=new_samples) - for _ in range(EVALUATION_REPETITION) - ) - ) - ) - - logger.info(f"Evaluation Results {evaluation_results}") - - true_count = evaluation_results.count(True) - false_count = evaluation_results.count(False) - succeed = true_count > false_count - - new_data = optimizer.data_utils.create_result_data( - new_samples["round"], new_samples["answers"], new_samples["prompt"], succeed, new_token - ) - - data.append(new_data) - - result_path = optimizer.data_utils.get_results_file_path(path) - - optimizer.data_utils.save_results(result_path, data) - - answers = new_samples["answers"] - - return succeed, answers diff --git a/metagpt/ext/spo/utils/llm_client.py b/metagpt/ext/spo/utils/llm_client.py deleted file mode 100644 index 81524d3c13..0000000000 --- a/metagpt/ext/spo/utils/llm_client.py +++ /dev/null @@ -1,107 +0,0 @@ -import asyncio -import re -from enum import Enum -from typing import Any, List, Optional - -from metagpt.configs.models_config import ModelsConfig -from metagpt.llm import LLM -from metagpt.logs import logger - - -class RequestType(Enum): - OPTIMIZE = "optimize" - EVALUATE = "evaluate" - EXECUTE = "execute" - - -class SPO_LLM: - _instance: Optional["SPO_LLM"] = None - - def __init__( - self, - optimize_kwargs: Optional[dict] = None, - evaluate_kwargs: Optional[dict] = None, - execute_kwargs: Optional[dict] = None, - ) -> None: - self.evaluate_llm = LLM(llm_config=self._load_llm_config(evaluate_kwargs)) - self.optimize_llm = LLM(llm_config=self._load_llm_config(optimize_kwargs)) - self.execute_llm = LLM(llm_config=self._load_llm_config(execute_kwargs)) - - def _load_llm_config(self, kwargs: dict) -> Any: - model = kwargs.get("model") - if not model: - raise ValueError("'model' parameter is required") - - try: - model_config = ModelsConfig.default().get(model) - if model_config is None: - raise ValueError(f"Model '{model}' not found in configuration") - - config = model_config.model_copy() - - for key, value in kwargs.items(): - if hasattr(config, key): - setattr(config, key, value) - - return config - - except AttributeError: - raise ValueError(f"Model '{model}' not found in configuration") - except Exception as e: - raise ValueError(f"Error loading configuration for model '{model}': {str(e)}") - - async def responser(self, request_type: RequestType, messages: List[dict]) -> str: - llm_mapping = { - RequestType.OPTIMIZE: self.optimize_llm, - RequestType.EVALUATE: self.evaluate_llm, - RequestType.EXECUTE: self.execute_llm, - } - - llm = llm_mapping.get(request_type) - if not llm: - raise ValueError(f"Invalid request type. Valid types: {', '.join([t.value for t in RequestType])}") - - response = await llm.acompletion(messages) - return response.choices[0].message.content - - @classmethod - def initialize(cls, optimize_kwargs: dict, evaluate_kwargs: dict, execute_kwargs: dict) -> None: - """Initialize the global instance""" - cls._instance = cls(optimize_kwargs, evaluate_kwargs, execute_kwargs) - - @classmethod - def get_instance(cls) -> "SPO_LLM": - """Get the global instance""" - if cls._instance is None: - raise RuntimeError("SPO_LLM not initialized. Call initialize() first.") - return cls._instance - - -def extract_content(xml_string: str, tag: str) -> Optional[str]: - pattern = rf"<{tag}>(.*?)" - match = re.search(pattern, xml_string, re.DOTALL) - return match.group(1).strip() if match else None - - -async def main(): - # test LLM - SPO_LLM.initialize( - optimize_kwargs={"model": "gpt-4o", "temperature": 0.7}, - evaluate_kwargs={"model": "gpt-4o-mini", "temperature": 0.3}, - execute_kwargs={"model": "gpt-4o-mini", "temperature": 0.3}, - ) - - llm = SPO_LLM.get_instance() - - # test messages - hello_msg = [{"role": "user", "content": "hello"}] - response = await llm.responser(request_type=RequestType.EXECUTE, messages=hello_msg) - logger(f"AI: {response}") - response = await llm.responser(request_type=RequestType.OPTIMIZE, messages=hello_msg) - logger(f"AI: {response}") - response = await llm.responser(request_type=RequestType.EVALUATE, messages=hello_msg) - logger(f"AI: {response}") - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/metagpt/ext/spo/utils/load.py b/metagpt/ext/spo/utils/load.py deleted file mode 100644 index 6333b2775e..0000000000 --- a/metagpt/ext/spo/utils/load.py +++ /dev/null @@ -1,48 +0,0 @@ -import random -from pathlib import Path - -import yaml - -FILE_NAME = "" -SAMPLE_K = 3 - - -def set_file_name(name: str): - global FILE_NAME - FILE_NAME = name - - -def load_meta_data(k: int = SAMPLE_K): - # load yaml file - config_path = Path(__file__).parent.parent / "settings" / FILE_NAME - - if not config_path.exists(): - raise FileNotFoundError(f"Configuration file '{FILE_NAME}' not found in settings directory") - - try: - with config_path.open("r", encoding="utf-8") as file: - data = yaml.safe_load(file) - except yaml.YAMLError as e: - raise ValueError(f"Error parsing YAML file '{FILE_NAME}': {str(e)}") - except Exception as e: - raise Exception(f"Error reading file '{FILE_NAME}': {str(e)}") - - qa = [] - - for item in data["qa"]: - question = item["question"] - answer = item["answer"] - qa.append({"question": question, "answer": answer}) - - prompt = data["prompt"] - requirements = data["requirements"] - count = data["count"] - - if isinstance(count, int): - count = f", within {count} words" - else: - count = "" - - random_qa = random.sample(qa, min(k, len(qa))) - - return prompt, requirements, random_qa, count diff --git a/metagpt/ext/spo/utils/prompt_utils.py b/metagpt/ext/spo/utils/prompt_utils.py deleted file mode 100644 index c1c960bb70..0000000000 --- a/metagpt/ext/spo/utils/prompt_utils.py +++ /dev/null @@ -1,34 +0,0 @@ -from pathlib import Path - -from metagpt.logs import logger - - -class PromptUtils: - def __init__(self, root_path: Path): - self.root_path = root_path - - def create_round_directory(self, prompt_path: Path, round_number: int) -> Path: - directory = prompt_path / f"round_{round_number}" - directory.mkdir(parents=True, exist_ok=True) - return directory - - def load_prompt(self, round_number: int, prompts_path: Path): - prompt_file = prompts_path / "prompt.txt" - - try: - return prompt_file.read_text(encoding="utf-8") - except FileNotFoundError as e: - logger.info(f"Error loading prompt for round {round_number}: {e}") - raise - - def write_answers(self, directory: Path, answers: dict, name: str = "answers.txt"): - answers_file = directory / name - with answers_file.open("w", encoding="utf-8") as file: - for item in answers: - file.write(f"Question:\n{item['question']}\n") - file.write(f"Answer:\n{item['answer']}\n") - file.write("\n") - - def write_prompt(self, directory: Path, prompt: str): - prompt_file = directory / "prompt.txt" - prompt_file.write_text(prompt, encoding="utf-8") diff --git a/metagpt/ext/stanford_town/README.md b/metagpt/ext/stanford_town/README.md deleted file mode 100644 index 1bdcac145f..0000000000 --- a/metagpt/ext/stanford_town/README.md +++ /dev/null @@ -1,51 +0,0 @@ -## 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 deleted file mode 100644 index 3daf68d08f..0000000000 --- a/metagpt/ext/stanford_town/README_CN.md +++ /dev/null @@ -1,50 +0,0 @@ -## 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 deleted file mode 100644 index 56ea35c9f7..0000000000 --- a/metagpt/ext/stanford_town/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/ext/stanford_town/actions/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 98d370bb07..0000000000 --- a/metagpt/ext/stanford_town/actions/agent_chat_sum_rel.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/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 deleted file mode 100644 index a393f31af7..0000000000 --- a/metagpt/ext/stanford_town/actions/decide_to_talk.py +++ /dev/null @@ -1,97 +0,0 @@ -#!/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 deleted file mode 100644 index a5004d5ef3..0000000000 --- a/metagpt/ext/stanford_town/actions/dummy_action.py +++ /dev/null @@ -1,20 +0,0 @@ -#!/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 deleted file mode 100644 index 8e268a723a..0000000000 --- a/metagpt/ext/stanford_town/actions/gen_action_details.py +++ /dev/null @@ -1,401 +0,0 @@ -#!/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 deleted file mode 100644 index 5dffa89952..0000000000 --- a/metagpt/ext/stanford_town/actions/gen_daily_schedule.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/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 deleted file mode 100644 index 5d59f96dda..0000000000 --- a/metagpt/ext/stanford_town/actions/gen_hourly_schedule.py +++ /dev/null @@ -1,181 +0,0 @@ -#!/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 deleted file mode 100644 index 40f6d3af0e..0000000000 --- a/metagpt/ext/stanford_town/actions/gen_iter_chat_utt.py +++ /dev/null @@ -1,125 +0,0 @@ -#!/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 deleted file mode 100644 index 83cfa037ba..0000000000 --- a/metagpt/ext/stanford_town/actions/inner_voice_action.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/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 deleted file mode 100644 index 759ec170f4..0000000000 --- a/metagpt/ext/stanford_town/actions/new_decomp_schedule.py +++ /dev/null @@ -1,154 +0,0 @@ -#!/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 deleted file mode 100644 index 895f6828f0..0000000000 --- a/metagpt/ext/stanford_town/actions/run_reflect_action.py +++ /dev/null @@ -1,277 +0,0 @@ -#!/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 deleted file mode 100644 index 48cda353cc..0000000000 --- a/metagpt/ext/stanford_town/actions/st_action.py +++ /dev/null @@ -1,118 +0,0 @@ -#!/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.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(self.config.llm, "max_token", 1500) - setattr(self.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(self.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 deleted file mode 100644 index 5be5fcaa43..0000000000 --- a/metagpt/ext/stanford_town/actions/summarize_conv.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/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 deleted file mode 100644 index 3a23a73456..0000000000 --- a/metagpt/ext/stanford_town/actions/task_decomp.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/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 deleted file mode 100644 index ea44cd3a42..0000000000 --- a/metagpt/ext/stanford_town/actions/wake_up.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/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 deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/metagpt/ext/stanford_town/memory/agent_memory.py b/metagpt/ext/stanford_town/memory/agent_memory.py deleted file mode 100644 index d212232f42..0000000000 --- a/metagpt/ext/stanford_town/memory/agent_memory.py +++ /dev/null @@ -1,378 +0,0 @@ -#!/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 deleted file mode 100644 index c4b32f9650..0000000000 --- a/metagpt/ext/stanford_town/memory/retrieve.py +++ /dev/null @@ -1,180 +0,0 @@ -#!/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 deleted file mode 100644 index b4036f839f..0000000000 --- a/metagpt/ext/stanford_town/memory/scratch.py +++ /dev/null @@ -1,383 +0,0 @@ -#!/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 deleted file mode 100644 index 71b8569079..0000000000 --- a/metagpt/ext/stanford_town/memory/spatial_memory.py +++ /dev/null @@ -1,116 +0,0 @@ -""" -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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/metagpt/ext/stanford_town/plan/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 8eefbc9b42..0000000000 --- a/metagpt/ext/stanford_town/plan/converse.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/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 deleted file mode 100644 index f63052fc53..0000000000 --- a/metagpt/ext/stanford_town/plan/st_plan.py +++ /dev/null @@ -1,706 +0,0 @@ -#!/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

] -# docstring: searches for search_term in all files in dir and give their code preview with line number if you think need a first look. The output will vary depending on the length of the search results, but the file path, line number & corresponding code or number of occurrences will always be output. If dir is not provided, searches in the current directory -# arguments: -# search_term: -# type: string -# description: the term to search for -# required: true -# dir: -# type: string -# description: the directory to search in (if not provided, searches in the current directory) -# required: false -search_dir_and_preview() { - if [ $# -eq 1 ]; then - local search_term="$1" - local dir="./" - elif [ $# -eq 2 ]; then - local search_term="$1" - if [ -d "$2" ]; then - local dir="$2" - else - echo "Directory $2 not found" - return - fi - else - echo "Usage: search_dir_and_preview []" - return - fi - dir=$(realpath "$dir") - local matches=$(find "$dir" -type f -path '*.py' -exec grep -nIH -- "$search_term" {} + | cut -d: -f1 | sort | uniq -c) -< 100, print an error - if [ $num_files -gt 100 ]; then - echo "More than $num_files files matched for \"$search_term\" in $dir. Please narrow your search." - return - fi - - match_with_cnt=$(echo "$matches" | awk '{$2=$2; gsub(/^\.+\/+/, "./", $2); print $2 " ("$1" matches)"}') -< [] -# docstring: searches for search_term in file. If file is not provided, searches in the current open file -# arguments: -# search_term: -# type: string -# description: the term to search for -# required: true -# file: -# type: string -# description: the file to search in (if not provided, searches in the current open file) -# required: false -search_file() { - # Check if the first argument is provided - if [ -z "$1" ]; then - echo "Usage: search_file []" - return - fi - # Check if the second argument is provided - if [ -n "$2" ]; then - # Check if the provided argument is a valid file - if [ -f "$2" ]; then - local file="$2" # Set file if valid - else - echo "Usage: search_file []" - echo "Error: File name $2 not found. Please provide a valid file name." - return # Exit if the file is not valid - fi - else - # Check if a file is open - if [ -z "$CURRENT_FILE" ]; then - echo "No file open. Use the open command first." - return # Exit if no file is open - fi - local file="$CURRENT_FILE" # Set file to the current open file - fi - local search_term="$1" - file=$(realpath "$file") - # Use grep to directly get the desired formatted output - local matches=$(grep -nH -- "$search_term" "$file") - # Check if no matches were found - if [ -z "$matches" ]; then - echo "No matches found for \"$search_term\" in $file" - return - fi - # Calculate total number of matches - local num_matches=$(echo "$matches" | wc -l | awk '{$1=$1; print $0}') - - # calculate total number of lines matched - local num_lines=$(echo "$matches" | cut -d: -f1 | sort | uniq | wc -l | awk '{$1=$1; print $0}') - # if num_lines is > 100, print an error - if [ $num_lines -gt 100 ]; then - echo "More than $num_lines lines matched for \"$search_term\" in $file. Please narrow your search." - return - fi - - # Print the total number of matches and the matches themselves - echo "Found $num_matches matches for \"$search_term\" in $file:" - echo "$matches" | cut -d: -f1-2 | sort -u -t: -k2,2n | while IFS=: read -r filename line_number; do - echo "Line $line_number:$(sed -n "${line_number}p" "$file")" - done - echo "End of matches for \"$search_term\" in $file" -} - -# @yaml -# signature: find_file [] -# docstring: finds all files with the given name in dir. If dir is not provided, searches in the current directory -# arguments: -# file_name: -# type: string -# description: the name of the file to search for -# required: true -# dir: -# type: string -# description: the directory to search in (if not provided, searches in the current directory) -# required: false -find_file() { - if [ $# -eq 1 ]; then - local file_name="$1" - local dir="./" - elif [ $# -eq 2 ]; then - local file_name="$1" - if [ -d "$2" ]; then - local dir="$2" - else - echo "Directory $2 not found" - return - fi - else - echo "Usage: find_file []" - return - fi - - dir=$(realpath "$dir") - local matches=$(find "$dir" -type f -name "$file_name") - # if no matches, return - if [ -z "$matches" ]; then - echo "No matches found for \"$file_name\" in $dir" - return - fi - # Calculate total number of matches - local num_matches=$(echo "$matches" | wc -l | awk '{$1=$1; print $0}') - echo "Found $num_matches matches for \"$file_name\" in $dir:" - echo "$matches" | awk '{print $0}' -} diff --git a/metagpt/tools/swe_agent_commands/setup_default.sh b/metagpt/tools/swe_agent_commands/setup_default.sh deleted file mode 100644 index 2656500012..0000000000 --- a/metagpt/tools/swe_agent_commands/setup_default.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -pip install flake8 - -# Default Mode from SWE-Bench -# https://github.com/princeton-nlp/SWE-agent/blob/ca54d5556b9db4f4f2be21f09530ce69a72c0305/config/configs/default_sys-env_window100-detailed_cmd_format-last_5_history-1_demos.yaml#L103-L106 -SCRIPT_PATH="${BASH_SOURCE[0]}" # use BASH_SOURCE to avoid the influence of `source *.sh which cause CUR_DIR=/bin` -CUR_DIR=$(dirname $(readlink -f $SCRIPT_PATH)) -REPO_ROOT_DIR=$CUR_DIR"/../../.." -source $REPO_ROOT_DIR/metagpt/tools/swe_agent_commands/_setup_default_env.sh - -# make _split_string (py) available -export PATH=$PATH:$REPO_ROOT_DIR/metagpt/tools/swe_agent_commands - -source $REPO_ROOT_DIR/metagpt/tools/swe_agent_commands/defaults.sh -source $REPO_ROOT_DIR/metagpt/tools/swe_agent_commands/search.sh -source $REPO_ROOT_DIR/metagpt/tools/swe_agent_commands/edit_linting.sh - -echo "SWE_CMD_WORK_DIR: $SWE_CMD_WORK_DIR" diff --git a/metagpt/tools/swe_agent_commands/swe_agent_utils.py b/metagpt/tools/swe_agent_commands/swe_agent_utils.py deleted file mode 100644 index 9e293f4d28..0000000000 --- a/metagpt/tools/swe_agent_commands/swe_agent_utils.py +++ /dev/null @@ -1,38 +0,0 @@ -from pathlib import Path - -import numpy as np -from datasets import load_dataset, load_from_disk - - -def extract_patch(command_output): - patch_lines = [] - recording = False - for line in command_output.split("\n"): - if line.startswith("diff --git"): - recording = True - if recording: - patch_lines.append(line) - return "\n".join(patch_lines) - - -def load_hf_dataset(dataset_name_or_path: str, cache_dir, split: str = "test", existing_ids: list = []): - data_dir = cache_dir / dataset_name_or_path - if Path(data_dir).exists(): - dataset = load_from_disk(data_dir) - else: - dataset = load_dataset(dataset_name_or_path) - dataset.save_to_disk(data_dir) - print(dataset) - if split not in dataset: - raise ValueError(f"Invalid split {split} for dataset {dataset_name_or_path}") - dataset = dataset[split] - np.array(list(map(len, dataset["instance_id"]))) - - if existing_ids: - dataset = dataset.filter( - lambda x: x["instance_id"] not in existing_ids, - desc="Filtering out existing ids", - load_from_cache_file=False, - ) - - return dataset diff --git a/metagpt/tools/tool_recommend.py b/metagpt/tools/tool_recommend.py index 06184b2446..93b72eb25f 100644 --- a/metagpt/tools/tool_recommend.py +++ b/metagpt/tools/tool_recommend.py @@ -1,173 +1,15 @@ from __future__ import annotations -import json -import traceback from typing import Any import numpy as np -from pydantic import BaseModel, field_validator from rank_bm25 import BM25Okapi -from metagpt.llm import LLM -from metagpt.logs import logger -from metagpt.prompts.di.role_zero import JSON_REPAIR_PROMPT -from metagpt.schema import Plan -from metagpt.tools import TOOL_REGISTRY -from metagpt.tools.tool_data_type import Tool -from metagpt.tools.tool_registry import validate_tool_names -from metagpt.utils.common import CodeParser -from metagpt.utils.repair_llm_raw_output import RepairType, repair_llm_raw_output - -TOOL_INFO_PROMPT = """ -## Capabilities -- You can utilize pre-defined tools in any code lines from 'Available Tools' in the form of Python class or function. -- You can freely combine the use of any other public packages, like sklearn, numpy, pandas, etc.. - -## Available Tools: -Each tool is described in JSON format. When you call a tool, import the tool from its path first. -{tool_schemas} -""" - - -TOOL_RECOMMENDATION_PROMPT = """ -## User Requirement: -{current_task} - -## Task -Recommend up to {topk} tools from 'Available Tools' that can help solve the 'User Requirement'. - -## Available Tools: -{available_tools} - -## Tool Selection and Instructions: -- Select tools most relevant to completing the 'User Requirement'. -- If you believe that no tools are suitable, indicate with an empty list. -- Only list the names of the tools, not the full schema of each tool. -- Ensure selected tools are listed in 'Available Tools'. -- Output a json list of tool names: -```json -["tool_name1", "tool_name2", ...] -``` -""" - - -class ToolRecommender(BaseModel): - """ - The default ToolRecommender: - 1. Recall: To be implemented in subclasses. Recall tools based on the given context and plan. - 2. Rank: Use LLM to select final candidates from recalled set. - """ - - tools: dict[str, Tool] = {} - force: bool = False # whether to forcedly recommend the specified tools - - @field_validator("tools", mode="before") - @classmethod - def validate_tools(cls, v: list[str]) -> dict[str, Tool]: - # If `v` is already a dictionary (e.g., during deserialization), return it as is. - if isinstance(v, dict): - return v - - # One can use special symbol [""] to indicate use of all registered tools - if v == [""]: - return TOOL_REGISTRY.get_all_tools() - else: - return validate_tool_names(v) - - async def recommend_tools( - self, context: str = "", plan: Plan = None, recall_topk: int = 20, topk: int = 5 - ) -> list[Tool]: - """ - Recommends a list of tools based on the given context and plan. The recommendation process includes two stages: recall from a large pool and rank the recalled tools to select the final set. - - Args: - context (str): The context for tool recommendation. - plan (Plan): The plan for tool recommendation. - recall_topk (int): The number of tools to recall in the initial step. - topk (int): The number of tools to return after rank as final recommendations. - - Returns: - list[Tool]: A list of recommended tools. - """ - - if not self.tools: - return [] - - if self.force or (not context and not plan): - # directly use what users have specified as result for forced recommendation; - # directly use the whole set if there is no useful information - return list(self.tools.values()) - - recalled_tools = await self.recall_tools(context=context, plan=plan, topk=recall_topk) - if not recalled_tools: - return [] - - ranked_tools = await self.rank_tools(recalled_tools=recalled_tools, context=context, plan=plan, topk=topk) - - logger.info(f"Recommended tools: \n{[tool.name for tool in ranked_tools]}") - - return ranked_tools - - async def get_recommended_tool_info(self, fixed: list[str] = None, **kwargs) -> str: - """ - Wrap recommended tools with their info in a string, which can be used directly in a prompt. - """ - recommended_tools = await self.recommend_tools(**kwargs) - if fixed: - recommended_tools.extend([self.tools[tool_name] for tool_name in fixed if tool_name in self.tools]) - if not recommended_tools: - return "" - tool_schemas = {tool.name: tool.schemas for tool in recommended_tools} - return TOOL_INFO_PROMPT.format(tool_schemas=tool_schemas) - - async def recall_tools(self, context: str = "", plan: Plan = None, topk: int = 20) -> list[Tool]: - """ - Retrieves a list of relevant tools from a large pool, based on the given context and plan. - """ - raise NotImplementedError - - async def rank_tools( - self, recalled_tools: list[Tool], context: str = "", plan: Plan = None, topk: int = 5 - ) -> list[Tool]: - """ - Default rank methods for a ToolRecommender. Use LLM to rank the recalled tools based on the given context, plan, and topk value. - """ - current_task = plan.current_task.instruction if plan else context - - available_tools = {tool.name: tool.schemas["description"] for tool in recalled_tools} - prompt = TOOL_RECOMMENDATION_PROMPT.format( - current_task=current_task, - available_tools=available_tools, - topk=topk, - ) - rsp = await LLM().aask(prompt, stream=False) - - # 临时方案,待role zero的版本完成可将本注释内的代码直接替换掉 - # -------------开始--------------- - try: - ranked_tools = CodeParser.parse_code(block=None, lang="json", text=rsp) - ranked_tools = json.loads( - repair_llm_raw_output(output=ranked_tools, req_keys=[None], repair_type=RepairType.JSON) - ) - except json.JSONDecodeError: - ranked_tools = await LLM().aask(msg=JSON_REPAIR_PROMPT.format(json_data=rsp)) - ranked_tools = json.loads(CodeParser.parse_code(block=None, lang="json", text=ranked_tools)) - except Exception: - tb = traceback.format_exc() - print(tb) - - # 为了对LLM不按格式生成进行容错 - if isinstance(ranked_tools, dict): - ranked_tools = list(ranked_tools.values())[0] - # -------------结束--------------- - - if not isinstance(ranked_tools, list): - logger.warning(f"Invalid rank result: {ranked_tools}, will use the recalled tools instead.") - ranked_tools = list(available_tools.keys()) - - valid_tools = validate_tool_names(ranked_tools) - - return list(valid_tools.values())[:topk] +from metagpt.core.logs import logger +from metagpt.core.schema import Plan +from metagpt.core.tools import TOOL_REGISTRY +from metagpt.core.tools.base import Tool +from metagpt.core.tools.tool_recommend_base import ToolRecommender class TypeMatchToolRecommender(ToolRecommender): diff --git a/metagpt/tools/translator.py b/metagpt/tools/translator.py deleted file mode 100644 index 63e38d5a5c..0000000000 --- a/metagpt/tools/translator.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/4/29 15:36 -@Author : alexanderwu -@File : translator.py -""" - -prompt = """ -# 指令 -接下来,作为一位拥有20年翻译经验的翻译专家,当我给出英文句子或段落时,你将提供通顺且具有可读性的{LANG}翻译。注意以下要求: -1. 确保翻译结果流畅且易于理解 -2. 无论提供的是陈述句或疑问句,我都只进行翻译 -3. 不添加与原文无关的内容 - -# 原文 -{ORIGINAL} - -# 译文 -""" - - -class Translator: - @classmethod - def translate_prompt(cls, original, lang="中文"): - return prompt.format(LANG=lang, ORIGINAL=original) diff --git a/metagpt/tools/ut_writer.py b/metagpt/tools/ut_writer.py deleted file mode 100644 index 243871aff3..0000000000 --- a/metagpt/tools/ut_writer.py +++ /dev/null @@ -1,287 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import json -from pathlib import Path - -from metagpt.config2 import config -from metagpt.provider.openai_api import OpenAILLM as GPTAPI -from metagpt.utils.common import awrite - -ICL_SAMPLE = """Interface definition: -```text -Interface Name: Element Tagging -Interface Path: /projects/{project_key}/node-tags -Method: POST - -Request parameters: -Path parameters: -project_key - -Body parameters: -Name Type Required Default Value Remarks -nodes array Yes Nodes - node_key string No Node key - tags array No Original node tag list - node_type string No Node type DATASET / RECIPE -operations array Yes - tags array No Operation tag list - mode string No Operation type ADD / DELETE - -Return data: -Name Type Required Default Value Remarks -code integer Yes Status code -msg string Yes Prompt message -data object Yes Returned data -list array No Node list true / false -node_type string No Node type DATASET / RECIPE -node_key string No Node key -``` - -Unit test: -```python -@pytest.mark.parametrize( -"project_key, nodes, operations, expected_msg", -[ -("project_key", [{"node_key": "dataset_001", "tags": ["tag1", "tag2"], "node_type": "DATASET"}], [{"tags": ["new_tag1"], "mode": "ADD"}], "success"), -("project_key", [{"node_key": "dataset_002", "tags": ["tag1", "tag2"], "node_type": "DATASET"}], [{"tags": ["tag1"], "mode": "DELETE"}], "success"), -("", [{"node_key": "dataset_001", "tags": ["tag1", "tag2"], "node_type": "DATASET"}], [{"tags": ["new_tag1"], "mode": "ADD"}], "Missing the required parameter project_key"), -(123, [{"node_key": "dataset_001", "tags": ["tag1", "tag2"], "node_type": "DATASET"}], [{"tags": ["new_tag1"], "mode": "ADD"}], "Incorrect parameter type"), -("project_key", [{"node_key": "a"*201, "tags": ["tag1", "tag2"], "node_type": "DATASET"}], [{"tags": ["new_tag1"], "mode": "ADD"}], "Request parameter exceeds field boundary") -] -) -def test_node_tags(project_key, nodes, operations, expected_msg): - pass - -# The above is an interface definition and a unit test example. -# Next, please play the role of an expert test manager with 20 years of experience at Google. When I give the interface definition, -# reply to me with a unit test. There are several requirements: -# 1. Only output one `@pytest.mark.parametrize` and the corresponding test_ function (inside pass, do not implement). -# -- The function parameter contains expected_msg for result verification. -# 2. The generated test cases use shorter text or numbers and are as compact as possible. -# 3. If comments are needed, use Chinese. - -# If you understand, please wait for me to give the interface definition and just answer "Understood" to save tokens. -""" - -ACT_PROMPT_PREFIX = """Refer to the test types: such as missing request parameters, field boundary verification, incorrect field type. -Please output 10 test cases within one `@pytest.mark.parametrize` scope. -```text -""" - -YFT_PROMPT_PREFIX = """Refer to the test types: such as SQL injection, cross-site scripting (XSS), unauthorized access and privilege escalation, -authentication and authorization, parameter verification, exception handling, file upload and download. -Please output 10 test cases within one `@pytest.mark.parametrize` scope. -```text -""" - -OCR_API_DOC = """```text -Interface Name: OCR recognition -Interface Path: /api/v1/contract/treaty/task/ocr -Method: POST - -Request Parameters: -Path Parameters: - -Body Parameters: -Name Type Required Default Value Remarks -file_id string Yes -box array Yes -contract_id number Yes Contract id -start_time string No yyyy-mm-dd -end_time string No yyyy-mm-dd -extract_type number No Recognition type 1- During import 2- After import Default 1 - -Response Data: -Name Type Required Default Value Remarks -code integer Yes -message string Yes -data object Yes -``` -""" - - -class UTGenerator: - """UT Generator: Construct UT through API documentation""" - - def __init__( - self, - swagger_file: str, - ut_py_path: str, - questions_path: str, - chatgpt_method: str = "API", - template_prefix=YFT_PROMPT_PREFIX, - ) -> None: - """Initialize UT Generator - - Args: - swagger_file: path to the swagger file - ut_py_path: path to store test cases - questions_path: path to store the template, facilitating subsequent checks - chatgpt_method: API method - template_prefix: use the template, default is YFT_UT_PROMPT - """ - self.swagger_file = swagger_file - self.ut_py_path = ut_py_path - self.questions_path = questions_path - assert chatgpt_method in ["API"], "Invalid chatgpt_method" - self.chatgpt_method = chatgpt_method - - # ICL: In-Context Learning, provide an example here for GPT to mimic - self.icl_sample = ICL_SAMPLE - self.template_prefix = template_prefix - - def get_swagger_json(self) -> dict: - """Load Swagger JSON from a local file""" - with open(self.swagger_file, "r", encoding="utf-8") as file: - swagger_json = json.load(file) - return swagger_json - - def __para_to_str(self, prop, required, name=""): - name = name or prop["name"] - ptype = prop["type"] - title = prop.get("title", "") - desc = prop.get("description", "") - return f'{name}\t{ptype}\t{"Yes" if required else "No"}\t{title}\t{desc}' - - def _para_to_str(self, prop): - required = prop.get("required", False) - return self.__para_to_str(prop, required) - - def para_to_str(self, name, prop, prop_object_required): - required = name in prop_object_required - return self.__para_to_str(prop, required, name) - - def build_object_properties(self, node, prop_object_required, level: int = 0) -> str: - """Recursively output properties of object and array[object] types - - Args: - node (_type_): value of the child item - prop_object_required (_type_): whether it's a required field - level: current recursion depth - """ - - doc = "" - - def dive_into_object(node): - """If it's an object type, recursively output its properties""" - if node.get("type") == "object": - sub_properties = node.get("properties", {}) - return self.build_object_properties(sub_properties, prop_object_required, level=level + 1) - return "" - - if node.get("in", "") in ["query", "header", "formData"]: - doc += f'{" " * level}{self._para_to_str(node)}\n' - doc += dive_into_object(node) - return doc - - for name, prop in node.items(): - if not isinstance(prop, dict): - doc += f'{" " * level}{self._para_to_str(node)}\n' - break - doc += f'{" " * level}{self.para_to_str(name, prop, prop_object_required)}\n' - doc += dive_into_object(prop) - if prop["type"] == "array": - items = prop.get("items", {}) - doc += dive_into_object(items) - return doc - - def get_tags_mapping(self) -> dict: - """Process tag and path mappings - - Returns: - Dict: mapping of tag to path - """ - swagger_data = self.get_swagger_json() - paths = swagger_data["paths"] - tags = {} - - for path, path_obj in paths.items(): - for method, method_obj in path_obj.items(): - for tag in method_obj["tags"]: - if tag not in tags: - tags[tag] = {} - if path not in tags[tag]: - tags[tag][path] = {} - tags[tag][path][method] = method_obj - - return tags - - async def generate_ut(self, include_tags) -> bool: - """Generate test case files""" - tags = self.get_tags_mapping() - for tag, paths in tags.items(): - if include_tags is None or tag in include_tags: - await self._generate_ut(tag, paths) - return True - - def build_api_doc(self, node: dict, path: str, method: str) -> str: - summary = node["summary"] - - doc = f"API Name: {summary}\nAPI Path: {path}\nMethod: {method.upper()}\n" - doc += "\nRequest Parameters:\n" - if "parameters" in node: - parameters = node["parameters"] - doc += "Path Parameters:\n" - - # param["in"]: path / formData / body / query / header - for param in parameters: - if param["in"] == "path": - doc += f'{param["name"]} \n' - - doc += "\nBody Parameters:\n" - doc += "Name\tType\tRequired\tDefault Value\tRemarks\n" - for param in parameters: - if param["in"] == "body": - schema = param.get("schema", {}) - prop_properties = schema.get("properties", {}) - prop_required = schema.get("required", []) - doc += self.build_object_properties(prop_properties, prop_required) - else: - doc += self.build_object_properties(param, []) - - # Display response data information - doc += "\nResponse Data:\n" - doc += "Name\tType\tRequired\tDefault Value\tRemarks\n" - responses = node["responses"] - response = responses.get("200", {}) - schema = response.get("schema", {}) - properties = schema.get("properties", {}) - required = schema.get("required", {}) - - doc += self.build_object_properties(properties, required) - doc += "\n" - doc += "```" - - return doc - - async def ask_gpt_and_save(self, question: str, tag: str, fname: str): - """Generate questions and store both questions and answers""" - messages = [self.icl_sample, question] - result = await self.gpt_msgs_to_code(messages=messages) - - await awrite(Path(self.questions_path) / tag / f"{fname}.txt", question) - data = result.get("code", "") if result else "" - await awrite(Path(self.ut_py_path) / tag / f"{fname}.py", data) - - async def _generate_ut(self, tag, paths): - """Process the structure under a data path - - Args: - tag (_type_): module name - paths (_type_): Path Object - """ - for path, path_obj in paths.items(): - for method, node in path_obj.items(): - summary = node["summary"] - question = self.template_prefix - question += self.build_api_doc(node, path, method) - await self.ask_gpt_and_save(question, tag, summary) - - async def gpt_msgs_to_code(self, messages: list) -> str: - """Choose based on different calling methods""" - result = "" - if self.chatgpt_method == "API": - result = await GPTAPI(config.get_openai_llm()).aask_code(messages=messages) - - return result diff --git a/metagpt/tools/web_browser_engine.py b/metagpt/tools/web_browser_engine.py index 52c93849e7..c9610d9597 100644 --- a/metagpt/tools/web_browser_engine.py +++ b/metagpt/tools/web_browser_engine.py @@ -7,7 +7,7 @@ from pydantic import BaseModel, ConfigDict, Field, model_validator -from metagpt.configs.browser_config import BrowserConfig +from metagpt.core.configs.browser_config import BrowserConfig from metagpt.tools import WebBrowserEngineType from metagpt.utils.parse_html import WebPage diff --git a/metagpt/tools/web_browser_engine_playwright.py b/metagpt/tools/web_browser_engine_playwright.py index f38a3b296e..3fa9b10277 100644 --- a/metagpt/tools/web_browser_engine_playwright.py +++ b/metagpt/tools/web_browser_engine_playwright.py @@ -11,7 +11,7 @@ from playwright.async_api import async_playwright from pydantic import BaseModel, Field, PrivateAttr -from metagpt.logs import logger +from metagpt.core.logs import logger from metagpt.utils.parse_html import WebPage diff --git a/metagpt/uml_schema.py b/metagpt/uml_schema.py new file mode 100644 index 0000000000..be4bbdd114 --- /dev/null +++ b/metagpt/uml_schema.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +@Time : 2023/5/8 22:12 +@Author : alexanderwu +@File : schema.py +@Modified By: mashenquan, 2023-10-31. According to Chapter 2.2.1 of RFC 116: + Replanned the distribution of responsibilities and functional positioning of `Message` class attributes. +@Modified By: mashenquan, 2023/11/22. + 1. Add `Document` and `Documents` for `FileRepository` in Section 2.2.3.4 of RFC 135. + 2. Encapsulate the common key-values set to pydantic structures to standardize and unify parameter passing + between actions. + 3. Add `id` to `Message` according to Section 2.2.3.1.1 of RFC 135. +""" + +from __future__ import annotations + +from typing import List + +from pydantic import BaseModel, Field + +from metagpt.repo_parser import DotClassInfo + + +# mermaid class view +class UMLClassMeta(BaseModel): + name: str = "" + visibility: str = "" + + @staticmethod + def name_to_visibility(name: str) -> str: + if name == "__init__": + return "+" + if name.startswith("__"): + return "-" + elif name.startswith("_"): + return "#" + return "+" + + +class UMLClassAttribute(UMLClassMeta): + value_type: str = "" + default_value: str = "" + + def get_mermaid(self, align=1) -> str: + content = "".join(["\t" for i in range(align)]) + self.visibility + if self.value_type: + content += self.value_type.replace(" ", "") + " " + name = self.name.split(":", 1)[1] if ":" in self.name else self.name + content += name + if self.default_value: + content += "=" + if self.value_type not in ["str", "string", "String"]: + content += self.default_value + else: + content += '"' + self.default_value.replace('"', "") + '"' + # if self.abstraction: + # content += "*" + # if self.static: + # content += "$" + return content + + +class UMLClassMethod(UMLClassMeta): + args: List[UMLClassAttribute] = Field(default_factory=list) + return_type: str = "" + + def get_mermaid(self, align=1) -> str: + content = "".join(["\t" for i in range(align)]) + self.visibility + name = self.name.split(":", 1)[1] if ":" in self.name else self.name + content += name + "(" + ",".join([v.get_mermaid(align=0) for v in self.args]) + ")" + if self.return_type: + content += " " + self.return_type.replace(" ", "") + # if self.abstraction: + # content += "*" + # if self.static: + # content += "$" + return content + + +class UMLClassView(UMLClassMeta): + attributes: List[UMLClassAttribute] = Field(default_factory=list) + methods: List[UMLClassMethod] = Field(default_factory=list) + + def get_mermaid(self, align=1) -> str: + content = "".join(["\t" for i in range(align)]) + "class " + self.name + "{\n" + for v in self.attributes: + content += v.get_mermaid(align=align + 1) + "\n" + for v in self.methods: + content += v.get_mermaid(align=align + 1) + "\n" + content += "".join(["\t" for i in range(align)]) + "}\n" + return content + + @classmethod + def load_dot_class_info(cls, dot_class_info: DotClassInfo) -> UMLClassView: + visibility = UMLClassView.name_to_visibility(dot_class_info.name) + class_view = cls(name=dot_class_info.name, visibility=visibility) + for i in dot_class_info.attributes.values(): + visibility = UMLClassAttribute.name_to_visibility(i.name) + attr = UMLClassAttribute(name=i.name, visibility=visibility, value_type=i.type_, default_value=i.default_) + class_view.attributes.append(attr) + for i in dot_class_info.methods.values(): + visibility = UMLClassMethod.name_to_visibility(i.name) + method = UMLClassMethod(name=i.name, visibility=visibility, return_type=i.return_args.type_) + for j in i.args: + arg = UMLClassAttribute(name=j.name, value_type=j.type_, default_value=j.default_) + method.args.append(arg) + method.return_type = i.return_args.type_ + class_view.methods.append(method) + return class_view diff --git a/metagpt/utils/__init__.py b/metagpt/utils/__init__.py index be911f9dd5..e915e08a64 100644 --- a/metagpt/utils/__init__.py +++ b/metagpt/utils/__init__.py @@ -6,17 +6,10 @@ @File : __init__.py """ -from metagpt.utils.read_document import read_docx from metagpt.utils.singleton import Singleton -from metagpt.utils.token_counter import ( - TOKEN_COSTS, - count_message_tokens, - count_output_tokens, -) - +from metagpt.core.utils.token_counter import TOKEN_COSTS, count_message_tokens, count_output_tokens __all__ = [ - "read_docx", "Singleton", "TOKEN_COSTS", "new_transaction_id", diff --git a/metagpt/ext/cr/utils/cleaner.py b/metagpt/utils/cleaner.py similarity index 98% rename from metagpt/ext/cr/utils/cleaner.py rename to metagpt/utils/cleaner.py index 8fc0b798ca..20c8a7a6a2 100644 --- a/metagpt/ext/cr/utils/cleaner.py +++ b/metagpt/utils/cleaner.py @@ -2,7 +2,7 @@ from unidiff import Hunk, PatchedFile, PatchSet -from metagpt.logs import logger +from metagpt.core.logs import logger def rm_patch_useless_part(patch: PatchSet, used_suffix: list[str] = ["java", "py"]) -> PatchSet: diff --git a/metagpt/utils/dependency_file.py b/metagpt/utils/dependency_file.py index d34e7ae9a5..167ac078d0 100644 --- a/metagpt/utils/dependency_file.py +++ b/metagpt/utils/dependency_file.py @@ -13,8 +13,8 @@ from pathlib import Path from typing import Set -from metagpt.utils.common import aread, awrite -from metagpt.utils.exceptions import handle_exception +from metagpt.core.utils.common import aread, awrite +from metagpt.core.utils.exceptions import handle_exception class DependencyFile: diff --git a/metagpt/utils/di_graph_repository.py b/metagpt/utils/di_graph_repository.py index 8fdcda53a3..4f62a8a34d 100644 --- a/metagpt/utils/di_graph_repository.py +++ b/metagpt/utils/di_graph_repository.py @@ -16,7 +16,7 @@ import networkx -from metagpt.utils.common import aread, awrite +from metagpt.core.utils.common import aread, awrite from metagpt.utils.graph_repository import SPO, GraphRepository diff --git a/metagpt/utils/embedding.py b/metagpt/utils/embedding.py index 3d53a314ce..9a5d3597c5 100644 --- a/metagpt/utils/embedding.py +++ b/metagpt/utils/embedding.py @@ -7,7 +7,7 @@ """ from llama_index.embeddings.openai import OpenAIEmbedding -from metagpt.config2 import config +from metagpt.core.config2 import config def get_embedding() -> OpenAIEmbedding: diff --git a/metagpt/utils/file.py b/metagpt/utils/file.py index d4cfc4d0a2..399177f5f9 100644 --- a/metagpt/utils/file.py +++ b/metagpt/utils/file.py @@ -13,11 +13,11 @@ import aiofiles from fsspec.implementations.memory import MemoryFileSystem as _MemoryFileSystem -from metagpt.config2 import config -from metagpt.logs import logger -from metagpt.utils import read_docx -from metagpt.utils.common import aread, aread_bin, awrite_bin, check_http_endpoint -from metagpt.utils.exceptions import handle_exception +from metagpt.core.config2 import config +from metagpt.core.logs import logger +from metagpt.core.utils.common import aread, aread_bin, awrite_bin, check_http_endpoint +from metagpt.core.utils.exceptions import handle_exception +from metagpt.utils.read_document import read_docx from metagpt.utils.repo_to_markdown import is_text_file diff --git a/metagpt/utils/file_repository.py b/metagpt/utils/file_repository.py index dd6c0709f2..b51a8b9096 100644 --- a/metagpt/utils/file_repository.py +++ b/metagpt/utils/file_repository.py @@ -14,10 +14,10 @@ from pathlib import Path from typing import Dict, List, Set -from metagpt.logs import logger -from metagpt.schema import Document -from metagpt.utils.common import aread, awrite -from metagpt.utils.json_to_markdown import json_to_markdown +from metagpt.core.logs import logger +from metagpt.core.schema import Document +from metagpt.core.utils.common import aread, awrite +from metagpt.core.utils.json_to_markdown import json_to_markdown class FileRepository: diff --git a/metagpt/utils/git_repository.py b/metagpt/utils/git_repository.py index 35367532f6..eef0e7c445 100644 --- a/metagpt/utils/git_repository.py +++ b/metagpt/utils/git_repository.py @@ -30,7 +30,7 @@ from pydantic import BaseModel from tenacity import retry, stop_after_attempt, wait_random_exponential -from metagpt.logs import logger +from metagpt.core.logs import logger from metagpt.tools.libs.shell import shell_execute from metagpt.utils.dependency_file import DependencyFile from metagpt.utils.file_repository import FileRepository @@ -271,7 +271,7 @@ async def push( """ if not auth and not access_token: raise ValueError('`access_token` is invalid. Visit: "https://github.com/settings/tokens"') - from metagpt.context import Context + from metagpt.core.context import Context base = self.current_branch head = base if not new_branch else self.new_branch(new_branch) @@ -416,7 +416,7 @@ def filter_gitignore(self, filenames: List[str], root_relative_path: Path | str @classmethod @retry(wait=wait_random_exponential(min=1, max=15), stop=stop_after_attempt(3)) async def clone_from(cls, url: str | Path, output_dir: str | Path = None) -> "GitRepository": - from metagpt.context import Context + from metagpt.core.context import Context to_path = Path(output_dir or Path(__file__).parent / f"../../workspace/downloads/{uuid.uuid4().hex}").resolve() to_path.mkdir(parents=True, exist_ok=True) diff --git a/metagpt/utils/graph_repository.py b/metagpt/utils/graph_repository.py index f4219fac35..5bcc13d73b 100644 --- a/metagpt/utils/graph_repository.py +++ b/metagpt/utils/graph_repository.py @@ -16,8 +16,8 @@ from pydantic import BaseModel +from metagpt.core.utils.common import concat_namespace, split_namespace from metagpt.repo_parser import DotClassInfo, DotClassRelationship, RepoFileInfo -from metagpt.utils.common import concat_namespace, split_namespace class GraphKeyword: diff --git a/metagpt/utils/make_sk_kernel.py b/metagpt/utils/make_sk_kernel.py deleted file mode 100644 index 283a682d64..0000000000 --- a/metagpt/utils/make_sk_kernel.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/9/13 12:29 -@Author : femto Zheng -@File : make_sk_kernel.py -""" -import semantic_kernel as sk -from semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion import ( - AzureChatCompletion, -) -from semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion import ( - OpenAIChatCompletion, -) - -from metagpt.config2 import config - - -def make_sk_kernel(): - kernel = sk.Kernel() - if llm := config.get_azure_llm(): - kernel.add_chat_service( - "chat_completion", - AzureChatCompletion(llm.model, llm.base_url, llm.api_key), - ) - elif llm := config.get_openai_llm(): - kernel.add_chat_service( - "chat_completion", - OpenAIChatCompletion(llm.model, llm.api_key), - ) - - return kernel diff --git a/metagpt/utils/mermaid.py b/metagpt/utils/mermaid.py index 88e58ae444..6813206c48 100644 --- a/metagpt/utils/mermaid.py +++ b/metagpt/utils/mermaid.py @@ -11,9 +11,9 @@ from pathlib import Path from typing import List, Optional -from metagpt.config2 import Config -from metagpt.logs import logger -from metagpt.utils.common import awrite, check_cmd_exists +from metagpt.core.config2 import Config +from metagpt.core.logs import logger +from metagpt.core.utils.common import awrite, check_cmd_exists async def mermaid_to_file( diff --git a/metagpt/utils/mmdc_ink.py b/metagpt/utils/mmdc_ink.py index 15d6d6083a..0e26839794 100644 --- a/metagpt/utils/mmdc_ink.py +++ b/metagpt/utils/mmdc_ink.py @@ -10,7 +10,7 @@ from aiohttp import ClientError, ClientSession -from metagpt.logs import logger +from metagpt.core.logs import logger async def mermaid_to_file(mermaid_code, output_file_without_suffix, suffixes: Optional[List[str]] = None): diff --git a/metagpt/utils/mmdc_playwright.py b/metagpt/utils/mmdc_playwright.py index ad3644a321..c7e6a9efc9 100644 --- a/metagpt/utils/mmdc_playwright.py +++ b/metagpt/utils/mmdc_playwright.py @@ -12,7 +12,7 @@ from playwright.async_api import async_playwright -from metagpt.logs import logger +from metagpt.core.logs import logger async def mermaid_to_file( diff --git a/metagpt/utils/mmdc_pyppeteer.py b/metagpt/utils/mmdc_pyppeteer.py index b7aac6a084..ad06025788 100644 --- a/metagpt/utils/mmdc_pyppeteer.py +++ b/metagpt/utils/mmdc_pyppeteer.py @@ -11,8 +11,8 @@ from pyppeteer import launch -from metagpt.config2 import Config -from metagpt.logs import logger +from metagpt.core.config2 import Config +from metagpt.core.logs import logger async def mermaid_to_file( diff --git a/metagpt/utils/omniparse_client.py b/metagpt/utils/omniparse_client.py index 361e84fd15..f76705ca58 100644 --- a/metagpt/utils/omniparse_client.py +++ b/metagpt/utils/omniparse_client.py @@ -4,8 +4,8 @@ import httpx +from metagpt.core.utils.common import aread_bin from metagpt.rag.schema import OmniParsedResult -from metagpt.utils.common import aread_bin class OmniParseClient: diff --git a/metagpt/utils/project_repo.py b/metagpt/utils/project_repo.py index 5761c0188f..19f309c55e 100644 --- a/metagpt/utils/project_repo.py +++ b/metagpt/utils/project_repo.py @@ -12,7 +12,7 @@ from pathlib import Path from typing import Optional -from metagpt.const import ( +from metagpt.core.const import ( CLASS_VIEW_FILE_REPO, CODE_PLAN_AND_CHANGE_FILE_REPO, CODE_PLAN_AND_CHANGE_PDF_FILE_REPO, @@ -36,7 +36,7 @@ TEST_OUTPUTS_FILE_REPO, VISUAL_GRAPH_REPO_FILE_REPO, ) -from metagpt.utils.common import get_project_srcs_path +from metagpt.core.utils.common import get_project_srcs_path from metagpt.utils.file_repository import FileRepository from metagpt.utils.git_repository import GitRepository diff --git a/metagpt/utils/recovery_util.py b/metagpt/utils/recovery_util.py deleted file mode 100644 index 2089ae018d..0000000000 --- a/metagpt/utils/recovery_util.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 12/20/2023 11:07 AM -# @Author : stellahong (stellahong@fuzhi.ai) -# @Desc : -import json -from datetime import datetime -from pathlib import Path - -import nbformat - -from metagpt.const import DATA_PATH -from metagpt.roles.role import Role -from metagpt.utils.common import read_json_file -from metagpt.utils.save_code import save_code_file - - -def load_history(save_dir: str = ""): - """ - Load plan and code execution history from the specified save directory. - - Args: - save_dir (str): The directory from which to load the history. - - Returns: - Tuple: A tuple containing the loaded plan and notebook. - """ - - plan_path = Path(save_dir) / "plan.json" - nb_path = Path(save_dir) / "history_nb" / "code.ipynb" - plan = read_json_file(plan_path) - nb = nbformat.read(open(nb_path, "r", encoding="utf-8"), as_version=nbformat.NO_CONVERT) - return plan, nb - - -def save_history(role: Role, save_dir: str = ""): - """ - Save plan and code execution history to the specified directory. - - Args: - role (Role): The role containing the plan and execute_code attributes. - save_dir (str): The directory to save the history. - - Returns: - Path: The path to the saved history directory. - """ - record_time = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") - save_path = DATA_PATH / "output" / f"{record_time}" - - # overwrite exist trajectory - save_path.mkdir(parents=True, exist_ok=True) - - plan = role.planner.plan.dict() - - with open(save_path / "plan.json", "w", encoding="utf-8") as plan_file: - json.dump(plan, plan_file, indent=4, ensure_ascii=False) - - save_code_file(name=Path(record_time), code_context=role.execute_code.nb, file_format="ipynb") - return save_path diff --git a/metagpt/utils/redis.py b/metagpt/utils/redis.py index 9f5ef8a926..6a21772861 100644 --- a/metagpt/utils/redis.py +++ b/metagpt/utils/redis.py @@ -12,8 +12,8 @@ import redis.asyncio as aioredis -from metagpt.configs.redis_config import RedisConfig -from metagpt.logs import logger +from metagpt.core.configs.redis_config import RedisConfig +from metagpt.core.logs import logger class Redis: diff --git a/metagpt/utils/repo_to_markdown.py b/metagpt/utils/repo_to_markdown.py index a5bffffe1d..a4d083e87d 100644 --- a/metagpt/utils/repo_to_markdown.py +++ b/metagpt/utils/repo_to_markdown.py @@ -11,8 +11,8 @@ from gitignore_parser import parse_gitignore -from metagpt.logs import logger -from metagpt.utils.common import ( +from metagpt.core.logs import logger +from metagpt.core.utils.common import ( aread, awrite, get_markdown_codeblock_type, diff --git a/metagpt/utils/s3.py b/metagpt/utils/s3.py index c0afbb2f5b..6d540aa4fa 100644 --- a/metagpt/utils/s3.py +++ b/metagpt/utils/s3.py @@ -8,9 +8,9 @@ import aioboto3 import aiofiles -from metagpt.config2 import S3Config -from metagpt.const import BASE64_FORMAT -from metagpt.logs import logger +from metagpt.core.config2 import S3Config +from metagpt.core.const import BASE64_FORMAT +from metagpt.core.logs import logger class S3: diff --git a/metagpt/utils/save_code.py b/metagpt/utils/save_code.py deleted file mode 100644 index 18cb5cd624..0000000000 --- a/metagpt/utils/save_code.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 12/12/2023 4:14 PM -# @Author : stellahong (stellahong@fuzhi.ai) -# @Desc : -import os - -import nbformat - -from metagpt.const import DATA_PATH -from metagpt.utils.common import write_json_file - - -def save_code_file(name: str, code_context: str, file_format: str = "py") -> None: - """ - Save code files to a specified path. - - Args: - - name (str): The name of the folder to save the files. - - code_context (str): The code content. - - file_format (str, optional): The file format. Supports 'py' (Python file), 'json' (JSON file), and 'ipynb' (Jupyter Notebook file). Default is 'py'. - - - Returns: - - None - """ - # Create the folder path if it doesn't exist - os.makedirs(name=DATA_PATH / "output" / f"{name}", exist_ok=True) - - # Choose to save as a Python file or a JSON file based on the file format - file_path = DATA_PATH / "output" / f"{name}/code.{file_format}" - if file_format == "py": - file_path.write_text(code_context + "\n\n", encoding="utf-8") - elif file_format == "json": - # Parse the code content as JSON and save - data = {"code": code_context} - write_json_file(file_path, data, encoding="utf-8", indent=2) - elif file_format == "ipynb": - nbformat.write(code_context, file_path) - else: - raise ValueError("Unsupported file format. Please choose 'py', 'json', or 'ipynb'.") diff --git a/metagpt/utils/serialize.py b/metagpt/utils/serialize.py index c6bd8ad75f..390dc75d94 100644 --- a/metagpt/utils/serialize.py +++ b/metagpt/utils/serialize.py @@ -5,7 +5,7 @@ import copy import pickle -from metagpt.utils.common import import_class +from metagpt.core.utils.common import import_class def actionoutout_schema_to_mapping(schema: dict) -> dict: @@ -75,7 +75,7 @@ def deserialize_message(message_ser: str) -> "Message": message = pickle.loads(message_ser) if message.instruct_content: ic = message.instruct_content - actionnode_class = import_class("ActionNode", "metagpt.actions.action_node") # avoid circular import + actionnode_class = import_class("ActionNode", "metagpt.core.actions.action_node") # avoid circular import ic_obj = actionnode_class.create_model_class(class_name=ic["class"], mapping=ic["mapping"]) ic_new = ic_obj(**ic["value"]) message.instruct_content = ic_new diff --git a/metagpt/utils/stream_pipe.py b/metagpt/utils/stream_pipe.py deleted file mode 100644 index 15a1eef1fc..0000000000 --- a/metagpt/utils/stream_pipe.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -# @Time : 2024/3/27 10:00 -# @Author : leiwu30 -# @File : stream_pipe.py -# @Version : None -# @Description : None - -import json -import time -from multiprocessing import Pipe - - -class StreamPipe: - def __init__(self, name=None): - self.name = name - self.parent_conn, self.child_conn = Pipe() - self.finish: bool = False - - format_data = { - "id": "chatcmpl-96bVnBOOyPFZZxEoTIGbdpFcVEnur", - "object": "chat.completion.chunk", - "created": 1711361191, - "model": "gpt-3.5-turbo-0125", - "system_fingerprint": "fp_3bc1b5746c", - "choices": [ - {"index": 0, "delta": {"role": "assistant", "content": "content"}, "logprobs": None, "finish_reason": None} - ], - } - - def set_message(self, msg): - self.parent_conn.send(msg) - - def get_message(self, timeout: int = 3): - if self.child_conn.poll(timeout): - return self.child_conn.recv() - else: - return None - - def msg2stream(self, msg): - self.format_data["created"] = int(time.time()) - self.format_data["choices"][0]["delta"]["content"] = msg - return f"data: {json.dumps(self.format_data, ensure_ascii=False)}\n".encode("utf-8") diff --git a/metagpt/utils/text.py b/metagpt/utils/text.py index df0f5ac053..1d84772cdc 100644 --- a/metagpt/utils/text.py +++ b/metagpt/utils/text.py @@ -1,6 +1,6 @@ from typing import Generator, Sequence -from metagpt.utils.token_counter import TOKEN_MAX, count_output_tokens +from metagpt.core.utils.token_counter import TOKEN_MAX, count_output_tokens def reduce_message_length( diff --git a/metagpt/utils/visual_graph_repo.py b/metagpt/utils/visual_graph_repo.py index 86b50df21d..a67a230e14 100644 --- a/metagpt/utils/visual_graph_repo.py +++ b/metagpt/utils/visual_graph_repo.py @@ -15,9 +15,9 @@ from pydantic import BaseModel, Field -from metagpt.const import AGGREGATION, COMPOSITION, GENERALIZATION -from metagpt.schema import UMLClassView -from metagpt.utils.common import split_namespace +from metagpt.core.const import AGGREGATION, COMPOSITION, GENERALIZATION +from metagpt.core.utils.common import split_namespace +from metagpt.uml_schema import UMLClassView from metagpt.utils.di_graph_repository import DiGraphRepository from metagpt.utils.graph_repository import GraphKeyword, GraphRepository diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000000..d66e6bd51a --- /dev/null +++ b/poetry.lock @@ -0,0 +1,8339 @@ +# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. + +[[package]] +name = "aioboto3" +version = "12.4.0" +description = "Async boto3 wrapper" +optional = false +python-versions = "<4.0,>=3.8" +groups = ["test"] +files = [ + {file = "aioboto3-12.4.0-py3-none-any.whl", hash = "sha256:a8d5a60852482cc7a472f3544e5ad7d2f5a911054ffa066357140dc6690da94b"}, + {file = "aioboto3-12.4.0.tar.gz", hash = "sha256:0fa03ac7a8c2c187358dd27cdf84da05e91bc1a3bd85519cad13521343a3d767"}, +] + +[package.dependencies] +aiobotocore = {version = "2.12.3", extras = ["boto3"]} + +[package.extras] +chalice = ["chalice (>=1.24.0)"] +s3cse = ["cryptography (>=2.3.1)"] + +[[package]] +name = "aiobotocore" +version = "2.12.3" +description = "Async client for aws services using botocore and aiohttp" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "aiobotocore-2.12.3-py3-none-any.whl", hash = "sha256:86737685f4625e8f05c4e7a608a07cc97607263279f66cf6b02b640c4eafd324"}, + {file = "aiobotocore-2.12.3.tar.gz", hash = "sha256:e2a2929207bc5d62eb556106c2224c1fd106d5c65be2eb69f15cc8c34c44c236"}, +] + +[package.dependencies] +aiohttp = ">=3.7.4.post0,<4.0.0" +aioitertools = ">=0.5.1,<1.0.0" +boto3 = {version = ">=1.34.41,<1.34.70", optional = true, markers = "extra == \"boto3\""} +botocore = ">=1.34.41,<1.34.70" +wrapt = ">=1.10.10,<2.0.0" + +[package.extras] +awscli = ["awscli (>=1.32.41,<1.32.70)"] +boto3 = ["boto3 (>=1.34.41,<1.34.70)"] + +[[package]] +name = "aiofiles" +version = "23.2.1" +description = "File support for asyncio." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "aiofiles-23.2.1-py3-none-any.whl", hash = "sha256:19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107"}, + {file = "aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"}, +] + +[[package]] +name = "aiohttp" +version = "3.8.6" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.6" +groups = ["main", "test"] +files = [ + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, + {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, + {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, + {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, + {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, + {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, + {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, + {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, + {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, + {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, + {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" +attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<4.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "cchardet ; python_version < \"3.10\""] + +[[package]] +name = "aioitertools" +version = "0.12.0" +description = "itertools and builtins for AsyncIO and mixed iterables" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "aioitertools-0.12.0-py3-none-any.whl", hash = "sha256:fc1f5fac3d737354de8831cbba3eb04f79dd649d8f3afb4c5b114925e662a796"}, + {file = "aioitertools-0.12.0.tar.gz", hash = "sha256:c2a9055b4fbb7705f561b9d86053e8af5d10cc845d22c32008c43490b2d8dd6b"}, +] + +[package.dependencies] +typing_extensions = {version = ">=4.0", markers = "python_version < \"3.10\""} + +[package.extras] +dev = ["attribution (==1.8.0)", "black (==24.8.0)", "build (>=1.2)", "coverage (==7.6.1)", "flake8 (==7.1.1)", "flit (==3.9.0)", "mypy (==1.11.2)", "ufmt (==2.7.1)", "usort (==1.0.8.post1)"] +docs = ["sphinx (==8.0.2)", "sphinx-mdinclude (==0.6.2)"] + +[[package]] +name = "aiolimiter" +version = "1.2.1" +description = "asyncio rate limiter, a leaky bucket implementation" +optional = false +python-versions = "<4.0,>=3.8" +groups = ["main"] +files = [ + {file = "aiolimiter-1.2.1-py3-none-any.whl", hash = "sha256:d3f249e9059a20badcb56b61601a83556133655c11d1eb3dd3e04ff069e5f3c7"}, + {file = "aiolimiter-1.2.1.tar.gz", hash = "sha256:e02a37ea1a855d9e832252a105420ad4d15011505512a1a1d814647451b5cca9"}, +] + +[[package]] +name = "aiosignal" +version = "1.3.2" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, + {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "analytics-python" +version = "1.4.post1" +description = "The hassle-free way to integrate analytics into any python application." +optional = false +python-versions = "*" +groups = ["test"] +files = [ + {file = "analytics-python-1.4.post1.tar.gz", hash = "sha256:b083e69c149c39e7ad17067f0e5c1742fbd15fdc469ade36c4d1ad5edf31ee5e"}, + {file = "analytics_python-1.4.post1-py2.py3-none-any.whl", hash = "sha256:33ab660150d0f37bb2fefc93fd19c9e7bd85e5b17db44df5e7e1139f63c14246"}, +] + +[package.dependencies] +backoff = "1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +test = ["flake8 (==3.7.9)", "mock (==2.0.0)", "pylint (==1.9.3)"] + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anthropic" +version = "0.47.2" +description = "The official Python library for the anthropic API" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "anthropic-0.47.2-py3-none-any.whl", hash = "sha256:61b712a56308fce69f04d92ba0230ab2bc187b5bce17811d400843a8976bb67f"}, + {file = "anthropic-0.47.2.tar.gz", hash = "sha256:452f4ca0c56ffab8b6ce9928bf8470650f88106a7001b250895eb65c54cfa44c"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +typing-extensions = ">=4.10,<5" + +[package.extras] +bedrock = ["boto3 (>=1.28.57)", "botocore (>=1.31.57)"] +vertex = ["google-auth (>=2,<3)"] + +[[package]] +name = "anyio" +version = "4.9.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, + {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "anytree" +version = "2.12.1" +description = "Powerful and Lightweight Python Tree Data Structure with various plugins" +optional = false +python-versions = ">=3.7.2,<4" +groups = ["main"] +files = [ + {file = "anytree-2.12.1-py3-none-any.whl", hash = "sha256:5ea9e61caf96db1e5b3d0a914378d2cd83c269dfce1fb8242ce96589fa3382f0"}, + {file = "anytree-2.12.1.tar.gz", hash = "sha256:244def434ccf31b668ed282954e5d315b4e066c4940b94aff4a7962d85947830"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "appdirs" +version = "1.4.4" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = "*" +groups = ["pyppeteer"] +files = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] + +[[package]] +name = "appnope" +version = "0.1.4" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = ">=3.6" +groups = ["main"] +markers = "sys_platform == \"darwin\" or platform_system == \"Darwin\"" +files = [ + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, +] + +[[package]] +name = "asgiref" +version = "3.8.1" +description = "ASGI specs, helper code, and adapters" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, + {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + +[package.extras] +tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] + +[[package]] +name = "astroid" +version = "3.0.3" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.8.0" +groups = ["main", "dev", "test"] +files = [ + {file = "astroid-3.0.3-py3-none-any.whl", hash = "sha256:92fcf218b89f449cdf9f7b39a269f8d5d617b27be68434912e11e79203963a17"}, + {file = "astroid-3.0.3.tar.gz", hash = "sha256:4148645659b08b70d72460ed1921158027a9e53ae8b7234149b1400eddacbb93"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "asttokens" +version = "3.0.0" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, +] + +[package.extras] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +groups = ["main", "test"] +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + +[[package]] +name = "attrs" +version = "25.3.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.8" +groups = ["main", "selenium", "test"] +files = [ + {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, + {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, +] + +[package.extras] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] + +[[package]] +name = "azure-cognitiveservices-speech" +version = "1.43.0" +description = "Microsoft Cognitive Services Speech SDK for Python" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:af81ef91103f9174095f4dcdc173fbce180c9d4d7956f03d79859c9a10e8b320"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ac09cc81ab01d0db4e2d9a79a3894c6a8d09e1359d0eeb5070aa9194a0c84576"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:e12527746fc5bff040c66e20172544e9708e10b29d9f3acc365576d44ccb7c5c"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:07bdedba8494edfb24306279d3b0500ece016fc811ec0b3366707a75d118a245"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-win32.whl", hash = "sha256:36570806a6b8fe12696a0372193ecc623bc629e355fa1edc67c03ac71731066b"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-win_amd64.whl", hash = "sha256:50a50aabc69434d1311c09eaa640622c1d47d270e6cbcf5d192a04325cb7de4c"}, + {file = "azure_cognitiveservices_speech-1.43.0-py3-none-win_arm64.whl", hash = "sha256:29dab439a3789196c38b169a74fb4eefa4ede59e79f062541c08cc39a2d786a5"}, +] + +[[package]] +name = "backoff" +version = "1.10.0" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["test"] +files = [ + {file = "backoff-1.10.0-py2.py3-none-any.whl", hash = "sha256:5e73e2cbe780e1915a204799dba0a01896f45f4385e636bcca7a0614d879d0cd"}, + {file = "backoff-1.10.0.tar.gz", hash = "sha256:b8fba021fac74055ac05eb7c7bfce4723aedde6cd0a504e5326bcb0bdd6d19a4"}, +] + +[[package]] +name = "bce-python-sdk" +version = "0.9.29" +description = "BCE SDK for python" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,<4,>=2.7" +groups = ["main"] +files = [ + {file = "bce_python_sdk-0.9.29-py3-none-any.whl", hash = "sha256:6518dc0ada422acd1841eeabcb7f89cfc07e3bb1a4be3c75945cab953907b555"}, + {file = "bce_python_sdk-0.9.29.tar.gz", hash = "sha256:326fbd50d57bf6d2fc21d58f589b069e0e84fc0a8733be9575c109293ab08cc4"}, +] + +[package.dependencies] +future = ">=0.6.0" +pycryptodome = ">=3.8.0" +six = ">=1.4.0" + +[[package]] +name = "bcrypt" +version = "4.3.0" +description = "Modern password hashing for your software and your servers" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "bcrypt-4.3.0-cp313-cp313t-macosx_10_12_universal2.whl", hash = "sha256:f01e060f14b6b57bbb72fc5b4a83ac21c443c9a2ee708e04a10e9192f90a6281"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5eeac541cefd0bb887a371ef73c62c3cd78535e4887b310626036a7c0a817bb"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59e1aa0e2cd871b08ca146ed08445038f42ff75968c7ae50d2fdd7860ade2180"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:0042b2e342e9ae3d2ed22727c1262f76cc4f345683b5c1715f0250cf4277294f"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74a8d21a09f5e025a9a23e7c0fd2c7fe8e7503e4d356c0a2c1486ba010619f09"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:0142b2cb84a009f8452c8c5a33ace5e3dfec4159e7735f5afe9a4d50a8ea722d"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_34_aarch64.whl", hash = "sha256:12fa6ce40cde3f0b899729dbd7d5e8811cb892d31b6f7d0334a1f37748b789fd"}, + {file = "bcrypt-4.3.0-cp313-cp313t-manylinux_2_34_x86_64.whl", hash = "sha256:5bd3cca1f2aa5dbcf39e2aa13dd094ea181f48959e1071265de49cc2b82525af"}, + {file = "bcrypt-4.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:335a420cfd63fc5bc27308e929bee231c15c85cc4c496610ffb17923abf7f231"}, + {file = "bcrypt-4.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:0e30e5e67aed0187a1764911af023043b4542e70a7461ad20e837e94d23e1d6c"}, + {file = "bcrypt-4.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b8d62290ebefd49ee0b3ce7500f5dbdcf13b81402c05f6dafab9a1e1b27212f"}, + {file = "bcrypt-4.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2ef6630e0ec01376f59a006dc72918b1bf436c3b571b80fa1968d775fa02fe7d"}, + {file = "bcrypt-4.3.0-cp313-cp313t-win32.whl", hash = "sha256:7a4be4cbf241afee43f1c3969b9103a41b40bcb3a3f467ab19f891d9bc4642e4"}, + {file = "bcrypt-4.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c1949bf259a388863ced887c7861da1df681cb2388645766c89fdfd9004c669"}, + {file = "bcrypt-4.3.0-cp38-abi3-macosx_10_12_universal2.whl", hash = "sha256:f81b0ed2639568bf14749112298f9e4e2b28853dab50a8b357e31798686a036d"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:864f8f19adbe13b7de11ba15d85d4a428c7e2f344bac110f667676a0ff84924b"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e36506d001e93bffe59754397572f21bb5dc7c83f54454c990c74a468cd589e"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:842d08d75d9fe9fb94b18b071090220697f9f184d4547179b60734846461ed59"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7c03296b85cb87db865d91da79bf63d5609284fc0cab9472fdd8367bbd830753"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:62f26585e8b219cdc909b6a0069efc5e4267e25d4a3770a364ac58024f62a761"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:beeefe437218a65322fbd0069eb437e7c98137e08f22c4660ac2dc795c31f8bb"}, + {file = "bcrypt-4.3.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:97eea7408db3a5bcce4a55d13245ab3fa566e23b4c67cd227062bb49e26c585d"}, + {file = "bcrypt-4.3.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:191354ebfe305e84f344c5964c7cd5f924a3bfc5d405c75ad07f232b6dffb49f"}, + {file = "bcrypt-4.3.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:41261d64150858eeb5ff43c753c4b216991e0ae16614a308a15d909503617732"}, + {file = "bcrypt-4.3.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:33752b1ba962ee793fa2b6321404bf20011fe45b9afd2a842139de3011898fef"}, + {file = "bcrypt-4.3.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:50e6e80a4bfd23a25f5c05b90167c19030cf9f87930f7cb2eacb99f45d1c3304"}, + {file = "bcrypt-4.3.0-cp38-abi3-win32.whl", hash = "sha256:67a561c4d9fb9465ec866177e7aebcad08fe23aaf6fbd692a6fab69088abfc51"}, + {file = "bcrypt-4.3.0-cp38-abi3-win_amd64.whl", hash = "sha256:584027857bc2843772114717a7490a37f68da563b3620f78a849bcb54dc11e62"}, + {file = "bcrypt-4.3.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0d3efb1157edebfd9128e4e46e2ac1a64e0c1fe46fb023158a407c7892b0f8c3"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08bacc884fd302b611226c01014eca277d48f0a05187666bca23aac0dad6fe24"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6746e6fec103fcd509b96bacdfdaa2fbde9a553245dbada284435173a6f1aef"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:afe327968aaf13fc143a56a3360cb27d4ad0345e34da12c7290f1b00b8fe9a8b"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d9af79d322e735b1fc33404b5765108ae0ff232d4b54666d46730f8ac1a43676"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f1e3ffa1365e8702dc48c8b360fef8d7afeca482809c5e45e653af82ccd088c1"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:3004df1b323d10021fda07a813fd33e0fd57bef0e9a480bb143877f6cba996fe"}, + {file = "bcrypt-4.3.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:531457e5c839d8caea9b589a1bcfe3756b0547d7814e9ce3d437f17da75c32b0"}, + {file = "bcrypt-4.3.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:17a854d9a7a476a89dcef6c8bd119ad23e0f82557afbd2c442777a16408e614f"}, + {file = "bcrypt-4.3.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6fb1fd3ab08c0cbc6826a2e0447610c6f09e983a281b919ed721ad32236b8b23"}, + {file = "bcrypt-4.3.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e965a9c1e9a393b8005031ff52583cedc15b7884fce7deb8b0346388837d6cfe"}, + {file = "bcrypt-4.3.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:79e70b8342a33b52b55d93b3a59223a844962bef479f6a0ea318ebbcadf71505"}, + {file = "bcrypt-4.3.0-cp39-abi3-win32.whl", hash = "sha256:b4d4e57f0a63fd0b358eb765063ff661328f69a04494427265950c71b992a39a"}, + {file = "bcrypt-4.3.0-cp39-abi3-win_amd64.whl", hash = "sha256:e53e074b120f2877a35cc6c736b8eb161377caae8925c17688bd46ba56daaa5b"}, + {file = "bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c950d682f0952bafcceaf709761da0a32a942272fad381081b51096ffa46cea1"}, + {file = "bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:107d53b5c67e0bbc3f03ebf5b030e0403d24dda980f8e244795335ba7b4a027d"}, + {file = "bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:b693dbb82b3c27a1604a3dff5bfc5418a7e6a781bb795288141e5f80cf3a3492"}, + {file = "bcrypt-4.3.0-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:b6354d3760fcd31994a14c89659dee887f1351a06e5dac3c1142307172a79f90"}, + {file = "bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a839320bf27d474e52ef8cb16449bb2ce0ba03ca9f44daba6d93fa1d8828e48a"}, + {file = "bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:bdc6a24e754a555d7316fa4774e64c6c3997d27ed2d1964d55920c7c227bc4ce"}, + {file = "bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:55a935b8e9a1d2def0626c4269db3fcd26728cbff1e84f0341465c31c4ee56d8"}, + {file = "bcrypt-4.3.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:57967b7a28d855313a963aaea51bf6df89f833db4320da458e5b3c5ab6d4c938"}, + {file = "bcrypt-4.3.0.tar.gz", hash = "sha256:3a3fd2204178b6d2adcf09cb4f6426ffef54762577a7c9b54c159008cb288c18"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +groups = ["main", "selenium"] +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "black" +version = "23.12.1" +description = "The uncompromising code formatter." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, + {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, + {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, + {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, + {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, + {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, + {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, + {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, + {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, + {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, + {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, + {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, + {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, + {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, + {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, + {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, + {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, + {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, + {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, + {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, + {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, + {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, +] + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4) ; sys_platform != \"win32\" or implementation_name != \"pypy\"", "aiohttp (>=3.7.4,!=3.9.0) ; sys_platform == \"win32\" and implementation_name == \"pypy\""] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "boto3" +version = "1.34.69" +description = "The AWS SDK for Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "boto3-1.34.69-py3-none-any.whl", hash = "sha256:2e25ef6bd325217c2da329829478be063155897d8d3b29f31f7f23ab548519b1"}, + {file = "boto3-1.34.69.tar.gz", hash = "sha256:898a5fed26b1351352703421d1a8b886ef2a74be6c97d5ecc92432ae01fda203"}, +] + +[package.dependencies] +botocore = ">=1.34.69,<1.35.0" +jmespath = ">=0.7.1,<2.0.0" +s3transfer = ">=0.10.0,<0.11.0" + +[package.extras] +crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] + +[[package]] +name = "botocore" +version = "1.34.69" +description = "Low-level, data-driven core of boto 3." +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "botocore-1.34.69-py3-none-any.whl", hash = "sha256:d3802d076d4d507bf506f9845a6970ce43adc3d819dd57c2791f5c19ed6e5950"}, + {file = "botocore-1.34.69.tar.gz", hash = "sha256:d1ab2bff3c2fd51719c2021d9fa2f30fbb9ed0a308f69e9a774ac92c8091380a"}, +] + +[package.dependencies] +jmespath = ">=0.7.1,<2.0.0" +python-dateutil = ">=2.1,<3.0.0" +urllib3 = [ + {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, + {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, +] + +[package.extras] +crt = ["awscrt (==0.19.19)"] + +[[package]] +name = "cachetools" +version = "5.5.2" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +groups = ["main", "search-google", "test"] +files = [ + {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, + {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, +] + +[[package]] +name = "camel-converter" +version = "4.0.1" +description = "Converts a string from snake case to camel case or camel case to snake case" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "camel_converter-4.0.1-py3-none-any.whl", hash = "sha256:0cba7ca1354a29ca2191983deecc9dcf28889f606c28d6ed18ac7d4586b163ac"}, + {file = "camel_converter-4.0.1.tar.gz", hash = "sha256:401414549ae4ac4073e38cdc4aa6d464dc534fc40aa06ff787bf0960b0c86535"}, +] + +[package.dependencies] +pydantic = {version = ">=2.0.0", optional = true, markers = "extra == \"pydantic\""} + +[package.extras] +pydantic = ["pydantic (>=2.0.0)"] + +[[package]] +name = "certifi" +version = "2025.1.31" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +groups = ["main", "pyppeteer", "search-ddg", "search-google", "selenium", "test"] +files = [ + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, +] + +[[package]] +name = "cffi" +version = "1.17.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +groups = ["main", "search-ddg", "selenium", "test"] +files = [ + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, +] +markers = {selenium = "implementation_name != \"pypy\" and os_name == \"nt\""} + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "channels" +version = "4.0.0" +description = "Brings async, event-driven capabilities to Django 3.2 and up." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "channels-4.0.0-py3-none-any.whl", hash = "sha256:2253334ac76f67cba68c2072273f7e0e67dbdac77eeb7e318f511d2f9a53c5e4"}, + {file = "channels-4.0.0.tar.gz", hash = "sha256:0ce53507a7da7b148eaa454526e0e05f7da5e5d1c23440e4886cf146981d8420"}, +] + +[package.dependencies] +asgiref = ">=3.5.0,<4" +Django = ">=3.2" + +[package.extras] +daphne = ["daphne (>=4.0.0)"] +tests = ["async-timeout", "coverage (>=4.5,<5.0)", "pytest", "pytest-asyncio", "pytest-django"] + +[[package]] +name = "chardet" +version = "5.2.0" +description = "Universal encoding detector for Python 3" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["main", "search-google", "selenium", "test"] +files = [ + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, +] + +[[package]] +name = "click" +version = "8.1.8" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +groups = ["main", "dev", "search-ddg", "test"] +files = [ + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "cloudpickle" +version = "3.1.1" +description = "Pickler class to extend the standard pickle.Pickler functionality" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"}, + {file = "cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev", "pyppeteer", "search-ddg", "test"] +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +markers = {main = "sys_platform == \"win32\" or platform_system == \"Windows\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\"", pyppeteer = "platform_system == \"Windows\"", search-ddg = "platform_system == \"Windows\"", test = "platform_system == \"Windows\" or sys_platform == \"win32\""} + +[[package]] +name = "comm" +version = "0.2.2" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, +] + +[package.dependencies] +traitlets = ">=4" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "connexion" +version = "3.2.0" +description = "Connexion - API first applications with OpenAPI/Swagger" +optional = false +python-versions = "<4.0,>=3.8" +groups = ["test"] +files = [ + {file = "connexion-3.2.0-py3-none-any.whl", hash = "sha256:905950337d40f526fb4f2eed3b15fc15d8c367625921ab9442954a025d3e03b3"}, + {file = "connexion-3.2.0.tar.gz", hash = "sha256:0715d4a0393437aa2a48c144756360f9b5292635a05fd15c38cbbaf04ef5acb9"}, +] + +[package.dependencies] +asgiref = ">=3.4" +httpx = ">=0.23" +inflection = ">=0.3.1" +Jinja2 = ">=3.0.0" +jsonschema = ">=4.17.3" +python-multipart = ">=0.0.15" +PyYAML = ">=5.1" +requests = ">=2.27" +starlette = ">=0.35" +typing-extensions = ">=4.6.1" +uvicorn = {version = ">=0.17.6", extras = ["standard"], optional = true, markers = "extra == \"uvicorn\""} +werkzeug = ">=2.2.1" + +[package.extras] +flask = ["a2wsgi (>=1.7)", "flask[async] (>=2.2)"] +mock = ["jsf (>=0.10.0)"] +swagger-ui = ["swagger-ui-bundle (>=1.1.0)"] +uvicorn = ["uvicorn[standard] (>=0.17.6)"] + +[[package]] +name = "contourpy" +version = "1.3.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, + {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, + {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, + {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, + {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, + {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, + {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, + {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, + {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, + {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, + {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, + {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, +] + +[package.dependencies] +numpy = ">=1.23" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "contourpy" +version = "1.3.1" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.10" +groups = ["test"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, + {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453"}, + {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277"}, + {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595"}, + {file = "contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697"}, + {file = "contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b"}, + {file = "contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85"}, + {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291"}, + {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f"}, + {file = "contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"}, + {file = "contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509"}, + {file = "contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec"}, + {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b"}, + {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d"}, + {file = "contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e"}, + {file = "contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2"}, + {file = "contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7"}, + {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3"}, + {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1"}, + {file = "contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82"}, + {file = "contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30"}, + {file = "contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f"}, + {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242"}, + {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1"}, + {file = "contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750"}, + {file = "contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53"}, + {file = "contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699"}, +] + +[package.dependencies] +numpy = ">=1.23" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "coverage" +version = "7.8.0" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "coverage-7.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe"}, + {file = "coverage-7.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c8a5c139aae4c35cbd7cadca1df02ea8cf28a911534fc1b0456acb0b14234f3"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a26c0c795c3e0b63ec7da6efded5f0bc856d7c0b24b2ac84b4d1d7bc578d676"}, + {file = "coverage-7.8.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821f7bcbaa84318287115d54becb1915eece6918136c6f91045bb84e2f88739d"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a321c61477ff8ee705b8a5fed370b5710c56b3a52d17b983d9215861e37b642a"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ed2144b8a78f9d94d9515963ed273d620e07846acd5d4b0a642d4849e8d91a0c"}, + {file = "coverage-7.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:042e7841a26498fff7a37d6fda770d17519982f5b7d8bf5278d140b67b61095f"}, + {file = "coverage-7.8.0-cp310-cp310-win32.whl", hash = "sha256:f9983d01d7705b2d1f7a95e10bbe4091fabc03a46881a256c2787637b087003f"}, + {file = "coverage-7.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a570cd9bd20b85d1a0d7b009aaf6c110b52b5755c17be6962f8ccd65d1dbd23"}, + {file = "coverage-7.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7ac22a0bb2c7c49f441f7a6d46c9c80d96e56f5a8bc6972529ed43c8b694e27"}, + {file = "coverage-7.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf13d564d310c156d1c8e53877baf2993fb3073b2fc9f69790ca6a732eb4bfea"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5761c70c017c1b0d21b0815a920ffb94a670c8d5d409d9b38857874c21f70d7"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ff52d790c7e1628241ffbcaeb33e07d14b007b6eb00a19320c7b8a7024c040"}, + {file = "coverage-7.8.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d39fc4817fd67b3915256af5dda75fd4ee10621a3d484524487e33416c6f3543"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b44674870709017e4b4036e3d0d6c17f06a0e6d4436422e0ad29b882c40697d2"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8f99eb72bf27cbb167b636eb1726f590c00e1ad375002230607a844d9e9a2318"}, + {file = "coverage-7.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b571bf5341ba8c6bc02e0baeaf3b061ab993bf372d982ae509807e7f112554e9"}, + {file = "coverage-7.8.0-cp311-cp311-win32.whl", hash = "sha256:e75a2ad7b647fd8046d58c3132d7eaf31b12d8a53c0e4b21fa9c4d23d6ee6d3c"}, + {file = "coverage-7.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3043ba1c88b2139126fc72cb48574b90e2e0546d4c78b5299317f61b7f718b78"}, + {file = "coverage-7.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bbb5cc845a0292e0c520656d19d7ce40e18d0e19b22cb3e0409135a575bf79fc"}, + {file = "coverage-7.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4dfd9a93db9e78666d178d4f08a5408aa3f2474ad4d0e0378ed5f2ef71640cb6"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f017a61399f13aa6d1039f75cd467be388d157cd81f1a119b9d9a68ba6f2830d"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0915742f4c82208ebf47a2b154a5334155ed9ef9fe6190674b8a46c2fb89cb05"}, + {file = "coverage-7.8.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a40fcf208e021eb14b0fac6bdb045c0e0cab53105f93ba0d03fd934c956143a"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a1f406a8e0995d654b2ad87c62caf6befa767885301f3b8f6f73e6f3c31ec3a6"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:77af0f6447a582fdc7de5e06fa3757a3ef87769fbb0fdbdeba78c23049140a47"}, + {file = "coverage-7.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f2d32f95922927186c6dbc8bc60df0d186b6edb828d299ab10898ef3f40052fe"}, + {file = "coverage-7.8.0-cp312-cp312-win32.whl", hash = "sha256:769773614e676f9d8e8a0980dd7740f09a6ea386d0f383db6821df07d0f08545"}, + {file = "coverage-7.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:e5d2b9be5b0693cf21eb4ce0ec8d211efb43966f6657807f6859aab3814f946b"}, + {file = "coverage-7.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ac46d0c2dd5820ce93943a501ac5f6548ea81594777ca585bf002aa8854cacd"}, + {file = "coverage-7.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:771eb7587a0563ca5bb6f622b9ed7f9d07bd08900f7589b4febff05f469bea00"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42421e04069fb2cbcbca5a696c4050b84a43b05392679d4068acbe65449b5c64"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:554fec1199d93ab30adaa751db68acec2b41c5602ac944bb19187cb9a41a8067"}, + {file = "coverage-7.8.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aaeb00761f985007b38cf463b1d160a14a22c34eb3f6a39d9ad6fc27cb73008"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:581a40c7b94921fffd6457ffe532259813fc68eb2bdda60fa8cc343414ce3733"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f319bae0321bc838e205bf9e5bc28f0a3165f30c203b610f17ab5552cff90323"}, + {file = "coverage-7.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04bfec25a8ef1c5f41f5e7e5c842f6b615599ca8ba8391ec33a9290d9d2db3a3"}, + {file = "coverage-7.8.0-cp313-cp313-win32.whl", hash = "sha256:dd19608788b50eed889e13a5d71d832edc34fc9dfce606f66e8f9f917eef910d"}, + {file = "coverage-7.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:a9abbccd778d98e9c7e85038e35e91e67f5b520776781d9a1e2ee9d400869487"}, + {file = "coverage-7.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:18c5ae6d061ad5b3e7eef4363fb27a0576012a7447af48be6c75b88494c6cf25"}, + {file = "coverage-7.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95aa6ae391a22bbbce1b77ddac846c98c5473de0372ba5c463480043a07bff42"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e013b07ba1c748dacc2a80e69a46286ff145935f260eb8c72df7185bf048f502"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d766a4f0e5aa1ba056ec3496243150698dc0481902e2b8559314368717be82b1"}, + {file = "coverage-7.8.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad80e6b4a0c3cb6f10f29ae4c60e991f424e6b14219d46f1e7d442b938ee68a4"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b87eb6fc9e1bb8f98892a2458781348fa37e6925f35bb6ceb9d4afd54ba36c73"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d1ba00ae33be84066cfbe7361d4e04dec78445b2b88bdb734d0d1cbab916025a"}, + {file = "coverage-7.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f3c38e4e5ccbdc9198aecc766cedbb134b2d89bf64533973678dfcf07effd883"}, + {file = "coverage-7.8.0-cp313-cp313t-win32.whl", hash = "sha256:379fe315e206b14e21db5240f89dc0774bdd3e25c3c58c2c733c99eca96f1ada"}, + {file = "coverage-7.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2e4b6b87bb0c846a9315e3ab4be2d52fac905100565f4b92f02c445c8799e257"}, + {file = "coverage-7.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f"}, + {file = "coverage-7.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96121edfa4c2dfdda409877ea8608dd01de816a4dc4a0523356067b305e4e17a"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8af63b9afa1031c0ef05b217faa598f3069148eeee6bb24b79da9012423b82"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89b1f4af0d4afe495cd4787a68e00f30f1d15939f550e869de90a86efa7e0814"}, + {file = "coverage-7.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94ec0be97723ae72d63d3aa41961a0b9a6f5a53ff599813c324548d18e3b9e8c"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a1d96e780bdb2d0cbb297325711701f7c0b6f89199a57f2049e90064c29f6bd"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f1d8a2a57b47142b10374902777e798784abf400a004b14f1b0b9eaf1e528ba4"}, + {file = "coverage-7.8.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cf60dd2696b457b710dd40bf17ad269d5f5457b96442f7f85722bdb16fa6c899"}, + {file = "coverage-7.8.0-cp39-cp39-win32.whl", hash = "sha256:be945402e03de47ba1872cd5236395e0f4ad635526185a930735f66710e1bd3f"}, + {file = "coverage-7.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:90e7fbc6216ecaffa5a880cdc9c77b7418c1dcb166166b78dbc630d07f278cc3"}, + {file = "coverage-7.8.0-pp39.pp310.pp311-none-any.whl", hash = "sha256:b8194fb8e50d556d5849753de991d390c5a1edeeba50f68e3a9253fbd8bf8ccd"}, + {file = "coverage-7.8.0-py3-none-any.whl", hash = "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7"}, + {file = "coverage-7.8.0.tar.gz", hash = "sha256:7a3d62b3b03b4b6fd41a085f3574874cf946cb4604d2b4d3e8dca8cd570ca501"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] + +[[package]] +name = "cryptography" +version = "43.0.3" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = ">=3.7" +groups = ["main", "test"] +files = [ + {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, + {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, + {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, + {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, + {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, + {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, + {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "curl-cffi" +version = "0.7.4" +description = "libcurl ffi bindings for Python, with impersonation support." +optional = false +python-versions = ">=3.8" +groups = ["main", "search-ddg"] +files = [ + {file = "curl_cffi-0.7.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:417f5264fa746d2680ebb20fbfbcfe5d77fa11a735548d9db6734e839a238e22"}, + {file = "curl_cffi-0.7.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:fb76b654fcf9f3e0400cf13be949e4fc525aeb0f9e2e90e61ae48d5bd8557d25"}, + {file = "curl_cffi-0.7.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb9db59b164f2b6be65be62add5896a6fe125c52572aca3046caffbd7eb38f46"}, + {file = "curl_cffi-0.7.4-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4593b120c8101b327e4e2d2c278652c5ef58c42dd39dc4586c2789e42a8bc8b1"}, + {file = "curl_cffi-0.7.4-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4b5685fab3984aae559e6590a6434a7e34f5d615c562c29c1554a90fffbf0bd"}, + {file = "curl_cffi-0.7.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:3f8c19b5ca979e806fcf4de24f606eff745c85b43e9e88956d1db3c07516cc4b"}, + {file = "curl_cffi-0.7.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9957464013b1f76b0e9259ab846fa60faef7ff08e96e7a1764dd63c83005b836"}, + {file = "curl_cffi-0.7.4-cp38-abi3-win32.whl", hash = "sha256:8e9019cf6996bf508e4a51751d7217f22d5902405878679a3ac4757159251741"}, + {file = "curl_cffi-0.7.4-cp38-abi3-win_amd64.whl", hash = "sha256:31a80d5ab1bc0f9d4bc0f98d91dc1a3ed4aa08566f21b76ecfde23ece08e0fa9"}, + {file = "curl_cffi-0.7.4.tar.gz", hash = "sha256:37a2c8ec77b9914b0c14c74f604991751948d9d5def58fcddcbe73e3b62111c1"}, +] + +[package.dependencies] +certifi = ">=2024.2.2" +cffi = ">=1.12.0" +typing-extensions = "*" + +[package.extras] +build = ["cibuildwheel", "wheel"] +dev = ["charset-normalizer (>=3.3.2,<4.0)", "coverage (>=6.4.1,<7.0)", "cryptography (>=42.0.5,<43.0)", "httpx (==0.23.1)", "mypy (>=1.9.0,<2.0)", "pytest (>=8.1.1,<9.0)", "pytest-asyncio (>=0.23.6,<1.0)", "pytest-trio (>=0.8.0,<1.0)", "ruff (>=0.3.5,<1.0)", "trio (>=0.25.0,<1.0)", "trustme (>=1.1.0,<2.0)", "uvicorn (>=0.29.0,<1.0)", "websockets (>=12.0,<13.0)"] +test = ["charset-normalizer (>=3.3.2,<4.0)", "cryptography (>=42.0.5,<43.0)", "fastapi (==0.110.0)", "httpx (==0.23.1)", "proxy.py (>=2.4.3,<3.0)", "pytest (>=8.1.1,<9.0)", "pytest-asyncio (>=0.23.6,<1.0)", "pytest-trio (>=0.8.0,<1.0)", "python-multipart (>=0.0.9,<1.0)", "trio (>=0.25.0,<1.0)", "trustme (>=1.1.0,<2.0)", "uvicorn (>=0.29.0,<1.0)", "websockets (>=12.0,<13.0)"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + +[[package]] +name = "dashscope" +version = "1.23.0" +description = "dashscope client sdk library" +optional = false +python-versions = ">=3.8.0" +groups = ["main"] +files = [ + {file = "dashscope-1.23.0-py3-none-any.whl", hash = "sha256:887a238e970ccca035b1554fbb2606662a8b557d8533b8afc6a532580c12a099"}, +] + +[package.dependencies] +aiohttp = "*" +requests = "*" +websocket-client = "*" + +[package.extras] +tokenizer = ["tiktoken"] + +[[package]] +name = "debugpy" +version = "1.8.13" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "debugpy-1.8.13-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:06859f68e817966723ffe046b896b1bd75c665996a77313370336ee9e1de3e90"}, + {file = "debugpy-1.8.13-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c2db69fb8df3168bc857d7b7d2494fed295dfdbde9a45f27b4b152f37520"}, + {file = "debugpy-1.8.13-cp310-cp310-win32.whl", hash = "sha256:46abe0b821cad751fc1fb9f860fb2e68d75e2c5d360986d0136cd1db8cad4428"}, + {file = "debugpy-1.8.13-cp310-cp310-win_amd64.whl", hash = "sha256:dc7b77f5d32674686a5f06955e4b18c0e41fb5a605f5b33cf225790f114cfeec"}, + {file = "debugpy-1.8.13-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:eee02b2ed52a563126c97bf04194af48f2fe1f68bb522a312b05935798e922ff"}, + {file = "debugpy-1.8.13-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4caca674206e97c85c034c1efab4483f33971d4e02e73081265ecb612af65377"}, + {file = "debugpy-1.8.13-cp311-cp311-win32.whl", hash = "sha256:7d9a05efc6973b5aaf076d779cf3a6bbb1199e059a17738a2aa9d27a53bcc888"}, + {file = "debugpy-1.8.13-cp311-cp311-win_amd64.whl", hash = "sha256:62f9b4a861c256f37e163ada8cf5a81f4c8d5148fc17ee31fb46813bd658cdcc"}, + {file = "debugpy-1.8.13-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1"}, + {file = "debugpy-1.8.13-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522"}, + {file = "debugpy-1.8.13-cp312-cp312-win32.whl", hash = "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f"}, + {file = "debugpy-1.8.13-cp312-cp312-win_amd64.whl", hash = "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea"}, + {file = "debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503"}, + {file = "debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb"}, + {file = "debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02"}, + {file = "debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8"}, + {file = "debugpy-1.8.13-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:acf39a6e98630959763f9669feddee540745dfc45ad28dbc9bd1f9cd60639391"}, + {file = "debugpy-1.8.13-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:924464d87e7d905eb0d79fb70846558910e906d9ee309b60c4fe597a2e802590"}, + {file = "debugpy-1.8.13-cp38-cp38-win32.whl", hash = "sha256:3dae443739c6b604802da9f3e09b0f45ddf1cf23c99161f3a1a8039f61a8bb89"}, + {file = "debugpy-1.8.13-cp38-cp38-win_amd64.whl", hash = "sha256:ed93c3155fc1f888ab2b43626182174e457fc31b7781cd1845629303790b8ad1"}, + {file = "debugpy-1.8.13-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:6fab771639332bd8ceb769aacf454a30d14d7a964f2012bf9c4e04c60f16e85b"}, + {file = "debugpy-1.8.13-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32b6857f8263a969ce2ca098f228e5cc0604d277447ec05911a8c46cf3e7e307"}, + {file = "debugpy-1.8.13-cp39-cp39-win32.whl", hash = "sha256:f14d2c4efa1809da125ca62df41050d9c7cd9cb9e380a2685d1e453c4d450ccb"}, + {file = "debugpy-1.8.13-cp39-cp39-win_amd64.whl", hash = "sha256:ea869fe405880327497e6945c09365922c79d2a1eed4c3ae04d77ac7ae34b2b5"}, + {file = "debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f"}, + {file = "debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce"}, +] + +[[package]] +name = "decorator" +version = "5.2.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, + {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, +] + +[[package]] +name = "deprecated" +version = "1.2.18" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["main"] +files = [ + {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, + {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] + +[[package]] +name = "deprecation" +version = "2.1.0" +description = "A library to handle automated deprecations" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, + {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"}, +] + +[package.dependencies] +packaging = "*" + +[[package]] +name = "dill" +version = "0.3.9" +description = "serialize all of Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev", "test"] +files = [ + {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, + {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + +[[package]] +name = "diskcache" +version = "5.6.3" +description = "Disk Cache -- Disk and file backed persistent cache." +optional = false +python-versions = ">=3" +groups = ["main"] +files = [ + {file = "diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19"}, + {file = "diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc"}, +] + +[[package]] +name = "distlib" +version = "0.3.9" +description = "Distribution utilities" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, +] + +[[package]] +name = "distro" +version = "1.9.0" +description = "Distro - an OS platform information API" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, + {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, +] + +[[package]] +name = "django" +version = "4.2.20" +description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.9\"" +files = [ + {file = "Django-4.2.20-py3-none-any.whl", hash = "sha256:213381b6e4405f5c8703fffc29cd719efdf189dec60c67c04f76272b3dc845b9"}, + {file = "Django-4.2.20.tar.gz", hash = "sha256:92bac5b4432a64532abb73b2ac27203f485e40225d2640a7fbef2b62b876e789"}, +] + +[package.dependencies] +asgiref = ">=3.6.0,<4" +sqlparse = ">=0.3.1" +tzdata = {version = "*", markers = "sys_platform == \"win32\""} + +[package.extras] +argon2 = ["argon2-cffi (>=19.1.0)"] +bcrypt = ["bcrypt"] + +[[package]] +name = "django" +version = "5.2" +description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "Django-5.2-py3-none-any.whl", hash = "sha256:91ceed4e3a6db5aedced65e3c8f963118ea9ba753fc620831c77074e620e7d83"}, + {file = "Django-5.2.tar.gz", hash = "sha256:1a47f7a7a3d43ce64570d350e008d2949abe8c7e21737b351b6a1611277c6d89"}, +] + +[package.dependencies] +asgiref = ">=3.8.1" +sqlparse = ">=0.3.1" +tzdata = {version = "*", markers = "sys_platform == \"win32\""} + +[package.extras] +argon2 = ["argon2-cffi (>=19.1.0)"] +bcrypt = ["bcrypt"] + +[[package]] +name = "dnspython" +version = "2.7.0" +description = "DNS toolkit" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, + {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, +] + +[package.extras] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=43)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=1.0.0)"] +idna = ["idna (>=3.7)"] +trio = ["trio (>=0.23)"] +wmi = ["wmi (>=1.5.1)"] + +[[package]] +name = "duckduckgo-search" +version = "4.5.0" +description = "Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine." +optional = false +python-versions = ">=3.8" +groups = ["search-ddg"] +files = [ + {file = "duckduckgo_search-4.5.0-py3-none-any.whl", hash = "sha256:0057aee08d0f60bbb69b438b65e771c920cae46a5996f6682fffee38948f6930"}, + {file = "duckduckgo_search-4.5.0.tar.gz", hash = "sha256:36dd819cf45de7099c7311b17215933b80be74f2f8fdc8595b52d6ac01e23fc2"}, +] + +[package.dependencies] +click = ">=8.1.7" +curl-cffi = ">=0.6.1" +lxml = ">=5.1.0" + +[package.extras] +dev = ["pytest (>=8.0.1)", "ruff (>=0.2.2)"] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +description = "An implementation of lxml.xmlfile for the standard library" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, + {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +groups = ["main", "selenium", "test"] +markers = "python_version < \"3.11\"" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "execnet" +version = "2.1.1" +description = "execnet: rapid multi-Python deployment" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, +] + +[package.extras] +testing = ["hatch", "pre-commit", "pytest", "tox"] + +[[package]] +name = "executing" +version = "2.2.0" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, + {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] + +[[package]] +name = "faiss-cpu" +version = "1.7.4" +description = "A library for efficient similarity search and clustering of dense vectors." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "faiss-cpu-1.7.4.tar.gz", hash = "sha256:265dc31b0c079bf4433303bf6010f73922490adff9188b915e2d3f5e9c82dd0a"}, + {file = "faiss_cpu-1.7.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50d4ebe7f1869483751c558558504f818980292a9b55be36f9a1ee1009d9a686"}, + {file = "faiss_cpu-1.7.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7b1db7fae7bd8312aeedd0c41536bcd19a6e297229e1dce526bde3a73ab8c0b5"}, + {file = "faiss_cpu-1.7.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17b7fa7194a228a84929d9e6619d0e7dbf00cc0f717e3462253766f5e3d07de8"}, + {file = "faiss_cpu-1.7.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dca531952a2e3eac56f479ff22951af4715ee44788a3fe991d208d766d3f95f3"}, + {file = "faiss_cpu-1.7.4-cp310-cp310-win_amd64.whl", hash = "sha256:7173081d605e74766f950f2e3d6568a6f00c53f32fd9318063e96728c6c62821"}, + {file = "faiss_cpu-1.7.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d0bbd6f55d7940cc0692f79e32a58c66106c3c950cee2341b05722de9da23ea3"}, + {file = "faiss_cpu-1.7.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e13c14280376100f143767d0efe47dcb32618f69e62bbd3ea5cd38c2e1755926"}, + {file = "faiss_cpu-1.7.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c521cb8462f3b00c0c7dfb11caff492bb67816528b947be28a3b76373952c41d"}, + {file = "faiss_cpu-1.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afdd9fe1141117fed85961fd36ee627c83fc3b9fd47bafb52d3c849cc2f088b7"}, + {file = "faiss_cpu-1.7.4-cp311-cp311-win_amd64.whl", hash = "sha256:2ff7f57889ea31d945e3b87275be3cad5d55b6261a4e3f51c7aba304d76b81fb"}, + {file = "faiss_cpu-1.7.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:eeaf92f27d76249fb53c1adafe617b0f217ab65837acf7b4ec818511caf6e3d8"}, + {file = "faiss_cpu-1.7.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:102b1bd763e9b0c281ac312590af3eaf1c8b663ccbc1145821fe6a9f92b8eaaf"}, + {file = "faiss_cpu-1.7.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5512da6707c967310c46ff712b00418b7ae28e93cb609726136e826e9f2f14fa"}, + {file = "faiss_cpu-1.7.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0c2e5b9d8c28c99f990e87379d5bbcc6c914da91ebb4250166864fd12db5755b"}, + {file = "faiss_cpu-1.7.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:43f67f325393145d360171cd98786fcea6120ce50397319afd3bb78be409fb8a"}, + {file = "faiss_cpu-1.7.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6a4e4af194b8fce74c4b770cad67ad1dd1b4673677fc169723e4c50ba5bd97a8"}, + {file = "faiss_cpu-1.7.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31bfb7b9cffc36897ae02a983e04c09fe3b8c053110a287134751a115334a1df"}, + {file = "faiss_cpu-1.7.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52d7de96abef2340c0d373c1f5cbc78026a3cebb0f8f3a5920920a00210ead1f"}, + {file = "faiss_cpu-1.7.4-cp38-cp38-win_amd64.whl", hash = "sha256:699feef85b23c2c729d794e26ca69bebc0bee920d676028c06fd0e0becc15c7e"}, + {file = "faiss_cpu-1.7.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:559a0133f5ed44422acb09ee1ac0acffd90c6666d1bc0d671c18f6e93ad603e2"}, + {file = "faiss_cpu-1.7.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1d71539fe3dc0f1bed41ef954ca701678776f231046bf0ca22ccea5cf5bef6"}, + {file = "faiss_cpu-1.7.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12d45e0157024eb3249842163162983a1ac8b458f1a8b17bbf86f01be4585a99"}, + {file = "faiss_cpu-1.7.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f0eab359e066d32c874f51a7d4bf6440edeec068b7fe47e6d803c73605a8b4c"}, + {file = "faiss_cpu-1.7.4-cp39-cp39-win_amd64.whl", hash = "sha256:98459ceeeb735b9df1a5b94572106ffe0a6ce740eb7e4626715dd218657bb4dc"}, +] + +[[package]] +name = "farama-notifications" +version = "0.0.4" +description = "Notifications for all Farama Foundation maintained libraries." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "Farama-Notifications-0.0.4.tar.gz", hash = "sha256:13fceff2d14314cf80703c8266462ebf3733c7d165336eee998fc58e545efd18"}, + {file = "Farama_Notifications-0.0.4-py3-none-any.whl", hash = "sha256:14de931035a41961f7c056361dc7f980762a143d05791ef5794a751a2caf05ae"}, +] + +[[package]] +name = "fastapi" +version = "0.115.12" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"}, + {file = "fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.40.0,<0.47.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=3.1.5)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.18)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "fastjsonschema" +version = "2.21.1" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, + {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "ffmpy" +version = "0.5.0" +description = "A simple Python wrapper for FFmpeg" +optional = false +python-versions = "<4.0,>=3.8" +groups = ["test"] +files = [ + {file = "ffmpy-0.5.0-py3-none-any.whl", hash = "sha256:df3799cf5816daa56d4959a023630ee53c6768b66009dae6d131519ba4b80233"}, + {file = "ffmpy-0.5.0.tar.gz", hash = "sha256:277e131f246d18e9dcfee9bb514c50749031c43582ce5ef82c57b51e3d3955c3"}, +] + +[[package]] +name = "filelock" +version = "3.18.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, + {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] + +[[package]] +name = "fire" +version = "0.4.0" +description = "A library for automatically generating command line interfaces." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "fire-0.4.0.tar.gz", hash = "sha256:c5e2b8763699d1142393a46d0e3e790c5eb2f0706082df8f647878842c216a62"}, +] + +[package.dependencies] +six = "*" +termcolor = "*" + +[[package]] +name = "fonttools" +version = "4.57.0" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "fonttools-4.57.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:babe8d1eb059a53e560e7bf29f8e8f4accc8b6cfb9b5fd10e485bde77e71ef41"}, + {file = "fonttools-4.57.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:81aa97669cd726349eb7bd43ca540cf418b279ee3caba5e2e295fb4e8f841c02"}, + {file = "fonttools-4.57.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0e9618630edd1910ad4f07f60d77c184b2f572c8ee43305ea3265675cbbfe7e"}, + {file = "fonttools-4.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34687a5d21f1d688d7d8d416cb4c5b9c87fca8a1797ec0d74b9fdebfa55c09ab"}, + {file = "fonttools-4.57.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69ab81b66ebaa8d430ba56c7a5f9abe0183afefd3a2d6e483060343398b13fb1"}, + {file = "fonttools-4.57.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d639397de852f2ccfb3134b152c741406752640a266d9c1365b0f23d7b88077f"}, + {file = "fonttools-4.57.0-cp310-cp310-win32.whl", hash = "sha256:cc066cb98b912f525ae901a24cd381a656f024f76203bc85f78fcc9e66ae5aec"}, + {file = "fonttools-4.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7a64edd3ff6a7f711a15bd70b4458611fb240176ec11ad8845ccbab4fe6745db"}, + {file = "fonttools-4.57.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3871349303bdec958360eedb619169a779956503ffb4543bb3e6211e09b647c4"}, + {file = "fonttools-4.57.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c59375e85126b15a90fcba3443eaac58f3073ba091f02410eaa286da9ad80ed8"}, + {file = "fonttools-4.57.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967b65232e104f4b0f6370a62eb33089e00024f2ce143aecbf9755649421c683"}, + {file = "fonttools-4.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39acf68abdfc74e19de7485f8f7396fa4d2418efea239b7061d6ed6a2510c746"}, + {file = "fonttools-4.57.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d077f909f2343daf4495ba22bb0e23b62886e8ec7c109ee8234bdbd678cf344"}, + {file = "fonttools-4.57.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:46370ac47a1e91895d40e9ad48effbe8e9d9db1a4b80888095bc00e7beaa042f"}, + {file = "fonttools-4.57.0-cp311-cp311-win32.whl", hash = "sha256:ca2aed95855506b7ae94e8f1f6217b7673c929e4f4f1217bcaa236253055cb36"}, + {file = "fonttools-4.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:17168a4670bbe3775f3f3f72d23ee786bd965395381dfbb70111e25e81505b9d"}, + {file = "fonttools-4.57.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:889e45e976c74abc7256d3064aa7c1295aa283c6bb19810b9f8b604dfe5c7f31"}, + {file = "fonttools-4.57.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0425c2e052a5f1516c94e5855dbda706ae5a768631e9fcc34e57d074d1b65b92"}, + {file = "fonttools-4.57.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44c26a311be2ac130f40a96769264809d3b0cb297518669db437d1cc82974888"}, + {file = "fonttools-4.57.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c41ba992df5b8d680b89fd84c6a1f2aca2b9f1ae8a67400c8930cd4ea115f6"}, + {file = "fonttools-4.57.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ea1e9e43ca56b0c12440a7c689b1350066595bebcaa83baad05b8b2675129d98"}, + {file = "fonttools-4.57.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84fd56c78d431606332a0627c16e2a63d243d0d8b05521257d77c6529abe14d8"}, + {file = "fonttools-4.57.0-cp312-cp312-win32.whl", hash = "sha256:f4376819c1c778d59e0a31db5dc6ede854e9edf28bbfa5b756604727f7f800ac"}, + {file = "fonttools-4.57.0-cp312-cp312-win_amd64.whl", hash = "sha256:57e30241524879ea10cdf79c737037221f77cc126a8cdc8ff2c94d4a522504b9"}, + {file = "fonttools-4.57.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:408ce299696012d503b714778d89aa476f032414ae57e57b42e4b92363e0b8ef"}, + {file = "fonttools-4.57.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bbceffc80aa02d9e8b99f2a7491ed8c4a783b2fc4020119dc405ca14fb5c758c"}, + {file = "fonttools-4.57.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f022601f3ee9e1f6658ed6d184ce27fa5216cee5b82d279e0f0bde5deebece72"}, + {file = "fonttools-4.57.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dea5893b58d4637ffa925536462ba626f8a1b9ffbe2f5c272cdf2c6ebadb817"}, + {file = "fonttools-4.57.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dff02c5c8423a657c550b48231d0a48d7e2b2e131088e55983cfe74ccc2c7cc9"}, + {file = "fonttools-4.57.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:767604f244dc17c68d3e2dbf98e038d11a18abc078f2d0f84b6c24571d9c0b13"}, + {file = "fonttools-4.57.0-cp313-cp313-win32.whl", hash = "sha256:8e2e12d0d862f43d51e5afb8b9751c77e6bec7d2dc00aad80641364e9df5b199"}, + {file = "fonttools-4.57.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3"}, + {file = "fonttools-4.57.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9d57b4e23ebbe985125d3f0cabbf286efa191ab60bbadb9326091050d88e8213"}, + {file = "fonttools-4.57.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:579ba873d7f2a96f78b2e11028f7472146ae181cae0e4d814a37a09e93d5c5cc"}, + {file = "fonttools-4.57.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e3e1ec10c29bae0ea826b61f265ec5c858c5ba2ce2e69a71a62f285cf8e4595"}, + {file = "fonttools-4.57.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1968f2a2003c97c4ce6308dc2498d5fd4364ad309900930aa5a503c9851aec8"}, + {file = "fonttools-4.57.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:aff40f8ac6763d05c2c8f6d240c6dac4bb92640a86d9b0c3f3fff4404f34095c"}, + {file = "fonttools-4.57.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d07f1b64008e39fceae7aa99e38df8385d7d24a474a8c9872645c4397b674481"}, + {file = "fonttools-4.57.0-cp38-cp38-win32.whl", hash = "sha256:51d8482e96b28fb28aa8e50b5706f3cee06de85cbe2dce80dbd1917ae22ec5a6"}, + {file = "fonttools-4.57.0-cp38-cp38-win_amd64.whl", hash = "sha256:03290e818782e7edb159474144fca11e36a8ed6663d1fcbd5268eb550594fd8e"}, + {file = "fonttools-4.57.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7339e6a3283e4b0ade99cade51e97cde3d54cd6d1c3744459e886b66d630c8b3"}, + {file = "fonttools-4.57.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:05efceb2cb5f6ec92a4180fcb7a64aa8d3385fd49cfbbe459350229d1974f0b1"}, + {file = "fonttools-4.57.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a97bb05eb24637714a04dee85bdf0ad1941df64fe3b802ee4ac1c284a5f97b7c"}, + {file = "fonttools-4.57.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:541cb48191a19ceb1a2a4b90c1fcebd22a1ff7491010d3cf840dd3a68aebd654"}, + {file = "fonttools-4.57.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cdef9a056c222d0479a1fdb721430f9efd68268014c54e8166133d2643cb05d9"}, + {file = "fonttools-4.57.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3cf97236b192a50a4bf200dc5ba405aa78d4f537a2c6e4c624bb60466d5b03bd"}, + {file = "fonttools-4.57.0-cp39-cp39-win32.whl", hash = "sha256:e952c684274a7714b3160f57ec1d78309f955c6335c04433f07d36c5eb27b1f9"}, + {file = "fonttools-4.57.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2a722c0e4bfd9966a11ff55c895c817158fcce1b2b6700205a376403b546ad9"}, + {file = "fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f"}, + {file = "fonttools-4.57.0.tar.gz", hash = "sha256:727ece10e065be2f9dd239d15dd5d60a66e17eac11aea47d447f9f03fdbc42de"}, +] + +[package.extras] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr ; sys_platform == \"darwin\""] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] +woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] + +[[package]] +name = "frozenlist" +version = "1.5.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, + {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, + {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, + {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, + {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, + {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, + {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, + {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, + {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, + {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, + {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, + {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, + {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, + {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, + {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, + {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, + {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, + {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, + {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, + {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, + {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, + {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, + {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, + {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, + {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, + {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, + {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, + {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, + {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, + {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, + {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, + {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, +] + +[[package]] +name = "fsspec" +version = "2025.3.2" +description = "File-system specification" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "fsspec-2025.3.2-py3-none-any.whl", hash = "sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711"}, + {file = "fsspec-2025.3.2.tar.gz", hash = "sha256:e52c77ef398680bbd6a98c0e628fbc469491282981209907bbc8aea76a04fdc6"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +dev = ["pre-commit", "ruff"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] +tqdm = ["tqdm"] + +[[package]] +name = "future" +version = "1.0.0" +description = "Clean single-source support for Python 3 and 2" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main"] +files = [ + {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, + {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"}, + {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitignore-parser" +version = "0.1.9" +description = "A spec-compliant gitignore parser for Python 3.5+" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "gitignore_parser-0.1.9.tar.gz", hash = "sha256:270cb8cd09de410b8805c5f4183fd404c28f910dcbb94e1efc08226144fdff7d"}, +] + +[[package]] +name = "gitpython" +version = "3.1.40" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, + {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[package.extras] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] + +[[package]] +name = "google-ai-generativelanguage" +version = "0.4.0" +description = "Google Ai Generativelanguage API client library" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "google-ai-generativelanguage-0.4.0.tar.gz", hash = "sha256:c8199066c08f74c4e91290778329bb9f357ba1ea5d6f82de2bc0d10552bf4f8c"}, + {file = "google_ai_generativelanguage-0.4.0-py3-none-any.whl", hash = "sha256:e4c425376c1ee26c78acbc49a24f735f90ebfa81bf1a06495fae509a2433232c"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "google-api-core" +version = "2.17.1" +description = "Google API client core library" +optional = false +python-versions = ">=3.7" +groups = ["main", "search-google", "test"] +files = [ + {file = "google-api-core-2.17.1.tar.gz", hash = "sha256:9df18a1f87ee0df0bc4eea2770ebc4228392d8cc4066655b320e2cfccb15db95"}, + {file = "google_api_core-2.17.1-py3-none-any.whl", hash = "sha256:610c5b90092c360736baccf17bd3efbcb30dd380e7a6dc28a71059edb8bd0d8e"}, +] + +[package.dependencies] +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" +grpcio = [ + {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}, + {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, +] +grpcio-status = [ + {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""}, + {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, +] +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0) ; python_version >= \"3.11\""] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] + +[[package]] +name = "google-api-python-client" +version = "2.94.0" +description = "Google API Client Library for Python" +optional = false +python-versions = ">=3.7" +groups = ["search-google"] +files = [ + {file = "google-api-python-client-2.94.0.tar.gz", hash = "sha256:4ff598b7b83d5c0c5582927e74947286070b5b21a13e1bb64409fd92e45bfb26"}, + {file = "google_api_python_client-2.94.0-py2.py3-none-any.whl", hash = "sha256:28b2f0c2c6380a119e2efd7ecd28fa9d313becf37d71f00bfa49332428e071b4"}, +] + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0.dev0" +google-auth = ">=1.19.0,<3.0.0.dev0" +google-auth-httplib2 = ">=0.1.0" +httplib2 = ">=0.15.0,<1.dev0" +uritemplate = ">=3.0.1,<5" + +[[package]] +name = "google-auth" +version = "2.38.0" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +groups = ["main", "search-google", "test"] +files = [ + {file = "google_auth-2.38.0-py2.py3-none-any.whl", hash = "sha256:e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a"}, + {file = "google_auth-2.38.0.tar.gz", hash = "sha256:8285113607d3b80a3f1543b75962447ba8a09fe85783432a784fdeef6ac094c4"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography", "pyopenssl"] +pyjwt = ["cryptography (>=38.0.3)", "pyjwt (>=2.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "google-auth-httplib2" +version = "0.2.0" +description = "Google Authentication Library: httplib2 transport" +optional = false +python-versions = "*" +groups = ["search-google"] +files = [ + {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, + {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, +] + +[package.dependencies] +google-auth = "*" +httplib2 = ">=0.19.0" + +[[package]] +name = "google-generativeai" +version = "0.4.1" +description = "Google Generative AI High level API client library and tools." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "google_generativeai-0.4.1-py3-none-any.whl", hash = "sha256:89be3c00c2e688108fccefc50f47f45fc9d37ecd53c1ade9d86b5d982919c24a"}, +] + +[package.dependencies] +google-ai-generativelanguage = "0.4.0" +google-api-core = "*" +google-auth = ">=2.15.0" +protobuf = "*" +pydantic = "*" +tqdm = "*" +typing-extensions = "*" + +[package.extras] +dev = ["Pillow", "absl-py", "black", "ipython", "nose2", "pandas", "pytype", "pyyaml"] + +[[package]] +name = "googleapis-common-protos" +version = "1.69.2" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.7" +groups = ["main", "search-google", "test"] +files = [ + {file = "googleapis_common_protos-1.69.2-py3-none-any.whl", hash = "sha256:0b30452ff9c7a27d80bfc5718954063e8ab53dd3697093d3bc99581f5fd24212"}, + {file = "googleapis_common_protos-1.69.2.tar.gz", hash = "sha256:3e1b904a27a33c821b4b749fd31d334c0c9c30e6113023d495e48979a3dc9c5f"}, +] + +[package.dependencies] +protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0)"] + +[[package]] +name = "gradio" +version = "3.0" +description = "Python library for easily interacting with trained machine learning models" +optional = false +python-versions = "*" +groups = ["test"] +files = [ + {file = "gradio-3.0-py3-none-any.whl", hash = "sha256:edda941c4754c69d63e561e7ec5e5ce8e16ea1c420955cdb4e5fc7150d564ef3"}, + {file = "gradio-3.0.tar.gz", hash = "sha256:f23ed75bd1b27bb856ff89d730be3ad43f9846ce2e126f4d7f50c2a1b4a427f8"}, +] + +[package.dependencies] +aiohttp = "*" +analytics-python = "*" +fastapi = "*" +ffmpy = "*" +Jinja2 = "*" +markdown-it-py = {version = "*", extras = ["linkify", "plugins"]} +matplotlib = "*" +numpy = "*" +orjson = "*" +pandas = "*" +paramiko = "*" +pillow = "*" +pycryptodome = "*" +pydub = "*" +python-multipart = "*" +requests = "*" +uvicorn = "*" + +[[package]] +name = "greenlet" +version = "3.0.3" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, + {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, + {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, + {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, + {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, + {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, + {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, + {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, + {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, + {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, + {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, + {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, + {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, + {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, + {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, + {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "grep-ast" +version = "0.3.3" +description = "A tool to grep through the AST of a source file" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "grep_ast-0.3.3-py3-none-any.whl", hash = "sha256:515cb889bffefefa26c4ab1377b9a75b3fc678aa5fa02bf9aa4f8f20999a83ad"}, + {file = "grep_ast-0.3.3.tar.gz", hash = "sha256:42b8887d57301dc55634368f8d549e9c49c913dafb4d19c9b54c3ddb604fccf4"}, +] + +[package.dependencies] +pathspec = "*" +tree-sitter-languages = ">=1.8.0" + +[[package]] +name = "grpcio" +version = "1.71.0" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "grpcio-1.71.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:c200cb6f2393468142eb50ab19613229dcc7829b5ccee8b658a36005f6669fdd"}, + {file = "grpcio-1.71.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:b2266862c5ad664a380fbbcdbdb8289d71464c42a8c29053820ee78ba0119e5d"}, + {file = "grpcio-1.71.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:0ab8b2864396663a5b0b0d6d79495657ae85fa37dcb6498a2669d067c65c11ea"}, + {file = "grpcio-1.71.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c30f393f9d5ff00a71bb56de4aa75b8fe91b161aeb61d39528db6b768d7eac69"}, + {file = "grpcio-1.71.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f250ff44843d9a0615e350c77f890082102a0318d66a99540f54769c8766ab73"}, + {file = "grpcio-1.71.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6d8de076528f7c43a2f576bc311799f89d795aa6c9b637377cc2b1616473804"}, + {file = "grpcio-1.71.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9b91879d6da1605811ebc60d21ab6a7e4bae6c35f6b63a061d61eb818c8168f6"}, + {file = "grpcio-1.71.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f71574afdf944e6652203cd1badcda195b2a27d9c83e6d88dc1ce3cfb73b31a5"}, + {file = "grpcio-1.71.0-cp310-cp310-win32.whl", hash = "sha256:8997d6785e93308f277884ee6899ba63baafa0dfb4729748200fcc537858a509"}, + {file = "grpcio-1.71.0-cp310-cp310-win_amd64.whl", hash = "sha256:7d6ac9481d9d0d129224f6d5934d5832c4b1cddb96b59e7eba8416868909786a"}, + {file = "grpcio-1.71.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:d6aa986318c36508dc1d5001a3ff169a15b99b9f96ef5e98e13522c506b37eef"}, + {file = "grpcio-1.71.0-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:d2c170247315f2d7e5798a22358e982ad6eeb68fa20cf7a820bb74c11f0736e7"}, + {file = "grpcio-1.71.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:e6f83a583ed0a5b08c5bc7a3fe860bb3c2eac1f03f1f63e0bc2091325605d2b7"}, + {file = "grpcio-1.71.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4be74ddeeb92cc87190e0e376dbc8fc7736dbb6d3d454f2fa1f5be1dee26b9d7"}, + {file = "grpcio-1.71.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd0dfbe4d5eb1fcfec9490ca13f82b089a309dc3678e2edabc144051270a66e"}, + {file = "grpcio-1.71.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a2242d6950dc892afdf9e951ed7ff89473aaf744b7d5727ad56bdaace363722b"}, + {file = "grpcio-1.71.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0fa05ee31a20456b13ae49ad2e5d585265f71dd19fbd9ef983c28f926d45d0a7"}, + {file = "grpcio-1.71.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3d081e859fb1ebe176de33fc3adb26c7d46b8812f906042705346b314bde32c3"}, + {file = "grpcio-1.71.0-cp311-cp311-win32.whl", hash = "sha256:d6de81c9c00c8a23047136b11794b3584cdc1460ed7cbc10eada50614baa1444"}, + {file = "grpcio-1.71.0-cp311-cp311-win_amd64.whl", hash = "sha256:24e867651fc67717b6f896d5f0cac0ec863a8b5fb7d6441c2ab428f52c651c6b"}, + {file = "grpcio-1.71.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:0ff35c8d807c1c7531d3002be03221ff9ae15712b53ab46e2a0b4bb271f38537"}, + {file = "grpcio-1.71.0-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:b78a99cd1ece4be92ab7c07765a0b038194ded2e0a26fd654591ee136088d8d7"}, + {file = "grpcio-1.71.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:dc1a1231ed23caac1de9f943d031f1bc38d0f69d2a3b243ea0d664fc1fbd7fec"}, + {file = "grpcio-1.71.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6beeea5566092c5e3c4896c6d1d307fb46b1d4bdf3e70c8340b190a69198594"}, + {file = "grpcio-1.71.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5170929109450a2c031cfe87d6716f2fae39695ad5335d9106ae88cc32dc84c"}, + {file = "grpcio-1.71.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5b08d03ace7aca7b2fadd4baf291139b4a5f058805a8327bfe9aece7253b6d67"}, + {file = "grpcio-1.71.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f903017db76bf9cc2b2d8bdd37bf04b505bbccad6be8a81e1542206875d0e9db"}, + {file = "grpcio-1.71.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:469f42a0b410883185eab4689060a20488a1a0a00f8bbb3cbc1061197b4c5a79"}, + {file = "grpcio-1.71.0-cp312-cp312-win32.whl", hash = "sha256:ad9f30838550695b5eb302add33f21f7301b882937460dd24f24b3cc5a95067a"}, + {file = "grpcio-1.71.0-cp312-cp312-win_amd64.whl", hash = "sha256:652350609332de6dac4ece254e5d7e1ff834e203d6afb769601f286886f6f3a8"}, + {file = "grpcio-1.71.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:cebc1b34ba40a312ab480ccdb396ff3c529377a2fce72c45a741f7215bfe8379"}, + {file = "grpcio-1.71.0-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:85da336e3649a3d2171e82f696b5cad2c6231fdd5bad52616476235681bee5b3"}, + {file = "grpcio-1.71.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:f9a412f55bb6e8f3bb000e020dbc1e709627dcb3a56f6431fa7076b4c1aab0db"}, + {file = "grpcio-1.71.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47be9584729534660416f6d2a3108aaeac1122f6b5bdbf9fd823e11fe6fbaa29"}, + {file = "grpcio-1.71.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9c80ac6091c916db81131d50926a93ab162a7e97e4428ffc186b6e80d6dda4"}, + {file = "grpcio-1.71.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:789d5e2a3a15419374b7b45cd680b1e83bbc1e52b9086e49308e2c0b5bbae6e3"}, + {file = "grpcio-1.71.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:1be857615e26a86d7363e8a163fade914595c81fec962b3d514a4b1e8760467b"}, + {file = "grpcio-1.71.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a76d39b5fafd79ed604c4be0a869ec3581a172a707e2a8d7a4858cb05a5a7637"}, + {file = "grpcio-1.71.0-cp313-cp313-win32.whl", hash = "sha256:74258dce215cb1995083daa17b379a1a5a87d275387b7ffe137f1d5131e2cfbb"}, + {file = "grpcio-1.71.0-cp313-cp313-win_amd64.whl", hash = "sha256:22c3bc8d488c039a199f7a003a38cb7635db6656fa96437a8accde8322ce2366"}, + {file = "grpcio-1.71.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:c6a0a28450c16809f94e0b5bfe52cabff63e7e4b97b44123ebf77f448534d07d"}, + {file = "grpcio-1.71.0-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:a371e6b6a5379d3692cc4ea1cb92754d2a47bdddeee755d3203d1f84ae08e03e"}, + {file = "grpcio-1.71.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:39983a9245d37394fd59de71e88c4b295eb510a3555e0a847d9965088cdbd033"}, + {file = "grpcio-1.71.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9182e0063112e55e74ee7584769ec5a0b4f18252c35787f48738627e23a62b97"}, + {file = "grpcio-1.71.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693bc706c031aeb848849b9d1c6b63ae6bcc64057984bb91a542332b75aa4c3d"}, + {file = "grpcio-1.71.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:20e8f653abd5ec606be69540f57289274c9ca503ed38388481e98fa396ed0b41"}, + {file = "grpcio-1.71.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8700a2a57771cc43ea295296330daaddc0d93c088f0a35cc969292b6db959bf3"}, + {file = "grpcio-1.71.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d35a95f05a8a2cbe8e02be137740138b3b2ea5f80bd004444e4f9a1ffc511e32"}, + {file = "grpcio-1.71.0-cp39-cp39-win32.whl", hash = "sha256:f9c30c464cb2ddfbc2ddf9400287701270fdc0f14be5f08a1e3939f1e749b455"}, + {file = "grpcio-1.71.0-cp39-cp39-win_amd64.whl", hash = "sha256:63e41b91032f298b3e973b3fa4093cbbc620c875e2da7b93e249d4728b54559a"}, + {file = "grpcio-1.71.0.tar.gz", hash = "sha256:2b85f7820475ad3edec209d3d89a7909ada16caab05d3f2e08a7e8ae3200a55c"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.71.0)"] + +[[package]] +name = "grpcio-status" +version = "1.62.3" +description = "Status proto mapping for gRPC" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "grpcio-status-1.62.3.tar.gz", hash = "sha256:289bdd7b2459794a12cf95dc0cb727bd4a1742c37bd823f760236c937e53a485"}, + {file = "grpcio_status-1.62.3-py3-none-any.whl", hash = "sha256:f9049b762ba8de6b1086789d8315846e094edac2c50beaf462338b301a8fd4b8"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.5.5" +grpcio = ">=1.62.3" +protobuf = ">=4.21.6" + +[[package]] +name = "grpcio-tools" +version = "1.62.3" +description = "Protobuf code generator for gRPC" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "grpcio-tools-1.62.3.tar.gz", hash = "sha256:7c7136015c3d62c3eef493efabaf9e3380e3e66d24ee8e94c01cb71377f57833"}, + {file = "grpcio_tools-1.62.3-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2f968b049c2849540751ec2100ab05e8086c24bead769ca734fdab58698408c1"}, + {file = "grpcio_tools-1.62.3-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:0a8c0c4724ae9c2181b7dbc9b186df46e4f62cb18dc184e46d06c0ebeccf569e"}, + {file = "grpcio_tools-1.62.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5782883a27d3fae8c425b29a9d3dcf5f47d992848a1b76970da3b5a28d424b26"}, + {file = "grpcio_tools-1.62.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d812daffd0c2d2794756bd45a353f89e55dc8f91eb2fc840c51b9f6be62667"}, + {file = "grpcio_tools-1.62.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b47d0dda1bdb0a0ba7a9a6de88e5a1ed61f07fad613964879954961e36d49193"}, + {file = "grpcio_tools-1.62.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ca246dffeca0498be9b4e1ee169b62e64694b0f92e6d0be2573e65522f39eea9"}, + {file = "grpcio_tools-1.62.3-cp310-cp310-win32.whl", hash = "sha256:6a56d344b0bab30bf342a67e33d386b0b3c4e65868ffe93c341c51e1a8853ca5"}, + {file = "grpcio_tools-1.62.3-cp310-cp310-win_amd64.whl", hash = "sha256:710fecf6a171dcbfa263a0a3e7070e0df65ba73158d4c539cec50978f11dad5d"}, + {file = "grpcio_tools-1.62.3-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:703f46e0012af83a36082b5f30341113474ed0d91e36640da713355cd0ea5d23"}, + {file = "grpcio_tools-1.62.3-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:7cc83023acd8bc72cf74c2edbe85b52098501d5b74d8377bfa06f3e929803492"}, + {file = "grpcio_tools-1.62.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ff7d58a45b75df67d25f8f144936a3e44aabd91afec833ee06826bd02b7fbe7"}, + {file = "grpcio_tools-1.62.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f2483ea232bd72d98a6dc6d7aefd97e5bc80b15cd909b9e356d6f3e326b6e43"}, + {file = "grpcio_tools-1.62.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:962c84b4da0f3b14b3cdb10bc3837ebc5f136b67d919aea8d7bb3fd3df39528a"}, + {file = "grpcio_tools-1.62.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8ad0473af5544f89fc5a1ece8676dd03bdf160fb3230f967e05d0f4bf89620e3"}, + {file = "grpcio_tools-1.62.3-cp311-cp311-win32.whl", hash = "sha256:db3bc9fa39afc5e4e2767da4459df82b095ef0cab2f257707be06c44a1c2c3e5"}, + {file = "grpcio_tools-1.62.3-cp311-cp311-win_amd64.whl", hash = "sha256:e0898d412a434e768a0c7e365acabe13ff1558b767e400936e26b5b6ed1ee51f"}, + {file = "grpcio_tools-1.62.3-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:d102b9b21c4e1e40af9a2ab3c6d41afba6bd29c0aa50ca013bf85c99cdc44ac5"}, + {file = "grpcio_tools-1.62.3-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:0a52cc9444df978438b8d2332c0ca99000521895229934a59f94f37ed896b133"}, + {file = "grpcio_tools-1.62.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141d028bf5762d4a97f981c501da873589df3f7e02f4c1260e1921e565b376fa"}, + {file = "grpcio_tools-1.62.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47a5c093ab256dec5714a7a345f8cc89315cb57c298b276fa244f37a0ba507f0"}, + {file = "grpcio_tools-1.62.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f6831fdec2b853c9daa3358535c55eed3694325889aa714070528cf8f92d7d6d"}, + {file = "grpcio_tools-1.62.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e02d7c1a02e3814c94ba0cfe43d93e872c758bd8fd5c2797f894d0c49b4a1dfc"}, + {file = "grpcio_tools-1.62.3-cp312-cp312-win32.whl", hash = "sha256:b881fd9505a84457e9f7e99362eeedd86497b659030cf57c6f0070df6d9c2b9b"}, + {file = "grpcio_tools-1.62.3-cp312-cp312-win_amd64.whl", hash = "sha256:11c625eebefd1fd40a228fc8bae385e448c7e32a6ae134e43cf13bbc23f902b7"}, + {file = "grpcio_tools-1.62.3-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:ec6fbded0c61afe6f84e3c2a43e6d656791d95747d6d28b73eff1af64108c434"}, + {file = "grpcio_tools-1.62.3-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:bfda6ee8990997a9df95c5606f3096dae65f09af7ca03a1e9ca28f088caca5cf"}, + {file = "grpcio_tools-1.62.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b77f9f9cee87cd798f0fe26b7024344d1b03a7cd2d2cba7035f8433b13986325"}, + {file = "grpcio_tools-1.62.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e02d3b96f2d0e4bab9ceaa30f37d4f75571e40c6272e95364bff3125a64d184"}, + {file = "grpcio_tools-1.62.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1da38070738da53556a4b35ab67c1b9884a5dd48fa2f243db35dc14079ea3d0c"}, + {file = "grpcio_tools-1.62.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ace43b26d88a58dcff16c20d23ff72b04d0a415f64d2820f4ff06b1166f50557"}, + {file = "grpcio_tools-1.62.3-cp37-cp37m-win_amd64.whl", hash = "sha256:350a80485e302daaa95d335a931f97b693e170e02d43767ab06552c708808950"}, + {file = "grpcio_tools-1.62.3-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:c3a1ac9d394f8e229eb28eec2e04b9a6f5433fa19c9d32f1cb6066e3c5114a1d"}, + {file = "grpcio_tools-1.62.3-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:11f363570dea661dde99e04a51bd108a5807b5df32a6f8bdf4860e34e94a4dbf"}, + {file = "grpcio_tools-1.62.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9ad9950119d8ae27634e68b7663cc8d340ae535a0f80d85a55e56a6973ab1f"}, + {file = "grpcio_tools-1.62.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c5d22b252dcef11dd1e0fbbe5bbfb9b4ae048e8880d33338215e8ccbdb03edc"}, + {file = "grpcio_tools-1.62.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:27cd9ef5c5d68d5ed104b6dcb96fe9c66b82050e546c9e255716903c3d8f0373"}, + {file = "grpcio_tools-1.62.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f4b1615adf67bd8bb71f3464146a6f9949972d06d21a4f5e87e73f6464d97f57"}, + {file = "grpcio_tools-1.62.3-cp38-cp38-win32.whl", hash = "sha256:e18e15287c31baf574fcdf8251fb7f997d64e96c6ecf467906e576da0a079af6"}, + {file = "grpcio_tools-1.62.3-cp38-cp38-win_amd64.whl", hash = "sha256:6c3064610826f50bd69410c63101954676edc703e03f9e8f978a135f1aaf97c1"}, + {file = "grpcio_tools-1.62.3-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:8e62cc7164b0b7c5128e637e394eb2ef3db0e61fc798e80c301de3b2379203ed"}, + {file = "grpcio_tools-1.62.3-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:c8ad5cce554e2fcaf8842dee5d9462583b601a3a78f8b76a153c38c963f58c10"}, + {file = "grpcio_tools-1.62.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec279dcf3518201fc592c65002754f58a6b542798cd7f3ecd4af086422f33f29"}, + {file = "grpcio_tools-1.62.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c989246c2aebc13253f08be32538a4039a64e12d9c18f6d662d7aee641dc8b5"}, + {file = "grpcio_tools-1.62.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ca4f5eeadbb57cf03317d6a2857823239a63a59cc935f5bd6cf6e8b7af7a7ecc"}, + {file = "grpcio_tools-1.62.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0cb3a3436ac119cbd37a7d3331d9bdf85dad21a6ac233a3411dff716dcbf401e"}, + {file = "grpcio_tools-1.62.3-cp39-cp39-win32.whl", hash = "sha256:3eae6ea76d62fcac091e1f15c2dcedf1dc3f114f8df1a972a8a0745e89f4cf61"}, + {file = "grpcio_tools-1.62.3-cp39-cp39-win_amd64.whl", hash = "sha256:eec73a005443061f4759b71a056f745e3b000dc0dc125c9f20560232dfbcbd14"}, +] + +[package.dependencies] +grpcio = ">=1.62.3" +protobuf = ">=4.21.6,<5.0dev" +setuptools = "*" + +[[package]] +name = "gymnasium" +version = "0.29.1" +description = "A standard API for reinforcement learning and a diverse set of reference environments (formerly Gym)." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "gymnasium-0.29.1-py3-none-any.whl", hash = "sha256:61c3384b5575985bb7f85e43213bcb40f36fcdff388cae6bc229304c71f2843e"}, + {file = "gymnasium-0.29.1.tar.gz", hash = "sha256:1a532752efcb7590478b1cc7aa04f608eb7a2fdad5570cd217b66b6a35274bb1"}, +] + +[package.dependencies] +cloudpickle = ">=1.2.0" +farama-notifications = ">=0.0.1" +importlib-metadata = {version = ">=4.8.0", markers = "python_version < \"3.10\""} +numpy = ">=1.21.0" +typing-extensions = ">=4.3.0" + +[package.extras] +accept-rom-license = ["autorom[accept-rom-license] (>=0.4.2,<0.5.0)"] +all = ["box2d-py (==2.3.5)", "cython (<3)", "imageio (>=2.14.1)", "jax (>=0.4.0)", "jaxlib (>=0.4.0)", "lz4 (>=3.1.0)", "matplotlib (>=3.0)", "moviepy (>=1.0.0)", "mujoco (>=2.3.3)", "mujoco-py (>=2.1,<2.2)", "opencv-python (>=3.0)", "pygame (>=2.1.3)", "shimmy[atari] (>=0.1.0,<1.0)", "swig (==4.*)", "torch (>=1.0.0)"] +atari = ["shimmy[atari] (>=0.1.0,<1.0)"] +box2d = ["box2d-py (==2.3.5)", "pygame (>=2.1.3)", "swig (==4.*)"] +classic-control = ["pygame (>=2.1.3)", "pygame (>=2.1.3)"] +jax = ["jax (>=0.4.0)", "jaxlib (>=0.4.0)"] +mujoco = ["imageio (>=2.14.1)", "mujoco (>=2.3.3)"] +mujoco-py = ["cython (<3)", "cython (<3)", "mujoco-py (>=2.1,<2.2)", "mujoco-py (>=2.1,<2.2)"] +other = ["lz4 (>=3.1.0)", "matplotlib (>=3.0)", "moviepy (>=1.0.0)", "opencv-python (>=3.0)", "torch (>=1.0.0)"] +testing = ["pytest (==7.1.3)", "scipy (>=1.7.3)"] +toy-text = ["pygame (>=2.1.3)", "pygame (>=2.1.3)"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +groups = ["main", "selenium", "test"] +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "h2" +version = "4.2.0" +description = "Pure-Python HTTP/2 protocol implementation" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "h2-4.2.0-py3-none-any.whl", hash = "sha256:479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0"}, + {file = "h2-4.2.0.tar.gz", hash = "sha256:c8a52129695e88b1a0578d8d2cc6842bbd79128ac685463b887ee278126ad01f"}, +] + +[package.dependencies] +hpack = ">=4.1,<5" +hyperframe = ">=6.1,<7" + +[[package]] +name = "hpack" +version = "4.1.0" +description = "Pure-Python HPACK header encoding" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496"}, + {file = "hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca"}, +] + +[[package]] +name = "htmlmin" +version = "0.1.12" +description = "An HTML Minifier" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "htmlmin-0.1.12.tar.gz", hash = "sha256:50c1ef4630374a5d723900096a961cff426dff46b48f34d194a81bbe14eca178"}, +] + +[[package]] +name = "httpcore" +version = "1.0.7" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httplib2" +version = "0.22.0" +description = "A comprehensive HTTP client library." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main", "search-google"] +files = [ + {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, + {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, +] + +[package.dependencies] +pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} + +[[package]] +name = "httptools" +version = "0.6.4" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +groups = ["test"] +files = [ + {file = "httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0"}, + {file = "httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da"}, + {file = "httptools-0.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deee0e3343f98ee8047e9f4c5bc7cedbf69f5734454a94c38ee829fb2d5fa3c1"}, + {file = "httptools-0.6.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca80b7485c76f768a3bc83ea58373f8db7b015551117375e4918e2aa77ea9b50"}, + {file = "httptools-0.6.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:90d96a385fa941283ebd231464045187a31ad932ebfa541be8edf5b3c2328959"}, + {file = "httptools-0.6.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:59e724f8b332319e2875efd360e61ac07f33b492889284a3e05e6d13746876f4"}, + {file = "httptools-0.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:c26f313951f6e26147833fc923f78f95604bbec812a43e5ee37f26dc9e5a686c"}, + {file = "httptools-0.6.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f47f8ed67cc0ff862b84a1189831d1d33c963fb3ce1ee0c65d3b0cbe7b711069"}, + {file = "httptools-0.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0614154d5454c21b6410fdf5262b4a3ddb0f53f1e1721cfd59d55f32138c578a"}, + {file = "httptools-0.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8787367fbdfccae38e35abf7641dafc5310310a5987b689f4c32cc8cc3ee975"}, + {file = "httptools-0.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b0f7fe4fd38e6a507bdb751db0379df1e99120c65fbdc8ee6c1d044897a636"}, + {file = "httptools-0.6.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40a5ec98d3f49904b9fe36827dcf1aadfef3b89e2bd05b0e35e94f97c2b14721"}, + {file = "httptools-0.6.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dacdd3d10ea1b4ca9df97a0a303cbacafc04b5cd375fa98732678151643d4988"}, + {file = "httptools-0.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:288cd628406cc53f9a541cfaf06041b4c71d751856bab45e3702191f931ccd17"}, + {file = "httptools-0.6.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:df017d6c780287d5c80601dafa31f17bddb170232d85c066604d8558683711a2"}, + {file = "httptools-0.6.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:85071a1e8c2d051b507161f6c3e26155b5c790e4e28d7f236422dbacc2a9cc44"}, + {file = "httptools-0.6.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69422b7f458c5af875922cdb5bd586cc1f1033295aa9ff63ee196a87519ac8e1"}, + {file = "httptools-0.6.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16e603a3bff50db08cd578d54f07032ca1631450ceb972c2f834c2b860c28ea2"}, + {file = "httptools-0.6.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec4f178901fa1834d4a060320d2f3abc5c9e39766953d038f1458cb885f47e81"}, + {file = "httptools-0.6.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb89ecf8b290f2e293325c646a211ff1c2493222798bb80a530c5e7502494f"}, + {file = "httptools-0.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:db78cb9ca56b59b016e64b6031eda5653be0589dba2b1b43453f6e8b405a0970"}, + {file = "httptools-0.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ade273d7e767d5fae13fa637f4d53b6e961fb7fd93c7797562663f0171c26660"}, + {file = "httptools-0.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:856f4bc0478ae143bad54a4242fccb1f3f86a6e1be5548fecfd4102061b3a083"}, + {file = "httptools-0.6.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:322d20ea9cdd1fa98bd6a74b77e2ec5b818abdc3d36695ab402a0de8ef2865a3"}, + {file = "httptools-0.6.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d87b29bd4486c0093fc64dea80231f7c7f7eb4dc70ae394d70a495ab8436071"}, + {file = "httptools-0.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:342dd6946aa6bda4b8f18c734576106b8a31f2fe31492881a9a160ec84ff4bd5"}, + {file = "httptools-0.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b36913ba52008249223042dca46e69967985fb4051951f94357ea681e1f5dc0"}, + {file = "httptools-0.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:28908df1b9bb8187393d5b5db91435ccc9c8e891657f9cbb42a2541b44c82fc8"}, + {file = "httptools-0.6.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d3f0d369e7ffbe59c4b6116a44d6a8eb4783aae027f2c0b366cf0aa964185dba"}, + {file = "httptools-0.6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:94978a49b8f4569ad607cd4946b759d90b285e39c0d4640c6b36ca7a3ddf2efc"}, + {file = "httptools-0.6.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40dc6a8e399e15ea525305a2ddba998b0af5caa2566bcd79dcbe8948181eeaff"}, + {file = "httptools-0.6.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab9ba8dcf59de5181f6be44a77458e45a578fc99c31510b8c65b7d5acc3cf490"}, + {file = "httptools-0.6.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fc411e1c0a7dcd2f902c7c48cf079947a7e65b5485dea9decb82b9105ca71a43"}, + {file = "httptools-0.6.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d54efd20338ac52ba31e7da78e4a72570cf729fac82bc31ff9199bedf1dc7440"}, + {file = "httptools-0.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:df959752a0c2748a65ab5387d08287abf6779ae9165916fe053e68ae1fbdc47f"}, + {file = "httptools-0.6.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:85797e37e8eeaa5439d33e556662cc370e474445d5fab24dcadc65a8ffb04003"}, + {file = "httptools-0.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:db353d22843cf1028f43c3651581e4bb49374d85692a85f95f7b9a130e1b2cab"}, + {file = "httptools-0.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1ffd262a73d7c28424252381a5b854c19d9de5f56f075445d33919a637e3547"}, + {file = "httptools-0.6.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c346571fa50d2e9856a37d7cd9435a25e7fd15e236c397bf224afaa355fe9"}, + {file = "httptools-0.6.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aafe0f1918ed07b67c1e838f950b1c1fabc683030477e60b335649b8020e1076"}, + {file = "httptools-0.6.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0e563e54979e97b6d13f1bbc05a96109923e76b901f786a5eae36e99c01237bd"}, + {file = "httptools-0.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:b799de31416ecc589ad79dd85a0b2657a8fe39327944998dea368c1d4c9e55e6"}, + {file = "httptools-0.6.4.tar.gz", hash = "sha256:4e93eee4add6493b59a5c514da98c939b244fce4a0d8879cd3f466562f4b7d5c"}, +] + +[package.extras] +test = ["Cython (>=0.29.24)"] + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +h2 = {version = ">=3,<5", optional = true, markers = "extra == \"http2\""} +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "hyperframe" +version = "6.1.0" +description = "Pure-Python HTTP/2 framing" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5"}, + {file = "hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08"}, +] + +[[package]] +name = "identify" +version = "2.6.9" +description = "File identification library for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "identify-2.6.9-py2.py3-none-any.whl", hash = "sha256:c98b4322da415a8e5a70ff6e51fbc2d2932c015532d77e9f8537b4ba7813b150"}, + {file = "identify-2.6.9.tar.gz", hash = "sha256:d40dfe3142a1421d8518e3d3985ef5ac42890683e32306ad614a29490abeb6bf"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +groups = ["main", "search-google", "selenium", "test"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "imap-tools" +version = "1.5.0" +description = "Work with email by IMAP" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "imap-tools-1.5.0.tar.gz", hash = "sha256:f42dfb1a7db666ef5df4c815e5b6e6571707b188f67c0a411fc5c9a9b4f1b85f"}, + {file = "imap_tools-1.5.0-py3-none-any.whl", hash = "sha256:b6c2b94b9d168e1a52c419a2c10367d746694ca61b68fdb0c3ff211046a0760d"}, +] + +[[package]] +name = "importlib-metadata" +version = "8.6.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main", "pyppeteer"] +files = [ + {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, + {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, +] +markers = {main = "python_version == \"3.9\""} + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] + +[[package]] +name = "importlib-resources" +version = "6.5.2" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, + {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] +type = ["pytest-mypy"] + +[[package]] +name = "inflection" +version = "0.5.1" +description = "A port of Ruby on Rails inflector to Python" +optional = false +python-versions = ">=3.5" +groups = ["test"] +files = [ + {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, + {file = "inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"}, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, +] + +[[package]] +name = "ipykernel" +version = "6.27.1" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "ipykernel-6.27.1-py3-none-any.whl", hash = "sha256:dab88b47f112f9f7df62236511023c9bdeef67abc73af7c652e4ce4441601686"}, + {file = "ipykernel-6.27.1.tar.gz", hash = "sha256:7d5d594b6690654b4d299edba5e872dc17bb7396a8d0609c97cb7b8a1c605de6"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=20" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "8.17.2" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "ipython-8.17.2-py3-none-any.whl", hash = "sha256:1e4d1d666a023e3c93585ba0d8e962867f7a111af322efff6b9c58062b3e5444"}, + {file = "ipython-8.17.2.tar.gz", hash = "sha256:126bb57e1895594bb0d91ea3090bbd39384f6fe87c3d57fd558d0670f50339bb"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} + +[package.extras] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] + +[[package]] +name = "ipywidgets" +version = "8.1.1" +description = "Jupyter interactive widgets" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "ipywidgets-8.1.1-py3-none-any.whl", hash = "sha256:2b88d728656aea3bbfd05d32c747cfd0078f9d7e159cf982433b58ad717eed7f"}, + {file = "ipywidgets-8.1.1.tar.gz", hash = "sha256:40211efb556adec6fa450ccc2a77d59ca44a060f4f9f136833df59c9f538e6e8"}, +] + +[package.dependencies] +comm = ">=0.1.3" +ipython = ">=6.1.0" +jupyterlab-widgets = ">=3.0.9,<3.1.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=4.0.9,<4.1.0" + +[package.extras] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] + +[[package]] +name = "isodate" +version = "0.7.2" +description = "An ISO 8601 date/time/duration parser and formatter" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, + {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, +] + +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.8.0" +groups = ["main", "dev", "test"] +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + +[[package]] +name = "jedi" +version = "0.19.2" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, +] + +[package.dependencies] +parso = ">=0.8.4,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] + +[[package]] +name = "jieba" +version = "0.42.1" +description = "Chinese Words Segmentation Utilities" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "jieba-0.42.1.tar.gz", hash = "sha256:055ca12f62674fafed09427f176506079bc135638a14e23e25be909131928db2"}, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jiter" +version = "0.9.0" +description = "Fast iterable JSON parser." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "jiter-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:816ec9b60fdfd1fec87da1d7ed46c66c44ffec37ab2ef7de5b147b2fce3fd5ad"}, + {file = "jiter-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b1d3086f8a3ee0194ecf2008cf81286a5c3e540d977fa038ff23576c023c0ea"}, + {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1339f839b91ae30b37c409bf16ccd3dc453e8b8c3ed4bd1d6a567193651a4a51"}, + {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ffba79584b3b670fefae66ceb3a28822365d25b7bf811e030609a3d5b876f538"}, + {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cfc7d0a8e899089d11f065e289cb5b2daf3d82fbe028f49b20d7b809193958d"}, + {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e00a1a2bbfaaf237e13c3d1592356eab3e9015d7efd59359ac8b51eb56390a12"}, + {file = "jiter-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1d9870561eb26b11448854dce0ff27a9a27cb616b632468cafc938de25e9e51"}, + {file = "jiter-0.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9872aeff3f21e437651df378cb75aeb7043e5297261222b6441a620218b58708"}, + {file = "jiter-0.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1fd19112d1049bdd47f17bfbb44a2c0001061312dcf0e72765bfa8abd4aa30e5"}, + {file = "jiter-0.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6ef5da104664e526836070e4a23b5f68dec1cc673b60bf1edb1bfbe8a55d0678"}, + {file = "jiter-0.9.0-cp310-cp310-win32.whl", hash = "sha256:cb12e6d65ebbefe5518de819f3eda53b73187b7089040b2d17f5b39001ff31c4"}, + {file = "jiter-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:c43ca669493626d8672be3b645dbb406ef25af3f4b6384cfd306da7eb2e70322"}, + {file = "jiter-0.9.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6c4d99c71508912a7e556d631768dcdef43648a93660670986916b297f1c54af"}, + {file = "jiter-0.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f60fb8ce7df529812bf6c625635a19d27f30806885139e367af93f6e734ef58"}, + {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51c4e1a4f8ea84d98b7b98912aa4290ac3d1eabfde8e3c34541fae30e9d1f08b"}, + {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f4c677c424dc76684fea3e7285a7a2a7493424bea89ac441045e6a1fb1d7b3b"}, + {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2221176dfec87f3470b21e6abca056e6b04ce9bff72315cb0b243ca9e835a4b5"}, + {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c7adb66f899ffa25e3c92bfcb593391ee1947dbdd6a9a970e0d7e713237d572"}, + {file = "jiter-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c98d27330fdfb77913c1097a7aab07f38ff2259048949f499c9901700789ac15"}, + {file = "jiter-0.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eda3f8cc74df66892b1d06b5d41a71670c22d95a1ca2cbab73654745ce9d0419"}, + {file = "jiter-0.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dd5ab5ddc11418dce28343123644a100f487eaccf1de27a459ab36d6cca31043"}, + {file = "jiter-0.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42f8a68a69f047b310319ef8e2f52fdb2e7976fb3313ef27df495cf77bcad965"}, + {file = "jiter-0.9.0-cp311-cp311-win32.whl", hash = "sha256:a25519efb78a42254d59326ee417d6f5161b06f5da827d94cf521fed961b1ff2"}, + {file = "jiter-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:923b54afdd697dfd00d368b7ccad008cccfeb1efb4e621f32860c75e9f25edbd"}, + {file = "jiter-0.9.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7b46249cfd6c48da28f89eb0be3f52d6fdb40ab88e2c66804f546674e539ec11"}, + {file = "jiter-0.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:609cf3c78852f1189894383cf0b0b977665f54cb38788e3e6b941fa6d982c00e"}, + {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d726a3890a54561e55a9c5faea1f7655eda7f105bd165067575ace6e65f80bb2"}, + {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2e89dc075c1fef8fa9be219e249f14040270dbc507df4215c324a1839522ea75"}, + {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04e8ffa3c353b1bc4134f96f167a2082494351e42888dfcf06e944f2729cbe1d"}, + {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:203f28a72a05ae0e129b3ed1f75f56bc419d5f91dfacd057519a8bd137b00c42"}, + {file = "jiter-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fca1a02ad60ec30bb230f65bc01f611c8608b02d269f998bc29cca8619a919dc"}, + {file = "jiter-0.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:237e5cee4d5d2659aaf91bbf8ec45052cc217d9446070699441a91b386ae27dc"}, + {file = "jiter-0.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:528b6b71745e7326eed73c53d4aa57e2a522242320b6f7d65b9c5af83cf49b6e"}, + {file = "jiter-0.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9f48e86b57bc711eb5acdfd12b6cb580a59cc9a993f6e7dcb6d8b50522dcd50d"}, + {file = "jiter-0.9.0-cp312-cp312-win32.whl", hash = "sha256:699edfde481e191d81f9cf6d2211debbfe4bd92f06410e7637dffb8dd5dfde06"}, + {file = "jiter-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:099500d07b43f61d8bd780466d429c45a7b25411b334c60ca875fa775f68ccb0"}, + {file = "jiter-0.9.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2764891d3f3e8b18dce2cff24949153ee30c9239da7c00f032511091ba688ff7"}, + {file = "jiter-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:387b22fbfd7a62418d5212b4638026d01723761c75c1c8232a8b8c37c2f1003b"}, + {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d8da8629ccae3606c61d9184970423655fb4e33d03330bcdfe52d234d32f69"}, + {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1be73d8982bdc278b7b9377426a4b44ceb5c7952073dd7488e4ae96b88e1103"}, + {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2228eaaaa111ec54b9e89f7481bffb3972e9059301a878d085b2b449fbbde635"}, + {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:11509bfecbc319459647d4ac3fd391d26fdf530dad00c13c4dadabf5b81f01a4"}, + {file = "jiter-0.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f22238da568be8bbd8e0650e12feeb2cfea15eda4f9fc271d3b362a4fa0604d"}, + {file = "jiter-0.9.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17f5d55eb856597607562257c8e36c42bc87f16bef52ef7129b7da11afc779f3"}, + {file = "jiter-0.9.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:6a99bed9fbb02f5bed416d137944419a69aa4c423e44189bc49718859ea83bc5"}, + {file = "jiter-0.9.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e057adb0cd1bd39606100be0eafe742de2de88c79df632955b9ab53a086b3c8d"}, + {file = "jiter-0.9.0-cp313-cp313-win32.whl", hash = "sha256:f7e6850991f3940f62d387ccfa54d1a92bd4bb9f89690b53aea36b4364bcab53"}, + {file = "jiter-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:c8ae3bf27cd1ac5e6e8b7a27487bf3ab5f82318211ec2e1346a5b058756361f7"}, + {file = "jiter-0.9.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0b2827fb88dda2cbecbbc3e596ef08d69bda06c6f57930aec8e79505dc17001"}, + {file = "jiter-0.9.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062b756ceb1d40b0b28f326cba26cfd575a4918415b036464a52f08632731e5a"}, + {file = "jiter-0.9.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6f7838bc467ab7e8ef9f387bd6de195c43bad82a569c1699cb822f6609dd4cdf"}, + {file = "jiter-0.9.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4a2d16360d0642cd68236f931b85fe50288834c383492e4279d9f1792e309571"}, + {file = "jiter-0.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e84ed1c9c9ec10bbb8c37f450077cbe3c0d4e8c2b19f0a49a60ac7ace73c7452"}, + {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f3c848209ccd1bfa344a1240763975ca917de753c7875c77ec3034f4151d06c"}, + {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7825f46e50646bee937e0f849d14ef3a417910966136f59cd1eb848b8b5bb3e4"}, + {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d82a811928b26d1a6311a886b2566f68ccf2b23cf3bfed042e18686f1f22c2d7"}, + {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c058ecb51763a67f019ae423b1cbe3fa90f7ee6280c31a1baa6ccc0c0e2d06e"}, + {file = "jiter-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9897115ad716c48f0120c1f0c4efae348ec47037319a6c63b2d7838bb53aaef4"}, + {file = "jiter-0.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:351f4c90a24c4fb8c87c6a73af2944c440494ed2bea2094feecacb75c50398ae"}, + {file = "jiter-0.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d45807b0f236c485e1e525e2ce3a854807dfe28ccf0d013dd4a563395e28008a"}, + {file = "jiter-0.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1537a890724ba00fdba21787010ac6f24dad47f763410e9e1093277913592784"}, + {file = "jiter-0.9.0-cp38-cp38-win32.whl", hash = "sha256:e3630ec20cbeaddd4b65513fa3857e1b7c4190d4481ef07fb63d0fad59033321"}, + {file = "jiter-0.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:2685f44bf80e95f8910553bf2d33b9c87bf25fceae6e9f0c1355f75d2922b0ee"}, + {file = "jiter-0.9.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:9ef340fae98065071ccd5805fe81c99c8f80484e820e40043689cf97fb66b3e2"}, + {file = "jiter-0.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:efb767d92c63b2cd9ec9f24feeb48f49574a713870ec87e9ba0c2c6e9329c3e2"}, + {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:113f30f87fb1f412510c6d7ed13e91422cfd329436364a690c34c8b8bd880c42"}, + {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8793b6df019b988526f5a633fdc7456ea75e4a79bd8396a3373c371fc59f5c9b"}, + {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a9aaa5102dba4e079bb728076fadd5a2dca94c05c04ce68004cfd96f128ea34"}, + {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d838650f6ebaf4ccadfb04522463e74a4c378d7e667e0eb1865cfe3990bfac49"}, + {file = "jiter-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0194f813efdf4b8865ad5f5c5f50f8566df7d770a82c51ef593d09e0b347020"}, + {file = "jiter-0.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7954a401d0a8a0b8bc669199db78af435aae1e3569187c2939c477c53cb6a0a"}, + {file = "jiter-0.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4feafe787eb8a8d98168ab15637ca2577f6ddf77ac6c8c66242c2d028aa5420e"}, + {file = "jiter-0.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:27cd1f2e8bb377f31d3190b34e4328d280325ad7ef55c6ac9abde72f79e84d2e"}, + {file = "jiter-0.9.0-cp39-cp39-win32.whl", hash = "sha256:161d461dcbe658cf0bd0aa375b30a968b087cdddc624fc585f3867c63c6eca95"}, + {file = "jiter-0.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:e8b36d8a16a61993be33e75126ad3d8aa29cf450b09576f3c427d27647fcb4aa"}, + {file = "jiter-0.9.0.tar.gz", hash = "sha256:aadba0964deb424daa24492abc3d229c60c4a31bfee205aedbf1acc7639d7893"}, +] + +[[package]] +name = "jmespath" +version = "1.0.1" +description = "JSON Matching Expressions" +optional = false +python-versions = ">=3.7" +groups = ["main", "test"] +files = [ + {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, + {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, +] + +[[package]] +name = "joblib" +version = "1.4.2" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, + {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, +] + +[[package]] +name = "jsonpatch" +version = "1.33" +description = "Apply JSON-Patches (RFC 6902)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +groups = ["main"] +files = [ + {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, + {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, +] + +[package.dependencies] +jsonpointer = ">=1.9" + +[[package]] +name = "jsonpointer" +version = "3.0.0" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] + +[[package]] +name = "jsonschema" +version = "4.23.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-path" +version = "0.3.4" +description = "JSONSchema Spec with object-oriented paths" +optional = false +python-versions = "<4.0.0,>=3.8.0" +groups = ["main"] +files = [ + {file = "jsonschema_path-0.3.4-py3-none-any.whl", hash = "sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8"}, + {file = "jsonschema_path-0.3.4.tar.gz", hash = "sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001"}, +] + +[package.dependencies] +pathable = ">=0.4.1,<0.5.0" +PyYAML = ">=5.1" +referencing = "<0.37.0" +requests = ">=2.31.0,<3.0.0" + +[[package]] +name = "jsonschema-spec" +version = "0.2.4" +description = "JSONSchema Spec with object-oriented paths" +optional = false +python-versions = ">=3.8.0,<4.0.0" +groups = ["main"] +files = [ + {file = "jsonschema_spec-0.2.4-py3-none-any.whl", hash = "sha256:e6dcf7056734ec6854f7888da6c08ce6c421f28aeeddce96bb90de0fb6d711ef"}, + {file = "jsonschema_spec-0.2.4.tar.gz", hash = "sha256:873e396ad1ba6edf9f52d6174c110d4fafb7b5f5894744246a53fe75e5251ec2"}, +] + +[package.dependencies] +pathable = ">=0.4.1,<0.5.0" +PyYAML = ">=5.1" +referencing = ">=0.28.0,<0.31.0" +requests = ">=2.31.0,<3.0.0" + +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +referencing = ">=0.28.0" + +[[package]] +name = "jupyter-client" +version = "8.6.3" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, + {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "5.7.2" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.13" +description = "Jupyter interactive widgets for JupyterLab" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"}, + {file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.7" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.8" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, + {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.8" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.10" +groups = ["test"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"}, + {file = "kiwisolver-1.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed"}, + {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605"}, + {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e"}, + {file = "kiwisolver-1.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751"}, + {file = "kiwisolver-1.4.8-cp310-cp310-win_arm64.whl", hash = "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561"}, + {file = "kiwisolver-1.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6"}, + {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc"}, + {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67"}, + {file = "kiwisolver-1.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34"}, + {file = "kiwisolver-1.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31"}, + {file = "kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d"}, + {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8"}, + {file = "kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50"}, + {file = "kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1"}, + {file = "kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc"}, + {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957"}, + {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb"}, + {file = "kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2"}, + {file = "kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90"}, + {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b"}, + {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b"}, + {file = "kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e"}, +] + +[[package]] +name = "lancedb" +version = "0.4.0" +description = "lancedb" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "lancedb-0.4.0-py3-none-any.whl", hash = "sha256:4f23830507f39c8c72efa58987ba5e1326f9daa7e5ce2f7930a9db0258c29d18"}, + {file = "lancedb-0.4.0.tar.gz", hash = "sha256:dbbdc123760c7c0b252cf97aa77bad9d12d0293d14bcefef8c96b5f585bfc46e"}, +] + +[package.dependencies] +aiohttp = "*" +attrs = ">=21.3.0" +cachetools = "*" +click = ">=8.1.7" +deprecation = "*" +overrides = ">=0.7" +pydantic = ">=1.10" +pylance = "0.9.0" +pyyaml = ">=6.0" +ratelimiter = ">=1.0,<2.0" +requests = ">=2.31.0" +retry = ">=0.9.2" +semver = ">=3.0" +tqdm = ">=4.27.0" + +[package.extras] +clip = ["open-clip", "pillow", "torch"] +dev = ["black", "pre-commit", "ruff"] +docs = ["mkdocs", "mkdocs-jupyter", "mkdocs-material", "mkdocstrings[python]"] +embeddings = ["InstructorEmbedding", "cohere", "open-clip-torch", "openai", "pillow", "sentence-transformers", "torch"] +tests = ["pandas (>=1.4)", "pytest", "pytest-asyncio", "pytest-mock", "requests"] + +[[package]] +name = "lazy-object-proxy" +version = "1.10.0" +description = "A fast and thorough lazy object proxy." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "lazy-object-proxy-1.10.0.tar.gz", hash = "sha256:78247b6d45f43a52ef35c25b5581459e85117225408a4128a3daf8bf9648ac69"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:855e068b0358ab916454464a884779c7ffa312b8925c6f7401e952dcf3b89977"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab7004cf2e59f7c2e4345604a3e6ea0d92ac44e1c2375527d56492014e690c3"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc0d2fc424e54c70c4bc06787e4072c4f3b1aa2f897dfdc34ce1013cf3ceef05"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e2adb09778797da09d2b5ebdbceebf7dd32e2c96f79da9052b2e87b6ea495895"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1f711e2c6dcd4edd372cf5dec5c5a30d23bba06ee012093267b3376c079ec83"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win32.whl", hash = "sha256:76a095cfe6045c7d0ca77db9934e8f7b71b14645f0094ffcd842349ada5c5fb9"}, + {file = "lazy_object_proxy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:b4f87d4ed9064b2628da63830986c3d2dca7501e6018347798313fcf028e2fd4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c83f957782cbbe8136bee26416686a6ae998c7b6191711a04da776dc9e47d4"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009e6bb1f1935a62889ddc8541514b6a9e1fcf302667dcb049a0be5c8f613e56"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75fc59fc450050b1b3c203c35020bc41bd2695ed692a392924c6ce180c6f1dc9"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:782e2c9b2aab1708ffb07d4bf377d12901d7a1d99e5e410d648d892f8967ab1f"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win32.whl", hash = "sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03"}, + {file = "lazy_object_proxy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:e271058822765ad5e3bca7f05f2ace0de58a3f4e62045a8c90a0dfd2f8ad8cc6"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e98c8af98d5707dcdecc9ab0863c0ea6e88545d42ca7c3feffb6b4d1e370c7ba"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:952c81d415b9b80ea261d2372d2a4a2332a3890c2b83e0535f263ddfe43f0d43"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80b39d3a151309efc8cc48675918891b865bdf742a8616a337cb0090791a0de9"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e221060b701e2aa2ea991542900dd13907a5c90fa80e199dbf5a03359019e7a3"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92f09ff65ecff3108e56526f9e2481b8116c0b9e1425325e13245abfd79bdb1b"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win32.whl", hash = "sha256:3ad54b9ddbe20ae9f7c1b29e52f123120772b06dbb18ec6be9101369d63a4074"}, + {file = "lazy_object_proxy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:127a789c75151db6af398b8972178afe6bda7d6f68730c057fbbc2e96b08d282"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4ed0518a14dd26092614412936920ad081a424bdcb54cc13349a8e2c6d106a"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ad9e6ed739285919aa9661a5bbed0aaf410aa60231373c5579c6b4801bd883c"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc0a92c02fa1ca1e84fc60fa258458e5bf89d90a1ddaeb8ed9cc3147f417255"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0aefc7591920bbd360d57ea03c995cebc204b424524a5bd78406f6e1b8b2a5d8"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5faf03a7d8942bb4476e3b62fd0f4cf94eaf4618e304a19865abf89a35c0bbee"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win32.whl", hash = "sha256:e333e2324307a7b5d86adfa835bb500ee70bfcd1447384a822e96495796b0ca4"}, + {file = "lazy_object_proxy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:cb73507defd385b7705c599a94474b1d5222a508e502553ef94114a143ec6696"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366c32fe5355ef5fc8a232c5436f4cc66e9d3e8967c01fb2e6302fd6627e3d94"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297f08f08a2bb0d32a4265e98a006643cd7233fb7983032bd61ac7a02956b3b"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18dd842b49456aaa9a7cf535b04ca4571a302ff72ed8740d06b5adcd41fe0757"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:217138197c170a2a74ca0e05bddcd5f1796c735c37d0eee33e43259b192aa424"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a3a87cf1e133e5b1994144c12ca4aa3d9698517fe1e2ca82977781b16955658"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win32.whl", hash = "sha256:30b339b2a743c5288405aa79a69e706a06e02958eab31859f7f3c04980853b70"}, + {file = "lazy_object_proxy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:a899b10e17743683b293a729d3a11f2f399e8a90c73b089e29f5d0fe3509f0dd"}, + {file = "lazy_object_proxy-1.10.0-pp310.pp311.pp312.pp38.pp39-none-any.whl", hash = "sha256:80fa48bd89c8f2f456fc0765c11c23bf5af827febacd2f523ca5bc1893fcc09d"}, +] + +[[package]] +name = "libcst" +version = "1.0.1" +description = "A concrete syntax tree with AST-like properties for Python 3.5, 3.6, 3.7, 3.8, 3.9, and 3.10 programs." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "libcst-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80423311f09fc5fc3270ede44d30d9d8d3c2d3dd50dbf703a581ca7346949fa6"}, + {file = "libcst-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9d6dec2a3c443792e6af7c36fadc256e4ea586214c76b52f0d18118811dbe351"}, + {file = "libcst-1.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4840a3de701778f0a19582bb3085c61591329153f801dc25da84689a3733960b"}, + {file = "libcst-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0138068baf09561268c7f079373bda45f0e2b606d2d19df1307ca8a5134fc465"}, + {file = "libcst-1.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a4931feceab171e6fce73de94e13880424367247dad6ff2b49cabfec733e144"}, + {file = "libcst-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:47dba43855e9c7b06d8b256ee81f0ebec6a4f43605456519577e09dfe4b4288c"}, + {file = "libcst-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c50541c3fd6b1d5a3765c4bb5ee8ecbba9d0e798e48f79fd5adf3b6752de4d0"}, + {file = "libcst-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5599166d5fec40e18601fb8868519dde99f77b6e4ad6074958018f9545da7abd"}, + {file = "libcst-1.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:600c4d3a9a2f75d5a055fed713a5a4d812709947909610aa6527abe08a31896f"}, + {file = "libcst-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b5aea04c35e13109edad3cf83bc6dcd74309b150a781d2189eecb288b73a87"}, + {file = "libcst-1.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddd4e0eeec499d1c824ab545e62e957dbbd69a16bc4273208817638eb7d6b3c6"}, + {file = "libcst-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:414350df5e334ddf0db1732d63da44e81b734d45abe1c597b5e5c0dd46aa4156"}, + {file = "libcst-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1adcfa7cafb6a0d39a1a0bec541355608038b45815e0c5019c95f91921d42884"}, + {file = "libcst-1.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d31ce2790eab59c1bd8e33fe72d09cfc78635c145bdc3f08296b360abb5f443"}, + {file = "libcst-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2cb687e1514625e91024e50a5d2e485c0ad3be24f199874ebf32b5de0346150"}, + {file = "libcst-1.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6caa33430c0c7a0fcad921b0deeec61ddb96796b6f88dca94966f6db62065f4f"}, + {file = "libcst-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b97f652b15c50e91df411a9c8d5e6f75882b30743a49b387dcedd3f68ed94d75"}, + {file = "libcst-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:967c66fabd52102954207bf1541312b467afc210fdf7033f32da992fb6c2372c"}, + {file = "libcst-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b666a605f4205c8357696f3b6571a38f6a8537cdcbb8f357587d35168298af34"}, + {file = "libcst-1.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae49dcbfadefb82e830d41d9f0a1db0af3b771224768f431f1b7b3a9803ed7e3"}, + {file = "libcst-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c90c74a8a314f0774f045122323fb60bacba79cbf5f71883c0848ecd67179541"}, + {file = "libcst-1.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0533de4e35396c61aeb3a6266ac30369a855910c2385aaa902ff4aabd60d409"}, + {file = "libcst-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:5e3293e77657ba62533553bb9f0c5fb173780e164c65db1ea2a3e0d03944a284"}, + {file = "libcst-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:119ba709f1dcb785a4458cf36cedb51d6f9cb2eec0acd7bb171f730eac7cb6ce"}, + {file = "libcst-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b4e336f6d68456017671cdda8ddebf9caebce8052cc21a3f494b03d7bd28386"}, + {file = "libcst-1.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8420926791b0b6206cb831a7ec73d26ae820e65bdf07ce9813c7754c7722c07a"}, + {file = "libcst-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d237e9164a43caa7d6765ee560412264484e7620c546a2ee10a8d01bd56884e0"}, + {file = "libcst-1.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:440887e5f82efb299f2e98d4bfa5663851a878cfc0efed652ab8c50205191436"}, + {file = "libcst-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:ae7f4e71d714f256b5f2ff98b5a9effba0f9dff4d779d8f35d7eb157bef78f59"}, + {file = "libcst-1.0.1.tar.gz", hash = "sha256:37187337f979ba426d8bfefc08008c3c1b09b9e9f9387050804ed2da88107570"}, +] + +[package.dependencies] +pyyaml = ">=5.2" +typing-extensions = ">=3.7.4.2" +typing-inspect = ">=0.4.0" + +[package.extras] +dev = ["Sphinx (>=5.1.1)", "black (==23.3.0)", "build (>=0.10.0)", "coverage (>=4.5.4)", "fixit (==0.1.1)", "flake8 (>=3.7.8,<5)", "hypothesis (>=4.36.0)", "hypothesmith (>=0.0.4)", "jinja2 (==3.1.2)", "jupyter (>=1.0.0)", "maturin (>=0.8.3,<0.16)", "nbsphinx (>=0.4.2)", "prompt-toolkit (>=2.0.9)", "pyre-check (==0.9.10) ; platform_system != \"Windows\"", "setuptools-rust (>=1.5.2)", "setuptools-scm (>=6.0.1)", "slotscheck (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "ufmt (==2.1.0)", "usort (==1.0.7)"] + +[[package]] +name = "linkify-it-py" +version = "2.0.3" +description = "Links recognition library with FULL unicode support." +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048"}, + {file = "linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79"}, +] + +[package.dependencies] +uc-micro-py = "*" + +[package.extras] +benchmark = ["pytest", "pytest-benchmark"] +dev = ["black", "flake8", "isort", "pre-commit", "pyproject-flake8"] +doc = ["myst-parser", "sphinx", "sphinx-book-theme"] +test = ["coverage", "pytest", "pytest-cov"] + +[[package]] +name = "loguru" +version = "0.6.0" +description = "Python logging made (stupidly) simple" +optional = false +python-versions = ">=3.5" +groups = ["main"] +files = [ + {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, + {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (>=4.1.1) ; python_version >= \"3.6\"", "black (>=19.10b0) ; python_version >= \"3.6\"", "colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "isort (>=5.1.1) ; python_version >= \"3.6\"", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "sphinx-autobuild (>=0.7.1) ; python_version >= \"3.6\"", "sphinx-rtd-theme (>=0.4.3) ; python_version >= \"3.6\"", "tox (>=3.9.0)"] + +[[package]] +name = "lxml" +version = "5.3.1" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +optional = false +python-versions = ">=3.6" +groups = ["main", "search-ddg"] +files = [ + {file = "lxml-5.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a4058f16cee694577f7e4dd410263cd0ef75644b43802a689c2b3c2a7e69453b"}, + {file = "lxml-5.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:364de8f57d6eda0c16dcfb999af902da31396949efa0e583e12675d09709881b"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:528f3a0498a8edc69af0559bdcf8a9f5a8bf7c00051a6ef3141fdcf27017bbf5"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db4743e30d6f5f92b6d2b7c86b3ad250e0bad8dee4b7ad8a0c44bfb276af89a3"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17b5d7f8acf809465086d498d62a981fa6a56d2718135bb0e4aa48c502055f5c"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:928e75a7200a4c09e6efc7482a1337919cc61fe1ba289f297827a5b76d8969c2"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a997b784a639e05b9d4053ef3b20c7e447ea80814a762f25b8ed5a89d261eac"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7b82e67c5feb682dbb559c3e6b78355f234943053af61606af126df2183b9ef9"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:f1de541a9893cf8a1b1db9bf0bf670a2decab42e3e82233d36a74eda7822b4c9"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:de1fc314c3ad6bc2f6bd5b5a5b9357b8c6896333d27fdbb7049aea8bd5af2d79"}, + {file = "lxml-5.3.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7c0536bd9178f754b277a3e53f90f9c9454a3bd108b1531ffff720e082d824f2"}, + {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:68018c4c67d7e89951a91fbd371e2e34cd8cfc71f0bb43b5332db38497025d51"}, + {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aa826340a609d0c954ba52fd831f0fba2a4165659ab0ee1a15e4aac21f302406"}, + {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:796520afa499732191e39fc95b56a3b07f95256f2d22b1c26e217fb69a9db5b5"}, + {file = "lxml-5.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3effe081b3135237da6e4c4530ff2a868d3f80be0bda027e118a5971285d42d0"}, + {file = "lxml-5.3.1-cp310-cp310-win32.whl", hash = "sha256:a22f66270bd6d0804b02cd49dae2b33d4341015545d17f8426f2c4e22f557a23"}, + {file = "lxml-5.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:0bcfadea3cdc68e678d2b20cb16a16716887dd00a881e16f7d806c2138b8ff0c"}, + {file = "lxml-5.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e220f7b3e8656ab063d2eb0cd536fafef396829cafe04cb314e734f87649058f"}, + {file = "lxml-5.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f2cfae0688fd01f7056a17367e3b84f37c545fb447d7282cf2c242b16262607"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67d2f8ad9dcc3a9e826bdc7802ed541a44e124c29b7d95a679eeb58c1c14ade8"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db0c742aad702fd5d0c6611a73f9602f20aec2007c102630c06d7633d9c8f09a"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:198bb4b4dd888e8390afa4f170d4fa28467a7eaf857f1952589f16cfbb67af27"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2a3e412ce1849be34b45922bfef03df32d1410a06d1cdeb793a343c2f1fd666"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8969dbc8d09d9cd2ae06362c3bad27d03f433252601ef658a49bd9f2b22d79"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5be8f5e4044146a69c96077c7e08f0709c13a314aa5315981185c1f00235fe65"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:133f3493253a00db2c870d3740bc458ebb7d937bd0a6a4f9328373e0db305709"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:52d82b0d436edd6a1d22d94a344b9a58abd6c68c357ed44f22d4ba8179b37629"}, + {file = "lxml-5.3.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b6f92e35e2658a5ed51c6634ceb5ddae32053182851d8cad2a5bc102a359b33"}, + {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:203b1d3eaebd34277be06a3eb880050f18a4e4d60861efba4fb946e31071a295"}, + {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:155e1a5693cf4b55af652f5c0f78ef36596c7f680ff3ec6eb4d7d85367259b2c"}, + {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:22ec2b3c191f43ed21f9545e9df94c37c6b49a5af0a874008ddc9132d49a2d9c"}, + {file = "lxml-5.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7eda194dd46e40ec745bf76795a7cccb02a6a41f445ad49d3cf66518b0bd9cff"}, + {file = "lxml-5.3.1-cp311-cp311-win32.whl", hash = "sha256:fb7c61d4be18e930f75948705e9718618862e6fc2ed0d7159b2262be73f167a2"}, + {file = "lxml-5.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c809eef167bf4a57af4b03007004896f5c60bd38dc3852fcd97a26eae3d4c9e6"}, + {file = "lxml-5.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e69add9b6b7b08c60d7ff0152c7c9a6c45b4a71a919be5abde6f98f1ea16421c"}, + {file = "lxml-5.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4e52e1b148867b01c05e21837586ee307a01e793b94072d7c7b91d2c2da02ffe"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4b382e0e636ed54cd278791d93fe2c4f370772743f02bcbe431a160089025c9"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2e49dc23a10a1296b04ca9db200c44d3eb32c8d8ec532e8c1fd24792276522a"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4399b4226c4785575fb20998dc571bc48125dc92c367ce2602d0d70e0c455eb0"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5412500e0dc5481b1ee9cf6b38bb3b473f6e411eb62b83dc9b62699c3b7b79f7"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c93ed3c998ea8472be98fb55aed65b5198740bfceaec07b2eba551e55b7b9ae"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:63d57fc94eb0bbb4735e45517afc21ef262991d8758a8f2f05dd6e4174944519"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:b450d7cabcd49aa7ab46a3c6aa3ac7e1593600a1a0605ba536ec0f1b99a04322"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:4df0ec814b50275ad6a99bc82a38b59f90e10e47714ac9871e1b223895825468"}, + {file = "lxml-5.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d184f85ad2bb1f261eac55cddfcf62a70dee89982c978e92b9a74a1bfef2e367"}, + {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b725e70d15906d24615201e650d5b0388b08a5187a55f119f25874d0103f90dd"}, + {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a31fa7536ec1fb7155a0cd3a4e3d956c835ad0a43e3610ca32384d01f079ea1c"}, + {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3c3c8b55c7fc7b7e8877b9366568cc73d68b82da7fe33d8b98527b73857a225f"}, + {file = "lxml-5.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d61ec60945d694df806a9aec88e8f29a27293c6e424f8ff91c80416e3c617645"}, + {file = "lxml-5.3.1-cp312-cp312-win32.whl", hash = "sha256:f4eac0584cdc3285ef2e74eee1513a6001681fd9753b259e8159421ed28a72e5"}, + {file = "lxml-5.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:29bfc8d3d88e56ea0a27e7c4897b642706840247f59f4377d81be8f32aa0cfbf"}, + {file = "lxml-5.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c093c7088b40d8266f57ed71d93112bd64c6724d31f0794c1e52cc4857c28e0e"}, + {file = "lxml-5.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b0884e3f22d87c30694e625b1e62e6f30d39782c806287450d9dc2fdf07692fd"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1637fa31ec682cd5760092adfabe86d9b718a75d43e65e211d5931809bc111e7"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a364e8e944d92dcbf33b6b494d4e0fb3499dcc3bd9485beb701aa4b4201fa414"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:779e851fd0e19795ccc8a9bb4d705d6baa0ef475329fe44a13cf1e962f18ff1e"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c4393600915c308e546dc7003d74371744234e8444a28622d76fe19b98fa59d1"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:673b9d8e780f455091200bba8534d5f4f465944cbdd61f31dc832d70e29064a5"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2e4a570f6a99e96c457f7bec5ad459c9c420ee80b99eb04cbfcfe3fc18ec6423"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:71f31eda4e370f46af42fc9f264fafa1b09f46ba07bdbee98f25689a04b81c20"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:42978a68d3825eaac55399eb37a4d52012a205c0c6262199b8b44fcc6fd686e8"}, + {file = "lxml-5.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:8b1942b3e4ed9ed551ed3083a2e6e0772de1e5e3aca872d955e2e86385fb7ff9"}, + {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:85c4f11be9cf08917ac2a5a8b6e1ef63b2f8e3799cec194417e76826e5f1de9c"}, + {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:231cf4d140b22a923b1d0a0a4e0b4f972e5893efcdec188934cc65888fd0227b"}, + {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:5865b270b420eda7b68928d70bb517ccbe045e53b1a428129bb44372bf3d7dd5"}, + {file = "lxml-5.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dbf7bebc2275016cddf3c997bf8a0f7044160714c64a9b83975670a04e6d2252"}, + {file = "lxml-5.3.1-cp313-cp313-win32.whl", hash = "sha256:d0751528b97d2b19a388b302be2a0ee05817097bab46ff0ed76feeec24951f78"}, + {file = "lxml-5.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:91fb6a43d72b4f8863d21f347a9163eecbf36e76e2f51068d59cd004c506f332"}, + {file = "lxml-5.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:016b96c58e9a4528219bb563acf1aaaa8bc5452e7651004894a973f03b84ba81"}, + {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82a4bb10b0beef1434fb23a09f001ab5ca87895596b4581fd53f1e5145a8934a"}, + {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d68eeef7b4d08a25e51897dac29bcb62aba830e9ac6c4e3297ee7c6a0cf6439"}, + {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:f12582b8d3b4c6be1d298c49cb7ae64a3a73efaf4c2ab4e37db182e3545815ac"}, + {file = "lxml-5.3.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2df7ed5edeb6bd5590914cd61df76eb6cce9d590ed04ec7c183cf5509f73530d"}, + {file = "lxml-5.3.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:585c4dc429deebc4307187d2b71ebe914843185ae16a4d582ee030e6cfbb4d8a"}, + {file = "lxml-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:06a20d607a86fccab2fc15a77aa445f2bdef7b49ec0520a842c5c5afd8381576"}, + {file = "lxml-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:057e30d0012439bc54ca427a83d458752ccda725c1c161cc283db07bcad43cf9"}, + {file = "lxml-5.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4867361c049761a56bd21de507cab2c2a608c55102311d142ade7dab67b34f32"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dddf0fb832486cc1ea71d189cb92eb887826e8deebe128884e15020bb6e3f61"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bcc211542f7af6f2dfb705f5f8b74e865592778e6cafdfd19c792c244ccce19"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaca5a812f050ab55426c32177091130b1e49329b3f002a32934cd0245571307"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:236610b77589faf462337b3305a1be91756c8abc5a45ff7ca8f245a71c5dab70"}, + {file = "lxml-5.3.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:aed57b541b589fa05ac248f4cb1c46cbb432ab82cbd467d1c4f6a2bdc18aecf9"}, + {file = "lxml-5.3.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:75fa3d6946d317ffc7016a6fcc44f42db6d514b7fdb8b4b28cbe058303cb6e53"}, + {file = "lxml-5.3.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:96eef5b9f336f623ffc555ab47a775495e7e8846dde88de5f941e2906453a1ce"}, + {file = "lxml-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:ef45f31aec9be01379fc6c10f1d9c677f032f2bac9383c827d44f620e8a88407"}, + {file = "lxml-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0611da6b07dd3720f492db1b463a4d1175b096b49438761cc9f35f0d9eaaef5"}, + {file = "lxml-5.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b2aca14c235c7a08558fe0a4786a1a05873a01e86b474dfa8f6df49101853a4e"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae82fce1d964f065c32c9517309f0c7be588772352d2f40b1574a214bd6e6098"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7aae7a3d63b935babfdc6864b31196afd5145878ddd22f5200729006366bc4d5"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8e0d177b1fe251c3b1b914ab64135475c5273c8cfd2857964b2e3bb0fe196a7"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:6c4dd3bfd0c82400060896717dd261137398edb7e524527438c54a8c34f736bf"}, + {file = "lxml-5.3.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f1208c1c67ec9e151d78aa3435aa9b08a488b53d9cfac9b699f15255a3461ef2"}, + {file = "lxml-5.3.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:c6aacf00d05b38a5069826e50ae72751cb5bc27bdc4d5746203988e429b385bb"}, + {file = "lxml-5.3.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5881aaa4bf3a2d086c5f20371d3a5856199a0d8ac72dd8d0dbd7a2ecfc26ab73"}, + {file = "lxml-5.3.1-cp38-cp38-win32.whl", hash = "sha256:45fbb70ccbc8683f2fb58bea89498a7274af1d9ec7995e9f4af5604e028233fc"}, + {file = "lxml-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:7512b4d0fc5339d5abbb14d1843f70499cab90d0b864f790e73f780f041615d7"}, + {file = "lxml-5.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5885bc586f1edb48e5d68e7a4b4757b5feb2a496b64f462b4d65950f5af3364f"}, + {file = "lxml-5.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1b92fe86e04f680b848fff594a908edfa72b31bfc3499ef7433790c11d4c8cd8"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a091026c3bf7519ab1e64655a3f52a59ad4a4e019a6f830c24d6430695b1cf6a"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ffb141361108e864ab5f1813f66e4e1164181227f9b1f105b042729b6c15125"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3715cdf0dd31b836433af9ee9197af10e3df41d273c19bb249230043667a5dfd"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88b72eb7222d918c967202024812c2bfb4048deeb69ca328363fb8e15254c549"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa59974880ab5ad8ef3afaa26f9bda148c5f39e06b11a8ada4660ecc9fb2feb3"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3bb8149840daf2c3f97cebf00e4ed4a65a0baff888bf2605a8d0135ff5cf764e"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:0d6b2fa86becfa81f0a0271ccb9eb127ad45fb597733a77b92e8a35e53414914"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:136bf638d92848a939fd8f0e06fcf92d9f2e4b57969d94faae27c55f3d85c05b"}, + {file = "lxml-5.3.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:89934f9f791566e54c1d92cdc8f8fd0009447a5ecdb1ec6b810d5f8c4955f6be"}, + {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8ade0363f776f87f982572c2860cc43c65ace208db49c76df0a21dde4ddd16e"}, + {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:bfbbab9316330cf81656fed435311386610f78b6c93cc5db4bebbce8dd146675"}, + {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:172d65f7c72a35a6879217bcdb4bb11bc88d55fb4879e7569f55616062d387c2"}, + {file = "lxml-5.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e3c623923967f3e5961d272718655946e5322b8d058e094764180cdee7bab1af"}, + {file = "lxml-5.3.1-cp39-cp39-win32.whl", hash = "sha256:ce0930a963ff593e8bb6fda49a503911accc67dee7e5445eec972668e672a0f0"}, + {file = "lxml-5.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7b64fcd670bca8800bc10ced36620c6bbb321e7bc1214b9c0c0df269c1dddc2"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:afa578b6524ff85fb365f454cf61683771d0170470c48ad9d170c48075f86725"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67f5e80adf0aafc7b5454f2c1cb0cde920c9b1f2cbd0485f07cc1d0497c35c5d"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dd0b80ac2d8f13ffc906123a6f20b459cb50a99222d0da492360512f3e50f84"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:422c179022ecdedbe58b0e242607198580804253da220e9454ffe848daa1cfd2"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:524ccfded8989a6595dbdda80d779fb977dbc9a7bc458864fc9a0c2fc15dc877"}, + {file = "lxml-5.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:48fd46bf7155def2e15287c6f2b133a2f78e2d22cdf55647269977b873c65499"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:05123fad495a429f123307ac6d8fd6f977b71e9a0b6d9aeeb8f80c017cb17131"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a243132767150a44e6a93cd1dde41010036e1cbc63cc3e9fe1712b277d926ce3"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c92ea6d9dd84a750b2bae72ff5e8cf5fdd13e58dda79c33e057862c29a8d5b50"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2f1be45d4c15f237209bbf123a0e05b5d630c8717c42f59f31ea9eae2ad89394"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a83d3adea1e0ee36dac34627f78ddd7f093bb9cfc0a8e97f1572a949b695cb98"}, + {file = "lxml-5.3.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3edbb9c9130bac05d8c3fe150c51c337a471cc7fdb6d2a0a7d3a88e88a829314"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2f23cf50eccb3255b6e913188291af0150d89dab44137a69e14e4dcb7be981f1"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df7e5edac4778127f2bf452e0721a58a1cfa4d1d9eac63bdd650535eb8543615"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:094b28ed8a8a072b9e9e2113a81fda668d2053f2ca9f2d202c2c8c7c2d6516b1"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:514fe78fc4b87e7a7601c92492210b20a1b0c6ab20e71e81307d9c2e377c64de"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8fffc08de02071c37865a155e5ea5fce0282e1546fd5bde7f6149fcaa32558ac"}, + {file = "lxml-5.3.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4b0d5cdba1b655d5b18042ac9c9ff50bda33568eb80feaaca4fc237b9c4fbfde"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3031e4c16b59424e8d78522c69b062d301d951dc55ad8685736c3335a97fc270"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb659702a45136c743bc130760c6f137870d4df3a9e14386478b8a0511abcfca"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a11b16a33656ffc43c92a5343a28dc71eefe460bcc2a4923a96f292692709f6"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c5ae125276f254b01daa73e2c103363d3e99e3e10505686ac7d9d2442dd4627a"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c76722b5ed4a31ba103e0dc77ab869222ec36efe1a614e42e9bcea88a36186fe"}, + {file = "lxml-5.3.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:33e06717c00c788ab4e79bc4726ecc50c54b9bfb55355eae21473c145d83c2d2"}, + {file = "lxml-5.3.1.tar.gz", hash = "sha256:106b7b5d2977b339f1e97efe2778e2ab20e99994cbb0ec5e55771ed0795920c8"}, +] + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml_html_clean"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=3.0.11,<3.1.0)"] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +linkify-it-py = {version = ">=1,<3", optional = true, markers = "extra == \"linkify\""} +mdit-py-plugins = {version = "*", optional = true, markers = "extra == \"plugins\""} +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "matplotlib" +version = "3.9.4" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50"}, + {file = "matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff"}, + {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26"}, + {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50"}, + {file = "matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5"}, + {file = "matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d"}, + {file = "matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c"}, + {file = "matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099"}, + {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249"}, + {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423"}, + {file = "matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e"}, + {file = "matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3"}, + {file = "matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70"}, + {file = "matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483"}, + {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f"}, + {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00"}, + {file = "matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0"}, + {file = "matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b"}, + {file = "matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6"}, + {file = "matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45"}, + {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858"}, + {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64"}, + {file = "matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df"}, + {file = "matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799"}, + {file = "matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb"}, + {file = "matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a"}, + {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c"}, + {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764"}, + {file = "matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041"}, + {file = "matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965"}, + {file = "matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c"}, + {file = "matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7"}, + {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e"}, + {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c"}, + {file = "matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb"}, + {file = "matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db"}, + {file = "matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865"}, + {file = "matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1,<0.17.0)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "matplotlib" +version = "3.10.1" +description = "Python plotting package" +optional = false +python-versions = ">=3.10" +groups = ["test"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "matplotlib-3.10.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ff2ae14910be903f4a24afdbb6d7d3a6c44da210fc7d42790b87aeac92238a16"}, + {file = "matplotlib-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0721a3fd3d5756ed593220a8b86808a36c5031fce489adb5b31ee6dbb47dd5b2"}, + {file = "matplotlib-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0673b4b8f131890eb3a1ad058d6e065fb3c6e71f160089b65f8515373394698"}, + {file = "matplotlib-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e875b95ac59a7908978fe307ecdbdd9a26af7fa0f33f474a27fcf8c99f64a19"}, + {file = "matplotlib-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2589659ea30726284c6c91037216f64a506a9822f8e50592d48ac16a2f29e044"}, + {file = "matplotlib-3.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a97ff127f295817bc34517255c9db6e71de8eddaab7f837b7d341dee9f2f587f"}, + {file = "matplotlib-3.10.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:057206ff2d6ab82ff3e94ebd94463d084760ca682ed5f150817b859372ec4401"}, + {file = "matplotlib-3.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a144867dd6bf8ba8cb5fc81a158b645037e11b3e5cf8a50bd5f9917cb863adfe"}, + {file = "matplotlib-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56c5d9fcd9879aa8040f196a235e2dcbdf7dd03ab5b07c0696f80bc6cf04bedd"}, + {file = "matplotlib-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f69dc9713e4ad2fb21a1c30e37bd445d496524257dfda40ff4a8efb3604ab5c"}, + {file = "matplotlib-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c59af3e8aca75d7744b68e8e78a669e91ccbcf1ac35d0102a7b1b46883f1dd7"}, + {file = "matplotlib-3.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:11b65088c6f3dae784bc72e8d039a2580186285f87448babb9ddb2ad0082993a"}, + {file = "matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107"}, + {file = "matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be"}, + {file = "matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6"}, + {file = "matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d"}, + {file = "matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea"}, + {file = "matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c"}, + {file = "matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b"}, + {file = "matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1"}, + {file = "matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3"}, + {file = "matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6"}, + {file = "matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b"}, + {file = "matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473"}, + {file = "matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01"}, + {file = "matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb"}, + {file = "matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972"}, + {file = "matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3"}, + {file = "matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f"}, + {file = "matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9"}, + {file = "matplotlib-3.10.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:648406f1899f9a818cef8c0231b44dcfc4ff36f167101c3fd1c9151f24220fdc"}, + {file = "matplotlib-3.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:02582304e352f40520727984a5a18f37e8187861f954fea9be7ef06569cf85b4"}, + {file = "matplotlib-3.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3809916157ba871bcdd33d3493acd7fe3037db5daa917ca6e77975a94cef779"}, + {file = "matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +groups = ["main", "dev", "test"] +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.4.2" +description = "Collection of plugins for markdown-it-py" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"}, + {file = "mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +groups = ["main", "test"] +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "meilisearch" +version = "0.21.0" +description = "The python client for Meilisearch API." +optional = false +python-versions = ">=3" +groups = ["main"] +files = [ + {file = "meilisearch-0.21.0-py3-none-any.whl", hash = "sha256:cff30734f2cd8ddf0427e225eff0a7b94c90ef3ba1cc5f42828b0c7298e3f4ee"}, + {file = "meilisearch-0.21.0.tar.gz", hash = "sha256:4614aa580adb0638f631ab4258e069291ba0c132603e54a15e6c8336e9ed4a63"}, +] + +[package.dependencies] +camel-converter = {version = "*", extras = ["pydantic"]} +requests = "*" + +[[package]] +name = "metagpt-core" +version = "1.0.0" +description = "The core package of The Multi-Agent Framework" +optional = false +python-versions = ">=3.9,<3.12" +groups = ["main"] +files = [] +develop = true + +[package.dependencies] +aiofiles = "23.2.1" +aiohttp = "3.8.6" +loguru = "0.6.0" +pydantic = ">=2.5.3" +PyYAML = "6.0.1" +rank-bm25 = "0.2.2" +setuptools = "65.6.3" +tenacity = "8.2.3" +tiktoken = "0.7.0" +tree_sitter = "~0.23.2" +tree_sitter_python = "~0.23.2" + +[package.source] +type = "directory" +url = "metagpt/core" + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +groups = ["test"] +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + +[[package]] +name = "more-itertools" +version = "10.6.0" +description = "More routines for operating on iterables, beyond itertools" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "more-itertools-10.6.0.tar.gz", hash = "sha256:2cd7fad1009c31cc9fb6a035108509e6547547a7a738374f10bd49a09eb3ee3b"}, + {file = "more_itertools-10.6.0-py3-none-any.whl", hash = "sha256:6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89"}, +] + +[[package]] +name = "motor" +version = "3.7.0" +description = "Non-blocking MongoDB driver for Tornado or asyncio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "motor-3.7.0-py3-none-any.whl", hash = "sha256:61bdf1afded179f008d423f98066348157686f25a90776ea155db5f47f57d605"}, + {file = "motor-3.7.0.tar.gz", hash = "sha256:0dfa1f12c812bd90819c519b78bed626b5a9dbb29bba079ccff2bfa8627e0fec"}, +] + +[package.dependencies] +pymongo = ">=4.9,<5.0" + +[package.extras] +aws = ["pymongo[aws] (>=4.5,<5)"] +docs = ["aiohttp", "furo (==2024.8.6)", "readthedocs-sphinx-search (>=0.3,<1.0)", "sphinx (>=5.3,<8)", "sphinx-rtd-theme (>=2,<3)", "tornado"] +encryption = ["pymongo[encryption] (>=4.5,<5)"] +gssapi = ["pymongo[gssapi] (>=4.5,<5)"] +ocsp = ["pymongo[ocsp] (>=4.5,<5)"] +snappy = ["pymongo[snappy] (>=4.5,<5)"] +test = ["aiohttp (>=3.8.7)", "cffi (>=1.17.0rc1) ; python_version == \"3.13\"", "mockupdb", "pymongo[encryption] (>=4.5,<5)", "pytest (>=7)", "pytest-asyncio", "tornado (>=5)"] +zstd = ["pymongo[zstd] (>=4.5,<5)"] + +[[package]] +name = "multidict" +version = "6.3.2" +description = "multidict implementation" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "multidict-6.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8b3dc0eec9304fa04d84a51ea13b0ec170bace5b7ddeaac748149efd316f1504"}, + {file = "multidict-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9534f3d84addd3b6018fa83f97c9d4247aaa94ac917d1ed7b2523306f99f5c16"}, + {file = "multidict-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a003ce1413ae01f0b8789c1c987991346a94620a4d22210f7a8fe753646d3209"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b43f7384e68b1b982c99f489921a459467b5584bdb963b25e0df57c9039d0ad"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d142ae84047262dc75c1f92eaf95b20680f85ce11d35571b4c97e267f96fadc4"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ec7e86fbc48aa1d6d686501a8547818ba8d645e7e40eaa98232a5d43ee4380ad"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe019fb437632b016e6cac67a7e964f1ef827ef4023f1ca0227b54be354da97e"}, + {file = "multidict-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b60cb81214a9da7cfd8ae2853d5e6e47225ece55fe5833142fe0af321c35299"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:32d9e8ef2e0312d4e96ca9adc88e0675b6d8e144349efce4a7c95d5ccb6d88e0"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:335d584312e3fa43633d63175dfc1a5f137dd7aa03d38d1310237d54c3032774"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:b8df917faa6b8cac3d6870fc21cb7e4d169faca68e43ffe568c156c9c6408a4d"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:cc060b9b89b701dd8fedef5b99e1f1002b8cb95072693233a63389d37e48212d"}, + {file = "multidict-6.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f2ce3be2500658f3c644494b934628bb0c82e549dde250d2119689ce791cc8b8"}, + {file = "multidict-6.3.2-cp310-cp310-win32.whl", hash = "sha256:dbcb4490d8e74b484449abd51751b8f560dd0a4812eb5dacc6a588498222a9ab"}, + {file = "multidict-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:06944f9ced30f8602be873563ed4df7e3f40958f60b2db39732c11d615a33687"}, + {file = "multidict-6.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:45a034f41fcd16968c0470d8912d293d7b0d0822fc25739c5c2ff7835b85bc56"}, + {file = "multidict-6.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:352585cec45f5d83d886fc522955492bb436fca032b11d487b12d31c5a81b9e3"}, + {file = "multidict-6.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:da9d89d293511fd0a83a90559dc131f8b3292b6975eb80feff19e5f4663647e2"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fa716592224aa652b9347a586cfe018635229074565663894eb4eb21f8307f"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0326278a44c56e94792475268e5cd3d47fbc0bd41ee56928c3bbb103ba7f58fe"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb1ea87f7fe45e5079f6315e95d64d4ca8b43ef656d98bed63a02e3756853a22"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cff3c5a98d037024a9065aafc621a8599fad7b423393685dc83cf7a32f8b691"}, + {file = "multidict-6.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed99834b053c655d980fb98029003cb24281e47a796052faad4543aa9e01b8e8"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7048440e505d2b4741e5d0b32bd2f427c901f38c7760fc245918be2cf69b3b85"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:27248c27b563f5889556da8a96e18e98a56ff807ac1a7d56cf4453c2c9e4cd91"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6323b4ba0e018bd266f776c35f3f0943fc4ee77e481593c9f93bd49888f24e94"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:81f7ce5ec7c27d0b45c10449c8f0fed192b93251e2e98cb0b21fec779ef1dc4d"}, + {file = "multidict-6.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03bfcf2825b3bed0ba08a9d854acd18b938cab0d2dba3372b51c78e496bac811"}, + {file = "multidict-6.3.2-cp311-cp311-win32.whl", hash = "sha256:f32c2790512cae6ca886920e58cdc8c784bdc4bb2a5ec74127c71980369d18dc"}, + {file = "multidict-6.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:0b0c15e58e038a2cd75ef7cf7e072bc39b5e0488b165902efb27978984bbad70"}, + {file = "multidict-6.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d1e0ba1ce1b8cc79117196642d95f4365e118eaf5fb85f57cdbcc5a25640b2a4"}, + {file = "multidict-6.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:029bbd7d782251a78975214b78ee632672310f9233d49531fc93e8e99154af25"}, + {file = "multidict-6.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7db41e3b56817d9175264e5fe00192fbcb8e1265307a59f53dede86161b150e"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fcab18e65cc555ac29981a581518c23311f2b1e72d8f658f9891590465383be"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d50eff89aa4d145a5486b171a2177042d08ea5105f813027eb1050abe91839f"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:643e57b403d3e240045a3681f9e6a04d35a33eddc501b4cbbbdbc9c70122e7bc"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d17b37b9715b30605b5bab1460569742d0c309e5c20079263b440f5d7746e7e"}, + {file = "multidict-6.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68acd51fa94e63312b8ddf84bfc9c3d3442fe1f9988bbe1b6c703043af8867fe"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:347eea2852ab7f697cc5ed9b1aae96b08f8529cca0c6468f747f0781b1842898"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4d3f8e57027dcda84a1aa181501c15c45eab9566eb6fcc274cbd1e7561224f8"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9ca57a841ffcf712e47875d026aa49d6e67f9560624d54b51628603700d5d287"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7cafdafb44c4e646118410368307693e49d19167e5f119cbe3a88697d2d1a636"}, + {file = "multidict-6.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:430120c6ce3715a9c6075cabcee557daccbcca8ba25a9fedf05c7bf564532f2d"}, + {file = "multidict-6.3.2-cp312-cp312-win32.whl", hash = "sha256:13bec31375235a68457ab887ce1bbf4f59d5810d838ae5d7e5b416242e1f3ed4"}, + {file = "multidict-6.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:c3b6d7620e6e90c6d97eaf3a63bf7fbd2ba253aab89120a4a9c660bf2d675391"}, + {file = "multidict-6.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b9ca24700322816ae0d426aa33671cf68242f8cc85cee0d0e936465ddaee90b5"}, + {file = "multidict-6.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d9fbbe23667d596ff4f9f74d44b06e40ebb0ab6b262cf14a284f859a66f86457"}, + {file = "multidict-6.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9cb602c5bea0589570ad3a4a6f2649c4f13cc7a1e97b4c616e5e9ff8dc490987"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93ca81dd4d1542e20000ed90f4cc84b7713776f620d04c2b75b8efbe61106c99"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18b6310b5454c62242577a128c87df8897f39dd913311cf2e1298e47dfc089eb"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a6dda57de1fc9aedfdb600a8640c99385cdab59a5716cb714b52b6005797f77"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d8ec42d03cc6b29845552a68151f9e623c541f1708328353220af571e24a247"}, + {file = "multidict-6.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80681969cee2fa84dafeb53615d51d24246849984e3e87fbe4fe39956f2e23bf"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:01489b0c3592bb9d238e5690e9566db7f77a5380f054b57077d2c4deeaade0eb"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:522d9f1fd995d04dfedc0a40bca7e2591bc577d920079df50b56245a4a252c1c"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2014e9cf0b4e9c75bbad49c1758e5a9bf967a56184fc5fcc51527425baf5abba"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:78ced9fcbee79e446ff4bb3018ac7ba1670703de7873d9c1f6f9883db53c71bc"}, + {file = "multidict-6.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1faf01af972bd01216a107c195f5294f9f393531bc3e4faddc9b333581255d4d"}, + {file = "multidict-6.3.2-cp313-cp313-win32.whl", hash = "sha256:7a699ab13d8d8e1f885de1535b4f477fb93836c87168318244c2685da7b7f655"}, + {file = "multidict-6.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:8666bb0d883310c83be01676e302587834dfd185b52758caeab32ef0eb387bc6"}, + {file = "multidict-6.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:d82c95aabee29612b1c4f48b98be98181686eb7d6c0152301f72715705cc787b"}, + {file = "multidict-6.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f47709173ea9e87a7fd05cd7e5cf1e5d4158924ff988a9a8e0fbd853705f0e68"}, + {file = "multidict-6.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0c7f9d0276ceaab41b8ae78534ff28ea33d5de85db551cbf80c44371f2b55d13"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6eab22df44a25acab2e738f882f5ec551282ab45b2bbda5301e6d2cfb323036"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a947cb7c657f57874021b9b70c7aac049c877fb576955a40afa8df71d01a1390"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5faa346e8e1c371187cf345ab1e02a75889f9f510c9cbc575c31b779f7df084d"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc6e08d977aebf1718540533b4ba5b351ccec2db093370958a653b1f7f9219cc"}, + {file = "multidict-6.3.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:98eab7acf55275b5bf09834125fa3a80b143a9f241cdcdd3f1295ffdc3c6d097"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:36863655630becc224375c0b99364978a0f95aebfb27fb6dd500f7fb5fb36e79"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d9c0979c096c0d46a963331b0e400d3a9e560e41219df4b35f0d7a2f28f39710"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:0efc04f70f05e70e5945890767e8874da5953a196f5b07c552d305afae0f3bf6"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:2c519b3b82c34539fae3e22e4ea965869ac6b628794b1eb487780dde37637ab7"}, + {file = "multidict-6.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:329160e301f2afd7b43725d3dda8a7ef8ee41d4ceac2083fc0d8c1cc8a4bd56b"}, + {file = "multidict-6.3.2-cp313-cp313t-win32.whl", hash = "sha256:420e5144a5f598dad8db3128f1695cd42a38a0026c2991091dab91697832f8cc"}, + {file = "multidict-6.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:875faded2861c7af2682c67088e6313fec35ede811e071c96d36b081873cea14"}, + {file = "multidict-6.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2516c5eb5732d6c4e29fa93323bfdc55186895124bc569e2404e3820934be378"}, + {file = "multidict-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:be5c8622e665cc5491c13c0fcd52915cdbae991a3514251d71129691338cdfb2"}, + {file = "multidict-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ef33150eea7953cfdb571d862cff894e0ad97ab80d97731eb4b9328fc32d52b"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40b357738ce46e998f1b1bad9c4b79b2a9755915f71b87a8c01ce123a22a4f99"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c60e059fcd3655a653ba99fec2556cd0260ec57f9cb138d3e6ffc413638a2e"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:629e7c5e75bde83e54a22c7043ce89d68691d1f103be6d09a1c82b870df3b4b8"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee6c8fc97d893fdf1fff15a619fee8de2f31c9b289ef7594730e35074fa0cefb"}, + {file = "multidict-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52081d2f27e0652265d4637b03f09b82f6da5ce5e1474f07dc64674ff8bfc04c"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:64529dc395b5fd0a7826ffa70d2d9a7f4abd8f5333d6aaaba67fdf7bedde9f21"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2b7c3fad827770840f5399348c89635ed6d6e9bba363baad7d3c7f86a9cf1da3"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:24aa42b1651c654ae9e5273e06c3b7ccffe9f7cc76fbde40c37e9ae65f170818"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:04ceea01e9991357164b12882e120ce6b4d63a0424bb9f9cd37910aa56d30830"}, + {file = "multidict-6.3.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:943897a41160945416617db567d867ab34e9258adaffc56a25a4c3f99d919598"}, + {file = "multidict-6.3.2-cp39-cp39-win32.whl", hash = "sha256:76157a9a0c5380aadd3b5ff7b8deee355ff5adecc66c837b444fa633b4d409a2"}, + {file = "multidict-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:d091d123e44035cd5664554308477aff0b58db37e701e7598a67e907b98d1925"}, + {file = "multidict-6.3.2-py3-none-any.whl", hash = "sha256:71409d4579f716217f23be2f5e7afca5ca926aaeb398aa11b72d793bff637a1f"}, + {file = "multidict-6.3.2.tar.gz", hash = "sha256:c1035eea471f759fa853dd6e76aaa1e389f93b3e1403093fa0fd3ab4db490678"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "multiprocess" +version = "0.70.17" +description = "better multiprocessing and multithreading in Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ddb24e5bcdb64e90ec5543a1f05a39463068b6d3b804aa3f2a4e16ec28562d6"}, + {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d729f55198a3579f6879766a6d9b72b42d4b320c0dcb7844afb774d75b573c62"}, + {file = "multiprocess-0.70.17-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2c82d0375baed8d8dd0d8c38eb87c5ae9c471f8e384ad203a36f095ee860f67"}, + {file = "multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_arm64.whl", hash = "sha256:a22a6b1a482b80eab53078418bb0f7025e4f7d93cc8e1f36481477a023884861"}, + {file = "multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:349525099a0c9ac5936f0488b5ee73199098dac3ac899d81d326d238f9fd3ccd"}, + {file = "multiprocess-0.70.17-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:27b8409c02b5dd89d336107c101dfbd1530a2cd4fd425fc27dcb7adb6e0b47bf"}, + {file = "multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_arm64.whl", hash = "sha256:2ea0939b0f4760a16a548942c65c76ff5afd81fbf1083c56ae75e21faf92e426"}, + {file = "multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_x86_64.whl", hash = "sha256:2b12e081df87ab755190e227341b2c3b17ee6587e9c82fecddcbe6aa812cd7f7"}, + {file = "multiprocess-0.70.17-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a0f01cd9d079af7a8296f521dc03859d1a414d14c1e2b6e676ef789333421c95"}, + {file = "multiprocess-0.70.17-py310-none-any.whl", hash = "sha256:38357ca266b51a2e22841b755d9a91e4bb7b937979a54d411677111716c32744"}, + {file = "multiprocess-0.70.17-py311-none-any.whl", hash = "sha256:2884701445d0177aec5bd5f6ee0df296773e4fb65b11903b94c613fb46cfb7d1"}, + {file = "multiprocess-0.70.17-py312-none-any.whl", hash = "sha256:2818af14c52446b9617d1b0755fa70ca2f77c28b25ed97bdaa2c69a22c47b46c"}, + {file = "multiprocess-0.70.17-py313-none-any.whl", hash = "sha256:20c28ca19079a6c879258103a6d60b94d4ffe2d9da07dda93fb1c8bc6243f522"}, + {file = "multiprocess-0.70.17-py38-none-any.whl", hash = "sha256:1d52f068357acd1e5bbc670b273ef8f81d57863235d9fbf9314751886e141968"}, + {file = "multiprocess-0.70.17-py39-none-any.whl", hash = "sha256:c3feb874ba574fbccfb335980020c1ac631fbf2a3f7bee4e2042ede62558a021"}, + {file = "multiprocess-0.70.17.tar.gz", hash = "sha256:4ae2f11a3416809ebc9a48abfc8b14ecce0652a0944731a1493a3c1ba44ff57a"}, +] + +[package.dependencies] +dill = ">=0.3.9" + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +groups = ["main", "dev"] +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "nbclient" +version = "0.9.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.8.0" +groups = ["main"] +files = [ + {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"}, + {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbformat" +version = "5.9.2" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, + {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, +] + +[package.dependencies] +fastjsonschema = "*" +jsonschema = ">=2.6" +jupyter-core = "*" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +groups = ["main"] +files = [ + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, +] + +[[package]] +name = "networkx" +version = "3.2.1" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version == \"3.9\"" +files = [ + {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, + {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, +] + +[package.extras] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "networkx" +version = "3.4.2" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, + {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, +] + +[package.extras] +default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "openai" +version = "1.70.0" +description = "The official Python library for the openai API" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "openai-1.70.0-py3-none-any.whl", hash = "sha256:f6438d053fd8b2e05fd6bef70871e832d9bbdf55e119d0ac5b92726f1ae6f614"}, + {file = "openai-1.70.0.tar.gz", hash = "sha256:e52a8d54c3efeb08cf58539b5b21a5abef25368b5432965e4de88cdf4e091b2b"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tqdm = ">4" +typing-extensions = ">=4.11,<5" + +[package.extras] +datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +realtime = ["websockets (>=13,<15)"] +voice-helpers = ["numpy (>=2.0.2)", "sounddevice (>=0.5.1)"] + +[[package]] +name = "openapi-core" +version = "0.18.2" +description = "client-side and server-side support for the OpenAPI Specification v3" +optional = false +python-versions = ">=3.8.0,<4.0.0" +groups = ["main"] +files = [ + {file = "openapi_core-0.18.2-py3-none-any.whl", hash = "sha256:ec13d366766d564450de60374f59feb0b5ccb447aed642cdf0f1ecfcc6fbe80a"}, + {file = "openapi_core-0.18.2.tar.gz", hash = "sha256:d4cc50f3ee03ae46313c83e97c6fbfe7e7ae9686741135eb0e4ed49e9d8ff08a"}, +] + +[package.dependencies] +asgiref = ">=3.6.0,<4.0.0" +isodate = "*" +jsonschema = ">=4.18.0,<5.0.0" +jsonschema-spec = ">=0.2.3,<0.3.0" +more-itertools = "*" +openapi-schema-validator = ">=0.6.0,<0.7.0" +openapi-spec-validator = ">=0.7.1,<0.8.0" +parse = "*" +werkzeug = "*" + +[package.extras] +aiohttp = ["aiohttp (>=3.0)", "multidict (>=6.0.4,<7.0.0)"] +django = ["django (>=3.0)"] +falcon = ["falcon (>=3.0)"] +flask = ["flask"] +requests = ["requests"] +starlette = ["starlette (>=0.26.1,<0.32.0)"] + +[[package]] +name = "openapi-schema-validator" +version = "0.6.3" +description = "OpenAPI schema validation for Python" +optional = false +python-versions = "<4.0.0,>=3.8.0" +groups = ["main"] +files = [ + {file = "openapi_schema_validator-0.6.3-py3-none-any.whl", hash = "sha256:f3b9870f4e556b5a62a1c39da72a6b4b16f3ad9c73dc80084b1b11e74ba148a3"}, + {file = "openapi_schema_validator-0.6.3.tar.gz", hash = "sha256:f37bace4fc2a5d96692f4f8b31dc0f8d7400fd04f3a937798eaf880d425de6ee"}, +] + +[package.dependencies] +jsonschema = ">=4.19.1,<5.0.0" +jsonschema-specifications = ">=2023.5.2" +rfc3339-validator = "*" + +[[package]] +name = "openapi-spec-validator" +version = "0.7.1" +description = "OpenAPI 2.0 (aka Swagger) and OpenAPI 3 spec validator" +optional = false +python-versions = ">=3.8.0,<4.0.0" +groups = ["main"] +files = [ + {file = "openapi_spec_validator-0.7.1-py3-none-any.whl", hash = "sha256:3c81825043f24ccbcd2f4b149b11e8231abce5ba84f37065e14ec947d8f4e959"}, + {file = "openapi_spec_validator-0.7.1.tar.gz", hash = "sha256:8577b85a8268685da6f8aa30990b83b7960d4d1117e901d451b5d572605e5ec7"}, +] + +[package.dependencies] +jsonschema = ">=4.18.0,<5.0.0" +jsonschema-path = ">=0.3.1,<0.4.0" +lazy-object-proxy = ">=1.7.1,<2.0.0" +openapi-schema-validator = ">=0.6.0,<0.7.0" + +[[package]] +name = "openpyxl" +version = "3.1.5" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, + {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, +] + +[package.dependencies] +et-xmlfile = "*" + +[[package]] +name = "orjson" +version = "3.10.16" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "orjson-3.10.16-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4cb473b8e79154fa778fb56d2d73763d977be3dcc140587e07dbc545bbfc38f8"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:622a8e85eeec1948690409a19ca1c7d9fd8ff116f4861d261e6ae2094fe59a00"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c682d852d0ce77613993dc967e90e151899fe2d8e71c20e9be164080f468e370"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c520ae736acd2e32df193bcff73491e64c936f3e44a2916b548da048a48b46b"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:134f87c76bfae00f2094d85cfab261b289b76d78c6da8a7a3b3c09d362fd1e06"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b59afde79563e2cf37cfe62ee3b71c063fd5546c8e662d7fcfc2a3d5031a5c4c"}, + {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:113602f8241daaff05d6fad25bd481d54c42d8d72ef4c831bb3ab682a54d9e15"}, + {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4fc0077d101f8fab4031e6554fc17b4c2ad8fdbc56ee64a727f3c95b379e31da"}, + {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9c6bf6ff180cd69e93f3f50380224218cfab79953a868ea3908430bcfaf9cb5e"}, + {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5673eadfa952f95a7cd76418ff189df11b0a9c34b1995dff43a6fdbce5d63bf4"}, + {file = "orjson-3.10.16-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5fe638a423d852b0ae1e1a79895851696cb0d9fa0946fdbfd5da5072d9bb9551"}, + {file = "orjson-3.10.16-cp310-cp310-win32.whl", hash = "sha256:33af58f479b3c6435ab8f8b57999874b4b40c804c7a36b5cc6b54d8f28e1d3dd"}, + {file = "orjson-3.10.16-cp310-cp310-win_amd64.whl", hash = "sha256:0338356b3f56d71293c583350af26f053017071836b07e064e92819ecf1aa055"}, + {file = "orjson-3.10.16-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44fcbe1a1884f8bc9e2e863168b0f84230c3d634afe41c678637d2728ea8e739"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78177bf0a9d0192e0b34c3d78bcff7fe21d1b5d84aeb5ebdfe0dbe637b885225"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12824073a010a754bb27330cad21d6e9b98374f497f391b8707752b96f72e741"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddd41007e56284e9867864aa2f29f3136bb1dd19a49ca43c0b4eda22a579cf53"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0877c4d35de639645de83666458ca1f12560d9fa7aa9b25d8bb8f52f61627d14"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9a09a539e9cc3beead3e7107093b4ac176d015bec64f811afb5965fce077a03c"}, + {file = "orjson-3.10.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31b98bc9b40610fec971d9a4d67bb2ed02eec0a8ae35f8ccd2086320c28526ca"}, + {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0ce243f5a8739f3a18830bc62dc2e05b69a7545bafd3e3249f86668b2bcd8e50"}, + {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:64792c0025bae049b3074c6abe0cf06f23c8e9f5a445f4bab31dc5ca23dbf9e1"}, + {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ea53f7e68eec718b8e17e942f7ca56c6bd43562eb19db3f22d90d75e13f0431d"}, + {file = "orjson-3.10.16-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a741ba1a9488c92227711bde8c8c2b63d7d3816883268c808fbeada00400c164"}, + {file = "orjson-3.10.16-cp311-cp311-win32.whl", hash = "sha256:c7ed2c61bb8226384c3fdf1fb01c51b47b03e3f4536c985078cccc2fd19f1619"}, + {file = "orjson-3.10.16-cp311-cp311-win_amd64.whl", hash = "sha256:cd67d8b3e0e56222a2e7b7f7da9031e30ecd1fe251c023340b9f12caca85ab60"}, + {file = "orjson-3.10.16-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6d3444abbfa71ba21bb042caa4b062535b122248259fdb9deea567969140abca"}, + {file = "orjson-3.10.16-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:30245c08d818fdcaa48b7d5b81499b8cae09acabb216fe61ca619876b128e184"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0ba1d0baa71bf7579a4ccdcf503e6f3098ef9542106a0eca82395898c8a500a"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb0beefa5ef3af8845f3a69ff2a4aa62529b5acec1cfe5f8a6b4141033fd46ef"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6daa0e1c9bf2e030e93c98394de94506f2a4d12e1e9dadd7c53d5e44d0f9628e"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9da9019afb21e02410ef600e56666652b73eb3e4d213a0ec919ff391a7dd52aa"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:daeb3a1ee17b69981d3aae30c3b4e786b0f8c9e6c71f2b48f1aef934f63f38f4"}, + {file = "orjson-3.10.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fed80eaf0e20a31942ae5d0728849862446512769692474be5e6b73123a23b"}, + {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73390ed838f03764540a7bdc4071fe0123914c2cc02fb6abf35182d5fd1b7a42"}, + {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:a22bba012a0c94ec02a7768953020ab0d3e2b884760f859176343a36c01adf87"}, + {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5385bbfdbc90ff5b2635b7e6bebf259652db00a92b5e3c45b616df75b9058e88"}, + {file = "orjson-3.10.16-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:02c6279016346e774dd92625d46c6c40db687b8a0d685aadb91e26e46cc33e1e"}, + {file = "orjson-3.10.16-cp312-cp312-win32.whl", hash = "sha256:7ca55097a11426db80f79378e873a8c51f4dde9ffc22de44850f9696b7eb0e8c"}, + {file = "orjson-3.10.16-cp312-cp312-win_amd64.whl", hash = "sha256:86d127efdd3f9bf5f04809b70faca1e6836556ea3cc46e662b44dab3fe71f3d6"}, + {file = "orjson-3.10.16-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:148a97f7de811ba14bc6dbc4a433e0341ffd2cc285065199fb5f6a98013744bd"}, + {file = "orjson-3.10.16-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:1d960c1bf0e734ea36d0adc880076de3846aaec45ffad29b78c7f1b7962516b8"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a318cd184d1269f68634464b12871386808dc8b7c27de8565234d25975a7a137"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df23f8df3ef9223d1d6748bea63fca55aae7da30a875700809c500a05975522b"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b94dda8dd6d1378f1037d7f3f6b21db769ef911c4567cbaa962bb6dc5021cf90"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f12970a26666a8775346003fd94347d03ccb98ab8aa063036818381acf5f523e"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15a1431a245d856bd56e4d29ea0023eb4d2c8f71efe914beb3dee8ab3f0cd7fb"}, + {file = "orjson-3.10.16-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c83655cfc247f399a222567d146524674a7b217af7ef8289c0ff53cfe8db09f0"}, + {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fa59ae64cb6ddde8f09bdbf7baf933c4cd05734ad84dcf4e43b887eb24e37652"}, + {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ca5426e5aacc2e9507d341bc169d8af9c3cbe88f4cd4c1cf2f87e8564730eb56"}, + {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6fd5da4edf98a400946cd3a195680de56f1e7575109b9acb9493331047157430"}, + {file = "orjson-3.10.16-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:980ecc7a53e567169282a5e0ff078393bac78320d44238da4e246d71a4e0e8f5"}, + {file = "orjson-3.10.16-cp313-cp313-win32.whl", hash = "sha256:28f79944dd006ac540a6465ebd5f8f45dfdf0948ff998eac7a908275b4c1add6"}, + {file = "orjson-3.10.16-cp313-cp313-win_amd64.whl", hash = "sha256:fe0a145e96d51971407cb8ba947e63ead2aa915db59d6631a355f5f2150b56b7"}, + {file = "orjson-3.10.16-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c35b5c1fb5a5d6d2fea825dec5d3d16bea3c06ac744708a8e1ff41d4ba10cdf1"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9aac7ecc86218b4b3048c768f227a9452287001d7548500150bb75ee21bf55d"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6e19f5102fff36f923b6dfdb3236ec710b649da975ed57c29833cb910c5a73ab"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17210490408eb62755a334a6f20ed17c39f27b4f45d89a38cd144cd458eba80b"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbbe04451db85916e52a9f720bd89bf41f803cf63b038595674691680cbebd1b"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a966eba501a3a1f309f5a6af32ed9eb8f316fa19d9947bac3e6350dc63a6f0a"}, + {file = "orjson-3.10.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01e0d22f06c81e6c435723343e1eefc710e0510a35d897856766d475f2a15687"}, + {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7c1e602d028ee285dbd300fb9820b342b937df64d5a3336e1618b354e95a2569"}, + {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d230e5020666a6725629df81e210dc11c3eae7d52fe909a7157b3875238484f3"}, + {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0f8baac07d4555f57d44746a7d80fbe6b2c4fe2ed68136b4abb51cfec512a5e9"}, + {file = "orjson-3.10.16-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:524e48420b90fc66953e91b660b3d05faaf921277d6707e328fde1c218b31250"}, + {file = "orjson-3.10.16-cp39-cp39-win32.whl", hash = "sha256:a9f614e31423d7292dbca966a53b2d775c64528c7d91424ab2747d8ab8ce5c72"}, + {file = "orjson-3.10.16-cp39-cp39-win_amd64.whl", hash = "sha256:c338dc2296d1ed0d5c5c27dfb22d00b330555cb706c2e0be1e1c3940a0895905"}, + {file = "orjson-3.10.16.tar.gz", hash = "sha256:d2aaa5c495e11d17b9b93205f5fa196737ee3202f000aaebf028dc9a73750f10"}, +] + +[[package]] +name = "outcome" +version = "1.3.0.post0" +description = "Capture the outcome of Python function calls." +optional = false +python-versions = ">=3.7" +groups = ["selenium"] +files = [ + {file = "outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b"}, + {file = "outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8"}, +] + +[package.dependencies] +attrs = ">=19.2.0" + +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev", "selenium", "test"] +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + +[[package]] +name = "pandas" +version = "2.1.1" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "pandas-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58d997dbee0d4b64f3cb881a24f918b5f25dd64ddf31f467bb9b67ae4c63a1e4"}, + {file = "pandas-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02304e11582c5d090e5a52aec726f31fe3f42895d6bfc1f28738f9b64b6f0614"}, + {file = "pandas-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffa8f0966de2c22de408d0e322db2faed6f6e74265aa0856f3824813cf124363"}, + {file = "pandas-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1f84c144dee086fe4f04a472b5cd51e680f061adf75c1ae4fc3a9275560f8f4"}, + {file = "pandas-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75ce97667d06d69396d72be074f0556698c7f662029322027c226fd7a26965cb"}, + {file = "pandas-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:4c3f32fd7c4dccd035f71734df39231ac1a6ff95e8bdab8d891167197b7018d2"}, + {file = "pandas-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e2959720b70e106bb1d8b6eadd8ecd7c8e99ccdbe03ee03260877184bb2877d"}, + {file = "pandas-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25e8474a8eb258e391e30c288eecec565bfed3e026f312b0cbd709a63906b6f8"}, + {file = "pandas-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8bd1685556f3374520466998929bade3076aeae77c3e67ada5ed2b90b4de7f0"}, + {file = "pandas-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc3657869c7902810f32bd072f0740487f9e030c1a3ab03e0af093db35a9d14e"}, + {file = "pandas-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:05674536bd477af36aa2effd4ec8f71b92234ce0cc174de34fd21e2ee99adbc2"}, + {file = "pandas-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:b407381258a667df49d58a1b637be33e514b07f9285feb27769cedb3ab3d0b3a"}, + {file = "pandas-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c747793c4e9dcece7bb20156179529898abf505fe32cb40c4052107a3c620b49"}, + {file = "pandas-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3bcad1e6fb34b727b016775bea407311f7721db87e5b409e6542f4546a4951ea"}, + {file = "pandas-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5ec7740f9ccb90aec64edd71434711f58ee0ea7f5ed4ac48be11cfa9abf7317"}, + {file = "pandas-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29deb61de5a8a93bdd033df328441a79fcf8dd3c12d5ed0b41a395eef9cd76f0"}, + {file = "pandas-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f99bebf19b7e03cf80a4e770a3e65eee9dd4e2679039f542d7c1ace7b7b1daa"}, + {file = "pandas-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:84e7e910096416adec68075dc87b986ff202920fb8704e6d9c8c9897fe7332d6"}, + {file = "pandas-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366da7b0e540d1b908886d4feb3d951f2f1e572e655c1160f5fde28ad4abb750"}, + {file = "pandas-2.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e50e72b667415a816ac27dfcfe686dc5a0b02202e06196b943d54c4f9c7693e"}, + {file = "pandas-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1ab6a25da197f03ebe6d8fa17273126120874386b4ac11c1d687df288542dd"}, + {file = "pandas-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0dbfea0dd3901ad4ce2306575c54348d98499c95be01b8d885a2737fe4d7a98"}, + {file = "pandas-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0489b0e6aa3d907e909aef92975edae89b1ee1654db5eafb9be633b0124abe97"}, + {file = "pandas-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:4cdb0fab0400c2cb46dafcf1a0fe084c8bb2480a1fa8d81e19d15e12e6d4ded2"}, + {file = "pandas-2.1.1.tar.gz", hash = "sha256:fecb198dc389429be557cde50a2d46da8434a17fe37d7d41ff102e3987fd947b"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +aws = ["s3fs (>=2022.05.0)"] +clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] +compression = ["zstandard (>=0.17.0)"] +computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2022.05.0)"] +gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] +hdf5 = ["tables (>=3.7.0)"] +html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] +mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] +spss = ["pyreadstat (>=1.1.5)"] +sql-other = ["SQLAlchemy (>=1.4.36)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.8.0)"] + +[[package]] +name = "paramiko" +version = "3.5.1" +description = "SSH2 protocol library" +optional = false +python-versions = ">=3.6" +groups = ["test"] +files = [ + {file = "paramiko-3.5.1-py3-none-any.whl", hash = "sha256:43b9a0501fc2b5e70680388d9346cf252cfb7d00b0667c39e80eb43a408b8f61"}, + {file = "paramiko-3.5.1.tar.gz", hash = "sha256:b2c665bc45b2b215bd7d7f039901b14b067da00f3a11e6640995fd58f2664822"}, +] + +[package.dependencies] +bcrypt = ">=3.2" +cryptography = ">=3.3" +pynacl = ">=1.5" + +[package.extras] +all = ["gssapi (>=1.4.1) ; platform_system != \"Windows\"", "invoke (>=2.0)", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8) ; platform_system == \"Windows\""] +gssapi = ["gssapi (>=1.4.1) ; platform_system != \"Windows\"", "pyasn1 (>=0.1.7)", "pywin32 (>=2.1.8) ; platform_system == \"Windows\""] +invoke = ["invoke (>=2.0)"] + +[[package]] +name = "parse" +version = "1.20.2" +description = "parse() is the opposite of format()" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "parse-1.20.2-py2.py3-none-any.whl", hash = "sha256:967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558"}, + {file = "parse-1.20.2.tar.gz", hash = "sha256:b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce"}, +] + +[[package]] +name = "parso" +version = "0.8.4" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, +] + +[package.extras] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] + +[[package]] +name = "pathable" +version = "0.4.4" +description = "Object-oriented paths" +optional = false +python-versions = "<4.0.0,>=3.7.0" +groups = ["main"] +files = [ + {file = "pathable-0.4.4-py3-none-any.whl", hash = "sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2"}, + {file = "pathable-0.4.4.tar.gz", hash = "sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2"}, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +groups = ["main"] +markers = "sys_platform != \"win32\"" +files = [ + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pillow" +version = "11.1.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, + {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, + {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, + {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, + {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, + {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, + {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, + {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, + {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, + {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, + {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, + {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, + {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, + {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, + {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, + {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, + {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, + {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, + {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, + {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, + {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, + {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, + {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, + {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, + {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, + {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, + {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, + {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, + {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, + {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, + {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, + {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, + {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, + {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, + {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, + {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, + {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, + {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, + {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] +typing = ["typing-extensions ; python_version < \"3.10\""] +xmp = ["defusedxml"] + +[[package]] +name = "platformdirs" +version = "4.3.7" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev", "test"] +files = [ + {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, + {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] + +[[package]] +name = "playwright" +version = "1.46.0" +description = "A high-level API to automate web browsers" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "playwright-1.46.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:fa60b95c16f6ce954636229a6c9dd885485326bca52d5ba20d02c0bc731a2bbb"}, + {file = "playwright-1.46.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:73dcfc24834f4d004bc862ed0d74b4c1406793a8164734238ad035356fddc8ac"}, + {file = "playwright-1.46.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:f5acfec1dbdc84d02dc696a17a344227e66c91413eab2036428dab405f195b82"}, + {file = "playwright-1.46.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:3b418509f45879f1403d070858657a39bd0b333b23d92c37355682b671726df9"}, + {file = "playwright-1.46.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23580f6a3f99757bb9779d29be37144cb9328cd9bafa178e6db5b3ab4b7faf4c"}, + {file = "playwright-1.46.0-py3-none-win32.whl", hash = "sha256:85f44dd32a23d02850f0ff4dafe51580e5199531fff5121a62489d9838707782"}, + {file = "playwright-1.46.0-py3-none-win_amd64.whl", hash = "sha256:f14a7fd7e24e954eec6ce61d787d499e41937ade811a0818e9a088aabe28ebb6"}, +] + +[package.dependencies] +greenlet = "3.0.3" +pyee = "11.1.0" + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "portalocker" +version = "2.10.1" +description = "Wraps the portalocker recipe for easy usage" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, + {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, +] + +[package.dependencies] +pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} + +[package.extras] +docs = ["sphinx (>=1.7.1)"] +redis = ["redis"] +tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] + +[[package]] +name = "prance" +version = "23.6.21.0" +description = "Resolving Swagger/OpenAPI 2.0 and 3.0.0 Parser" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "prance-23.6.21.0-py3-none-any.whl", hash = "sha256:6a4276fa07ed9f22feda4331097d7503c4adc3097e46ffae97425f2c1026bd9f"}, + {file = "prance-23.6.21.0.tar.gz", hash = "sha256:d8c15f8ac34019751cc4945f866d8d964d7888016d10de3592e339567177cabe"}, +] + +[package.dependencies] +chardet = ">=3.0" +packaging = ">=21.3" +requests = ">=2.25" +"ruamel.yaml" = ">=0.17.10" +six = ">=1.15,<2.0" + +[package.extras] +cli = ["click (>=7.0)"] +dev = ["bumpversion (>=0.6)", "pytest (>=6.1)", "pytest-cov (>=2.11)", "sphinx (>=3.4)", "towncrier (>=19.2)", "tox (>=3.4)"] +flex = ["flex (>=6.13,<7.0)"] +icu = ["PyICU (>=2.4,<3.0)"] +osv = ["openapi-spec-validator (>=0.5.1,<0.6.0)"] +ssv = ["swagger-spec-validator (>=2.4,<3.0)"] + +[[package]] +name = "pre-commit" +version = "3.8.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, + {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "prompt-toolkit" +version = "3.0.50" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.8.0" +groups = ["main"] +files = [ + {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, + {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "propcache" +version = "0.3.1" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136"}, + {file = "propcache-0.3.1-cp310-cp310-win32.whl", hash = "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42"}, + {file = "propcache-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9"}, + {file = "propcache-0.3.1-cp311-cp311-win32.whl", hash = "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005"}, + {file = "propcache-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7"}, + {file = "propcache-0.3.1-cp312-cp312-win32.whl", hash = "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b"}, + {file = "propcache-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef"}, + {file = "propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24"}, + {file = "propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a"}, + {file = "propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d"}, + {file = "propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe"}, + {file = "propcache-0.3.1-cp39-cp39-win32.whl", hash = "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64"}, + {file = "propcache-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566"}, + {file = "propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40"}, + {file = "propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf"}, +] + +[[package]] +name = "proto-plus" +version = "1.26.1" +description = "Beautiful, Pythonic protocol buffers" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "proto_plus-1.26.1-py3-none-any.whl", hash = "sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66"}, + {file = "proto_plus-1.26.1.tar.gz", hash = "sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012"}, +] + +[package.dependencies] +protobuf = ">=3.19.0,<7.0.0" + +[package.extras] +testing = ["google-api-core (>=1.31.5)"] + +[[package]] +name = "protobuf" +version = "4.25.6" +description = "" +optional = false +python-versions = ">=3.8" +groups = ["main", "search-google", "test"] +files = [ + {file = "protobuf-4.25.6-cp310-abi3-win32.whl", hash = "sha256:61df6b5786e2b49fc0055f636c1e8f0aff263808bb724b95b164685ac1bcc13a"}, + {file = "protobuf-4.25.6-cp310-abi3-win_amd64.whl", hash = "sha256:b8f837bfb77513fe0e2f263250f423217a173b6d85135be4d81e96a4653bcd3c"}, + {file = "protobuf-4.25.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:6d4381f2417606d7e01750e2729fe6fbcda3f9883aa0c32b51d23012bded6c91"}, + {file = "protobuf-4.25.6-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:5dd800da412ba7f6f26d2c08868a5023ce624e1fdb28bccca2dc957191e81fb5"}, + {file = "protobuf-4.25.6-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:4434ff8bb5576f9e0c78f47c41cdf3a152c0b44de475784cd3fd170aef16205a"}, + {file = "protobuf-4.25.6-cp38-cp38-win32.whl", hash = "sha256:8bad0f9e8f83c1fbfcc34e573352b17dfce7d0519512df8519994168dc015d7d"}, + {file = "protobuf-4.25.6-cp38-cp38-win_amd64.whl", hash = "sha256:b6905b68cde3b8243a198268bb46fbec42b3455c88b6b02fb2529d2c306d18fc"}, + {file = "protobuf-4.25.6-cp39-cp39-win32.whl", hash = "sha256:3f3b0b39db04b509859361ac9bca65a265fe9342e6b9406eda58029f5b1d10b2"}, + {file = "protobuf-4.25.6-cp39-cp39-win_amd64.whl", hash = "sha256:6ef2045f89d4ad8d95fd43cd84621487832a61d15b49500e4c1350e8a0ef96be"}, + {file = "protobuf-4.25.6-py3-none-any.whl", hash = "sha256:07972021c8e30b870cfc0863409d033af940213e0e7f64e27fe017b929d2c9f7"}, + {file = "protobuf-4.25.6.tar.gz", hash = "sha256:f8cfbae7c5afd0d0eaccbe73267339bff605a2315860bb1ba08eb66670a9a91f"}, +] + +[[package]] +name = "psutil" +version = "7.0.0" +description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7." +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"}, + {file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993"}, + {file = "psutil-7.0.0-cp36-cp36m-win32.whl", hash = "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17"}, + {file = "psutil-7.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e"}, + {file = "psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99"}, + {file = "psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"}, + {file = "psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456"}, +] + +[package.extras] +dev = ["abi3audit", "black (==24.10.0)", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest", "pytest-cov", "pytest-xdist", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] +test = ["pytest", "pytest-xdist", "setuptools"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +groups = ["main"] +markers = "sys_platform != \"win32\"" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + +[[package]] +name = "pyarrow" +version = "19.0.1" +description = "Python library for Apache Arrow" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:fc28912a2dc924dddc2087679cc8b7263accc71b9ff025a1362b004711661a69"}, + {file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fca15aabbe9b8355800d923cc2e82c8ef514af321e18b437c3d782aa884eaeec"}, + {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76aef7f5f7e4a757fddcdcf010a8290958f09e3470ea458c80d26f4316ae89"}, + {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d03c9d6f2a3dffbd62671ca070f13fc527bb1867b4ec2b98c7eeed381d4f389a"}, + {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:65cf9feebab489b19cdfcfe4aa82f62147218558d8d3f0fc1e9dea0ab8e7905a"}, + {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:41f9706fbe505e0abc10e84bf3a906a1338905cbbcf1177b71486b03e6ea6608"}, + {file = "pyarrow-19.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c6cb2335a411b713fdf1e82a752162f72d4a7b5dbc588e32aa18383318b05866"}, + {file = "pyarrow-19.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cc55d71898ea30dc95900297d191377caba257612f384207fe9f8293b5850f90"}, + {file = "pyarrow-19.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:7a544ec12de66769612b2d6988c36adc96fb9767ecc8ee0a4d270b10b1c51e00"}, + {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0148bb4fc158bfbc3d6dfe5001d93ebeed253793fff4435167f6ce1dc4bddeae"}, + {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f24faab6ed18f216a37870d8c5623f9c044566d75ec586ef884e13a02a9d62c5"}, + {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:4982f8e2b7afd6dae8608d70ba5bd91699077323f812a0448d8b7abdff6cb5d3"}, + {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:49a3aecb62c1be1d822f8bf629226d4a96418228a42f5b40835c1f10d42e4db6"}, + {file = "pyarrow-19.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:008a4009efdb4ea3d2e18f05cd31f9d43c388aad29c636112c2966605ba33466"}, + {file = "pyarrow-19.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:80b2ad2b193e7d19e81008a96e313fbd53157945c7be9ac65f44f8937a55427b"}, + {file = "pyarrow-19.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:ee8dec072569f43835932a3b10c55973593abc00936c202707a4ad06af7cb294"}, + {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d5d1ec7ec5324b98887bdc006f4d2ce534e10e60f7ad995e7875ffa0ff9cb14"}, + {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ad4c0eb4e2a9aeb990af6c09e6fa0b195c8c0e7b272ecc8d4d2b6574809d34"}, + {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d383591f3dcbe545f6cc62daaef9c7cdfe0dff0fb9e1c8121101cabe9098cfa6"}, + {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b4c4156a625f1e35d6c0b2132635a237708944eb41df5fbe7d50f20d20c17832"}, + {file = "pyarrow-19.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:5bd1618ae5e5476b7654c7b55a6364ae87686d4724538c24185bbb2952679960"}, + {file = "pyarrow-19.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e45274b20e524ae5c39d7fc1ca2aa923aab494776d2d4b316b49ec7572ca324c"}, + {file = "pyarrow-19.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d9dedeaf19097a143ed6da37f04f4051aba353c95ef507764d344229b2b740ae"}, + {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ebfb5171bb5f4a52319344ebbbecc731af3f021e49318c74f33d520d31ae0c4"}, + {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a21d39fbdb948857f67eacb5bbaaf36802de044ec36fbef7a1c8f0dd3a4ab2"}, + {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:99bc1bec6d234359743b01e70d4310d0ab240c3d6b0da7e2a93663b0158616f6"}, + {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1b93ef2c93e77c442c979b0d596af45e4665d8b96da598db145b0fec014b9136"}, + {file = "pyarrow-19.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9d46e06846a41ba906ab25302cf0fd522f81aa2a85a71021826f34639ad31ef"}, + {file = "pyarrow-19.0.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c0fe3dbbf054a00d1f162fda94ce236a899ca01123a798c561ba307ca38af5f0"}, + {file = "pyarrow-19.0.1-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:96606c3ba57944d128e8a8399da4812f56c7f61de8c647e3470b417f795d0ef9"}, + {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f04d49a6b64cf24719c080b3c2029a3a5b16417fd5fd7c4041f94233af732f3"}, + {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a9137cf7e1640dce4c190551ee69d478f7121b5c6f323553b319cac936395f6"}, + {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:7c1bca1897c28013db5e4c83944a2ab53231f541b9e0c3f4791206d0c0de389a"}, + {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:58d9397b2e273ef76264b45531e9d552d8ec8a6688b7390b5be44c02a37aade8"}, + {file = "pyarrow-19.0.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b9766a47a9cb56fefe95cb27f535038b5a195707a08bf61b180e642324963b46"}, + {file = "pyarrow-19.0.1-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:6c5941c1aac89a6c2f2b16cd64fe76bcdb94b2b1e99ca6459de4e6f07638d755"}, + {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd44d66093a239358d07c42a91eebf5015aa54fccba959db899f932218ac9cc8"}, + {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:335d170e050bcc7da867a1ed8ffb8b44c57aaa6e0843b156a501298657b1e972"}, + {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:1c7556165bd38cf0cd992df2636f8bcdd2d4b26916c6b7e646101aff3c16f76f"}, + {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:699799f9c80bebcf1da0983ba86d7f289c5a2a5c04b945e2f2bcf7e874a91911"}, + {file = "pyarrow-19.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8464c9fbe6d94a7fe1599e7e8965f350fd233532868232ab2596a71586c5a429"}, + {file = "pyarrow-19.0.1.tar.gz", hash = "sha256:3bf266b485df66a400f282ac0b6d1b500b9d2ae73314a153dbe97d6d5cc8a99e"}, +] + +[package.extras] +test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] + +[[package]] +name = "pyasn1" +version = "0.6.1" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = ">=3.8" +groups = ["main", "search-google", "test"] +files = [ + {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, + {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.2" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = ">=3.8" +groups = ["main", "search-google", "test"] +files = [ + {file = "pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a"}, + {file = "pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6"}, +] + +[package.dependencies] +pyasn1 = ">=0.6.1,<0.7.0" + +[[package]] +name = "pybrowsers" +version = "0.7.0" +description = "Python library for detecting and launching browsers" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["test"] +files = [ + {file = "pybrowsers-0.7.0-py3-none-any.whl", hash = "sha256:2d3c29b2633cf65ea60463f0d8df5e01f244c760dc4affb155d0a0c4ddfd0afb"}, + {file = "pybrowsers-0.7.0.tar.gz", hash = "sha256:3b604cba6425fb569289dbebe9630f0e32b08dd06acd7c914f6ed85916d8c3cd"}, +] + +[package.dependencies] +pywin32 = {version = ">=303,<309", markers = "sys_platform == \"win32\""} +pyxdg = {version = ">=0.27,<0.29", markers = "sys_platform == \"linux\""} + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "search-ddg", "selenium", "test"] +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] +markers = {selenium = "implementation_name != \"pypy\" and os_name == \"nt\""} + +[[package]] +name = "pycryptodome" +version = "3.22.0" +description = "Cryptographic library for Python" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "test"] +files = [ + {file = "pycryptodome-3.22.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:96e73527c9185a3d9b4c6d1cfb4494f6ced418573150be170f6580cb975a7f5a"}, + {file = "pycryptodome-3.22.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:9e1bb165ea1dc83a11e5dbbe00ef2c378d148f3a2d3834fb5ba4e0f6fd0afe4b"}, + {file = "pycryptodome-3.22.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:d4d1174677855c266eed5c4b4e25daa4225ad0c9ffe7584bb1816767892545d0"}, + {file = "pycryptodome-3.22.0-cp27-cp27m-win32.whl", hash = "sha256:9dbb749cef71c28271484cbef684f9b5b19962153487735411e1020ca3f59cb1"}, + {file = "pycryptodome-3.22.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f1ae7beb64d4fc4903a6a6cca80f1f448e7a8a95b77d106f8a29f2eb44d17547"}, + {file = "pycryptodome-3.22.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:a26bcfee1293b7257c83b0bd13235a4ee58165352be4f8c45db851ba46996dc6"}, + {file = "pycryptodome-3.22.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:009e1c80eea42401a5bd5983c4bab8d516aef22e014a4705622e24e6d9d703c6"}, + {file = "pycryptodome-3.22.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3b76fa80daeff9519d7e9f6d9e40708f2fce36b9295a847f00624a08293f4f00"}, + {file = "pycryptodome-3.22.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a31fa5914b255ab62aac9265654292ce0404f6b66540a065f538466474baedbc"}, + {file = "pycryptodome-3.22.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0092fd476701eeeb04df5cc509d8b739fa381583cda6a46ff0a60639b7cd70d"}, + {file = "pycryptodome-3.22.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d5b0ddc7cf69231736d778bd3ae2b3efb681ae33b64b0c92fb4626bb48bb89"}, + {file = "pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f6cf6aa36fcf463e622d2165a5ad9963b2762bebae2f632d719dfb8544903cf5"}, + {file = "pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:aec7b40a7ea5af7c40f8837adf20a137d5e11a6eb202cde7e588a48fb2d871a8"}, + {file = "pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d21c1eda2f42211f18a25db4eaf8056c94a8563cd39da3683f89fe0d881fb772"}, + {file = "pycryptodome-3.22.0-cp37-abi3-win32.whl", hash = "sha256:f02baa9f5e35934c6e8dcec91fcde96612bdefef6e442813b8ea34e82c84bbfb"}, + {file = "pycryptodome-3.22.0-cp37-abi3-win_amd64.whl", hash = "sha256:d086aed307e96d40c23c42418cbbca22ecc0ab4a8a0e24f87932eeab26c08627"}, + {file = "pycryptodome-3.22.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:98fd9da809d5675f3a65dcd9ed384b9dc67edab6a4cda150c5870a8122ec961d"}, + {file = "pycryptodome-3.22.0-pp27-pypy_73-win32.whl", hash = "sha256:37ddcd18284e6b36b0a71ea495a4c4dca35bb09ccc9bfd5b91bfaf2321f131c1"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4bdce34af16c1dcc7f8c66185684be15f5818afd2a82b75a4ce6b55f9783e13"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2988ffcd5137dc2d27eb51cd18c0f0f68e5b009d5fec56fbccb638f90934f333"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e653519dedcd1532788547f00eeb6108cc7ce9efdf5cc9996abce0d53f95d5a9"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5810bc7494e4ac12a4afef5a32218129e7d3890ce3f2b5ec520cc69eb1102ad"}, + {file = "pycryptodome-3.22.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7514a1aebee8e85802d154fdb261381f1cb9b7c5a54594545145b8ec3056ae6"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:56c6f9342fcb6c74e205fbd2fee568ec4cdbdaa6165c8fde55dbc4ba5f584464"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87a88dc543b62b5c669895caf6c5a958ac7abc8863919e94b7a6cafd2f64064f"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a683bc9fa585c0dfec7fa4801c96a48d30b30b096e3297f9374f40c2fedafc"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f4f6f47a7f411f2c157e77bbbda289e0c9f9e1e9944caa73c1c2e33f3f92d6e"}, + {file = "pycryptodome-3.22.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6cf9553b29624961cab0785a3177a333e09e37ba62ad22314ebdbb01ca79840"}, + {file = "pycryptodome-3.22.0.tar.gz", hash = "sha256:fd7ab568b3ad7b77c908d7c3f7e167ec5a8f035c64ff74f10d47a4edd043d723"}, +] + +[[package]] +name = "pydantic" +version = "2.9.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, + {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.23.4" +typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and sys_platform == \"win32\""] + +[[package]] +name = "pydantic-core" +version = "2.23.4" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, + {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, + {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, + {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, + {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, + {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, + {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, + {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, + {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, + {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, + {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, + {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, + {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, + {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pydub" +version = "0.25.1" +description = "Manipulate audio with an simple and easy high level interface" +optional = false +python-versions = "*" +groups = ["test"] +files = [ + {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, + {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, +] + +[[package]] +name = "pyee" +version = "11.1.0" +description = "A rough port of Node.js's EventEmitter to Python with a few tricks of its own" +optional = false +python-versions = ">=3.8" +groups = ["main", "pyppeteer"] +files = [ + {file = "pyee-11.1.0-py3-none-any.whl", hash = "sha256:5d346a7d0f861a4b2e6c47960295bd895f816725b27d656181947346be98d7c1"}, + {file = "pyee-11.1.0.tar.gz", hash = "sha256:b53af98f6990c810edd9b56b87791021a8f54fd13db4edd1142438d44ba2263f"}, +] + +[package.dependencies] +typing-extensions = "*" + +[package.extras] +dev = ["black", "build", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio ; python_version >= \"3.4\"", "pytest-trio ; python_version >= \"3.7\"", "sphinx", "toml", "tox", "trio", "trio ; python_version > \"3.6\"", "trio-typing ; python_version > \"3.6\"", "twine", "twisted", "validate-pyproject[all]"] + +[[package]] +name = "pygithub" +version = "2.6.1" +description = "Use the full Github API v3" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "PyGithub-2.6.1-py3-none-any.whl", hash = "sha256:6f2fa6d076ccae475f9fc392cc6cdbd54db985d4f69b8833a28397de75ed6ca3"}, + {file = "pygithub-2.6.1.tar.gz", hash = "sha256:b5c035392991cca63959e9453286b41b54d83bf2de2daa7d7ff7e4312cebf3bf"}, +] + +[package.dependencies] +Deprecated = "*" +pyjwt = {version = ">=2.4.0", extras = ["crypto"]} +pynacl = ">=1.4.0" +requests = ">=2.14.0" +typing-extensions = ">=4.0.0" +urllib3 = ">=1.26.0" + +[[package]] +name = "pygments" +version = "2.19.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pylance" +version = "0.9.0" +description = "python wrapper for Lance columnar format" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pylance-0.9.0-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:601b78c9ad9e9f2c95f135073dce0bcc1d9741810a2cdda1e0899169d85283ed"}, + {file = "pylance-0.9.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c1c369d62c0a26cd13a7439fd8983463832571a053174b75a7c12a56dd062cfe"}, + {file = "pylance-0.9.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8517754d8dda54512d17ab685383055ebadd839a8d9475ddc292c0938072706f"}, + {file = "pylance-0.9.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcdf07807e826b6f5ee8499fc60b1582728bd6ac802ed2a2f2a400d2394f929c"}, + {file = "pylance-0.9.0-cp38-abi3-win_amd64.whl", hash = "sha256:ddf9a8c8ad5c382a37a988037754ee1d7cb5a305eb215a8a328dc07be570e36d"}, +] + +[package.dependencies] +numpy = ">=1.22" +pyarrow = ">=12" + +[package.extras] +benchmarks = ["pytest-benchmark"] +tests = ["duckdb", "ml_dtypes", "pandas (>=1.4,<2.1)", "polars[pandas,pyarrow]", "pytest", "semver", "tensorflow", "tqdm"] +torch = ["torch"] + +[[package]] +name = "pylint" +version = "3.0.3" +description = "python code static checker" +optional = false +python-versions = ">=3.8.0" +groups = ["main", "dev", "test"] +files = [ + {file = "pylint-3.0.3-py3-none-any.whl", hash = "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810"}, + {file = "pylint-3.0.3.tar.gz", hash = "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b"}, +] + +[package.dependencies] +astroid = ">=3.0.1,<=3.1.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pymongo" +version = "4.11.3" +description = "Python driver for MongoDB " +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pymongo-4.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78f19598246dd61ba2a4fc4dddfa6a4f9af704fff7d81cb4fe0d02c7b17b1f68"}, + {file = "pymongo-4.11.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c9cbe81184ec81ad8c76ccedbf5b743639448008d68f51f9a3c8a9abe6d9a46"}, + {file = "pymongo-4.11.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9047ecb3bc47c43ada7d6f98baf8060c637b1e880c803a2bbd1dc63b49d2f92"}, + {file = "pymongo-4.11.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1a16ec731b42f6b2b4f1aa3a94e74ff2722aacf691922a2e8e607b7f6b8d9f1"}, + {file = "pymongo-4.11.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9120e25ac468fda3e3a1749695e0c5e52ff2294334fcc81e70ccb65c897bb58"}, + {file = "pymongo-4.11.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f618bd6ed5c3c08b350b157b1d9066d3d389785b7359d2b7b7d82ca4083595d3"}, + {file = "pymongo-4.11.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:98017f006e047f5ed6c99c2cb1cac71534f0e11862beeff4d0bc9227189bedcd"}, + {file = "pymongo-4.11.3-cp310-cp310-win32.whl", hash = "sha256:84b9300ed411fef776c60feab40f3ee03db5d0ac8921285c6e03a3e27efa2c20"}, + {file = "pymongo-4.11.3-cp310-cp310-win_amd64.whl", hash = "sha256:07231d0bac54e32503507777719dd05ca63bc68896e64ea852edde2f1986b868"}, + {file = "pymongo-4.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31b5ad4ce148b201fa8426d0767517dc68424c3380ef4a981038d4d4350f10ee"}, + {file = "pymongo-4.11.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:505fb3facf54623b45c96e8e6ad6516f58bb8069f9456e1d7c0abdfdb6929c21"}, + {file = "pymongo-4.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3f20467d695f49ce4c2d6cb87de458ebb3d098cbc951834a74f36a2e992a6bb"}, + {file = "pymongo-4.11.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65e8a397b03156880a099d55067daa1580a5333aaf4da3b0313bd7e1731e408f"}, + {file = "pymongo-4.11.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0992917ed259f5ca3506ec8009e7c82d398737a4230a607bf44d102cae31e1d6"}, + {file = "pymongo-4.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f2f0c3ab8284e0e2674367fa47774411212c86482bbbe78e8ae9fb223b8f6ee"}, + {file = "pymongo-4.11.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2240126683f55160f83f587d76955ad1e419a72d5c09539a509bd9d1e20bd53"}, + {file = "pymongo-4.11.3-cp311-cp311-win32.whl", hash = "sha256:be89776c5b8272437a85c904d45e0f1bbc0f21bf11688341938380843dd7fe5f"}, + {file = "pymongo-4.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:c237780760f891cae79abbfc52fda55b584492d5d9452762040aadb2c64ac691"}, + {file = "pymongo-4.11.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5f48b7faf4064e5f484989608a59503b11b7f134ca344635e416b1b12e7dc255"}, + {file = "pymongo-4.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:722f22bf18d208aa752591bde93e018065641711594e7a2fef0432da429264e8"}, + {file = "pymongo-4.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5be1b35c4897626327c4e8bae14655807c2bc710504fa790bc19a72403142264"}, + {file = "pymongo-4.11.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14f9e4d2172545798738d27bc6293b972c4f1f98cce248aa56e1e62c4c258ca7"}, + {file = "pymongo-4.11.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd3f7bafe441135f58d2b91a312714f423e15fed5afe3854880c8c61ad78d3ce"}, + {file = "pymongo-4.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73de1b9f416a2662ba95b4b49edc963d47b93760a7e2b561b932c8099d160151"}, + {file = "pymongo-4.11.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e24268e2d7ae96eab12161985b39e75a75185393134fc671f4bb1a16f50bf6f4"}, + {file = "pymongo-4.11.3-cp312-cp312-win32.whl", hash = "sha256:33a936d3c1828e4f52bed3dad6191a3618cc28ab056e2770390aec88d9e9f9ea"}, + {file = "pymongo-4.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:c4673d8ef0c8ef712491a750adf64f7998202a82abd72be5be749749275b3edb"}, + {file = "pymongo-4.11.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5e53b98c9700bb69f33a322b648d028bfe223ad135fb04ec48c0226998b80d0e"}, + {file = "pymongo-4.11.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8464aff011208cf86eae28f4a3624ebc4a40783634e119b2b35852252b901ef3"}, + {file = "pymongo-4.11.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3742ffc1951bec1450a5a6a02cfd40ddd4b1c9416b36c70ae439a532e8be0e05"}, + {file = "pymongo-4.11.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a29294b508975a5dfd384f4b902cd121dc2b6e5d55ea2be2debffd2a63461cd9"}, + {file = "pymongo-4.11.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:051c741586ab6efafe72e027504ac4e5f01c88eceec579e4e1a438a369a61b0c"}, + {file = "pymongo-4.11.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b05e03a327cdef28ec2bb72c974d412d308f5cf867a472ef17f9ac95d18ec05"}, + {file = "pymongo-4.11.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dafeddf1db51df19effd0828ae75492b15d60c7faec388da08f1fe9593c88e7a"}, + {file = "pymongo-4.11.3-cp313-cp313-win32.whl", hash = "sha256:40c55afb34788ae6a6b8c175421fa46a37cfc45de41fe4669d762c3b1bbda48e"}, + {file = "pymongo-4.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:a5b8b7ba9614a081d1f932724b7a6a20847f6c9629420ae81ce827db3b599af2"}, + {file = "pymongo-4.11.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0f23f849693e829655f667ea18b87bf34e1395237eb45084f3495317d455beb2"}, + {file = "pymongo-4.11.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:62bcfa88deb4a6152a7c93bedd1a808497f6c2881424ca54c3c81964a51c5040"}, + {file = "pymongo-4.11.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2eaa0233858f72074bf0319f5034018092b43f19202bd7ecb822980c35bfd623"}, + {file = "pymongo-4.11.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a434e081017be360595237cd1aeac3d047dd38e8785c549be80748608c1d4ca"}, + {file = "pymongo-4.11.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e8aa65a9e4a989245198c249816d86cb240221861b748db92b8b3a5356bd6f1"}, + {file = "pymongo-4.11.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0a91004029d1fc9e66a800e6da4170afaa9b93bcf41299e4b5951b837b3467a"}, + {file = "pymongo-4.11.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b992904ac78cb712b42c4b7348974ba1739137c1692cdf8bf75c3eeb22881a4"}, + {file = "pymongo-4.11.3-cp313-cp313t-win32.whl", hash = "sha256:45e18bda802d95a2aed88e487f06becc3bd0b22286a25aeca8c46b8c64980dbb"}, + {file = "pymongo-4.11.3-cp313-cp313t-win_amd64.whl", hash = "sha256:07d40b831590bc458b624f421849c2b09ad2b9110b956f658b583fe01fe01c01"}, + {file = "pymongo-4.11.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4a1c241d8424c0e5d66a1710ff2b691f361b5fd354754a086ddea99ee19cc2d3"}, + {file = "pymongo-4.11.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b1aaccbcb4a5aaaa3acaabc59b30edd047c38c6cdfc97eb64e0611b6882a6d6"}, + {file = "pymongo-4.11.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be60f63a310d0d2824e9fb2ef0f821bb45d23e73446af6d50bddda32564f285d"}, + {file = "pymongo-4.11.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1b943d1b13f1232cb92762c82a5154f02b01234db8d632ea9525ab042bd7619"}, + {file = "pymongo-4.11.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afc7d1d2bd1997bb42fdba8a5a104198e4ff7990f096ac90353dcb87c69bb57f"}, + {file = "pymongo-4.11.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:730fe9a6c432669fa69af0905a7a4835e5a3752363b2ae3b34007919003394cd"}, + {file = "pymongo-4.11.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0633536b31980a8af7262edb03a20df88d8aa0ad803e48c49609b6408a33486d"}, + {file = "pymongo-4.11.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e88e99f33a89e8f58f7401201e79e29f98b2da21d4082ba50eeae0828bb35451"}, + {file = "pymongo-4.11.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a30f1b9bf79f53f995198ed42bc9b675fc38e6ec30d8f6f7e53094085b5eb803"}, + {file = "pymongo-4.11.3-cp39-cp39-win32.whl", hash = "sha256:e1872a33f1d4266c14fae1dc4744b955d0ef5d6fad87cc72141d04d8c97245dc"}, + {file = "pymongo-4.11.3-cp39-cp39-win_amd64.whl", hash = "sha256:a19f186455e4b3af1e11ee877346418d18303800ecc688ef732b5725c2795f13"}, + {file = "pymongo-4.11.3.tar.gz", hash = "sha256:b6f24aec7c0cfcf0ea9f89e92b7d40ba18a1e18c134815758f111ecb0122e61c"}, +] + +[package.dependencies] +dnspython = ">=1.16.0,<3.0.0" + +[package.extras] +aws = ["pymongo-auth-aws (>=1.1.0,<2.0.0)"] +docs = ["furo (==2024.8.6)", "readthedocs-sphinx-search (>=0.3,<1.0)", "sphinx (>=5.3,<9)", "sphinx-autobuild (>=2020.9.1)", "sphinx-rtd-theme (>=2,<4)", "sphinxcontrib-shellcheck (>=1,<2)"] +encryption = ["certifi ; os_name == \"nt\" or sys_platform == \"darwin\"", "pymongo-auth-aws (>=1.1.0,<2.0.0)", "pymongocrypt (>=1.12.0,<2.0.0)"] +gssapi = ["pykerberos ; os_name != \"nt\"", "winkerberos (>=0.5.0) ; os_name == \"nt\""] +ocsp = ["certifi ; os_name == \"nt\" or sys_platform == \"darwin\"", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"] +snappy = ["python-snappy"] +test = ["pytest (>=8.2)", "pytest-asyncio (>=0.24.0)"] +zstd = ["zstandard"] + +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +optional = false +python-versions = ">=3.6" +groups = ["main", "test"] +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + +[[package]] +name = "pyparsing" +version = "3.2.3" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.9" +groups = ["main", "search-google", "test"] +files = [ + {file = "pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"}, + {file = "pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyppeteer" +version = "2.0.0" +description = "Headless chrome/chromium automation library (unofficial port of puppeteer)" +optional = false +python-versions = ">=3.8,<4.0" +groups = ["pyppeteer"] +files = [ + {file = "pyppeteer-2.0.0-py3-none-any.whl", hash = "sha256:96f4c574fb36f1d15e02746303ab742b98941f0da58337187e7c1d2ef982adea"}, + {file = "pyppeteer-2.0.0.tar.gz", hash = "sha256:4af63473ff36a746a53347b2336a49efda669bcd781e400bc1799b81838358d9"}, +] + +[package.dependencies] +appdirs = ">=1.4.3,<2.0.0" +certifi = ">=2023" +importlib-metadata = ">=1.4" +pyee = ">=11.0.0,<12.0.0" +tqdm = ">=4.42.1,<5.0.0" +urllib3 = ">=1.25.8,<2.0.0" +websockets = ">=10.0,<11.0" + +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["selenium"] +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + +[[package]] +name = "pytest" +version = "8.3.5" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, + {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.25.3" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["test"] +markers = "python_version == \"3.9\"" +files = [ + {file = "pytest_asyncio-0.25.3-py3-none-any.whl", hash = "sha256:9e89518e0f9bd08928f97a3482fdc4e244df17529460bc038291ccaf8f85c7c3"}, + {file = "pytest_asyncio-0.25.3.tar.gz", hash = "sha256:fc1da2cf9f125ada7e710b4ddad05518d4cee187ae9412e9ac9271003497f07a"}, +] + +[package.dependencies] +pytest = ">=8.2,<9" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + +[[package]] +name = "pytest-asyncio" +version = "0.26.0" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.9" +groups = ["test"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "pytest_asyncio-0.26.0-py3-none-any.whl", hash = "sha256:7b51ed894f4fbea1340262bdae5135797ebbe21d8638978e35d31c6d19f72fb0"}, + {file = "pytest_asyncio-0.26.0.tar.gz", hash = "sha256:c4df2a697648241ff39e7f0e4a73050b03f123f760673956cf0d72a4990e312f"}, +] + +[package.dependencies] +pytest = ">=8.2,<9" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + +[[package]] +name = "pytest-cov" +version = "6.1.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "pytest_cov-6.1.0-py3-none-any.whl", hash = "sha256:cd7e1d54981d5185ef2b8d64b50172ce97e6f357e6df5cb103e828c7f993e201"}, + {file = "pytest_cov-6.1.0.tar.gz", hash = "sha256:ec55e828c66755e5b74a21bd7cc03c303a9f928389c0563e50ba454a6dbe71db"}, +] + +[package.dependencies] +coverage = {version = ">=7.5", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[package]] +name = "pytest-html" +version = "4.1.1" +description = "pytest plugin for generating HTML reports" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest_html-4.1.1-py3-none-any.whl", hash = "sha256:c8152cea03bd4e9bee6d525573b67bbc6622967b72b9628dda0ea3e2a0b5dd71"}, + {file = "pytest_html-4.1.1.tar.gz", hash = "sha256:70a01e8ae5800f4a074b56a4cb1025c8f4f9b038bba5fe31e3c98eb996686f07"}, +] + +[package.dependencies] +jinja2 = ">=3.0.0" +pytest = ">=7.0.0" +pytest-metadata = ">=2.0.0" + +[package.extras] +docs = ["pip-tools (>=6.13.0)"] +test = ["assertpy (>=1.1)", "beautifulsoup4 (>=4.11.1)", "black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "pytest-mock (>=3.7.0)", "pytest-rerunfailures (>=11.1.2)", "pytest-xdist (>=2.4.0)", "selenium (>=4.3.0)", "tox (>=3.24.5)"] + +[[package]] +name = "pytest-metadata" +version = "3.1.1" +description = "pytest plugin for test session metadata" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest_metadata-3.1.1-py3-none-any.whl", hash = "sha256:c8e0844db684ee1c798cfa38908d20d67d0463ecb6137c72e91f418558dd5f4b"}, + {file = "pytest_metadata-3.1.1.tar.gz", hash = "sha256:d2a29b0355fbc03f168aa96d41ff88b1a3b44a3b02acbe491801c98a048017c8"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[package.extras] +test = ["black (>=22.1.0)", "flake8 (>=4.0.1)", "pre-commit (>=2.17.0)", "tox (>=3.24.5)"] + +[[package]] +name = "pytest-mock" +version = "3.14.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, + {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, +] + +[package.dependencies] +pytest = ">=6.2.5" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pytest-timeout" +version = "2.3.1" +description = "pytest plugin to abort hanging tests" +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "pytest-timeout-2.3.1.tar.gz", hash = "sha256:12397729125c6ecbdaca01035b9e5239d4db97352320af155b3f5de1ba5165d9"}, + {file = "pytest_timeout-2.3.1-py3-none-any.whl", hash = "sha256:68188cb703edfc6a18fad98dc25a3c61e9f24d644b0b70f33af545219fc7813e"}, +] + +[package.dependencies] +pytest = ">=7.0.0" + +[[package]] +name = "pytest-xdist" +version = "3.6.1" +description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, + {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, +] + +[package.dependencies] +execnet = ">=2.1" +pytest = ">=7.0.0" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "test"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-docx" +version = "0.8.11" +description = "Create and update Microsoft Word .docx files." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "python-docx-0.8.11.tar.gz", hash = "sha256:1105d233a0956dd8dd1e710d20b159e2d72ac3c301041b95f4d4ceb3e0ebebc4"}, +] + +[package.dependencies] +lxml = ">=2.3.2" + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +groups = ["main", "selenium", "test"] +files = [ + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.20" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.8" +groups = ["test"] +files = [ + {file = "python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"}, + {file = "python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13"}, +] + +[[package]] +name = "pytz" +version = "2025.2" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +groups = ["main", "test"] +files = [ + {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, + {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, +] + +[[package]] +name = "pywin32" +version = "308" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +groups = ["main", "test"] +files = [ + {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, + {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, + {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, + {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, + {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, + {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, + {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, + {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, + {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, + {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, + {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, + {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, + {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, + {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, + {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, + {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, + {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, + {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, +] +markers = {main = "(platform_python_implementation != \"PyPy\" or platform_system == \"Windows\") and (sys_platform == \"win32\" or platform_system == \"Windows\")", test = "sys_platform == \"win32\""} + +[[package]] +name = "pyxdg" +version = "0.28" +description = "PyXDG contains implementations of freedesktop.org standards in python." +optional = false +python-versions = "*" +groups = ["test"] +markers = "sys_platform == \"linux\"" +files = [ + {file = "pyxdg-0.28-py2.py3-none-any.whl", hash = "sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab"}, + {file = "pyxdg-0.28.tar.gz", hash = "sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +groups = ["main", "dev", "test"] +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "pyzmq" +version = "26.3.0" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pyzmq-26.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1586944f4736515af5c6d3a5b150c7e8ca2a2d6e46b23057320584d6f2438f4a"}, + {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa7efc695d1fc9f72d91bf9b6c6fe2d7e1b4193836ec530a98faf7d7a7577a58"}, + {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd84441e4021cec6e4dd040550386cd9c9ea1d9418ea1a8002dbb7b576026b2b"}, + {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9176856f36c34a8aa5c0b35ddf52a5d5cd8abeece57c2cd904cfddae3fd9acd3"}, + {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:49334faa749d55b77f084389a80654bf2e68ab5191c0235066f0140c1b670d64"}, + {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fd30fc80fe96efb06bea21667c5793bbd65c0dc793187feb39b8f96990680b00"}, + {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b2eddfbbfb473a62c3a251bb737a6d58d91907f6e1d95791431ebe556f47d916"}, + {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:70b3acb9ad729a53d4e751dace35404a024f188aad406013454216aba5485b4e"}, + {file = "pyzmq-26.3.0-cp310-cp310-win32.whl", hash = "sha256:c1bd75d692cd7c6d862a98013bfdf06702783b75cffbf5dae06d718fecefe8f2"}, + {file = "pyzmq-26.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:d7165bcda0dbf203e5ad04d79955d223d84b2263df4db92f525ba370b03a12ab"}, + {file = "pyzmq-26.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:e34a63f71d2ecffb3c643909ad2d488251afeb5ef3635602b3448e609611a7ed"}, + {file = "pyzmq-26.3.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:2833602d9d42c94b9d0d2a44d2b382d3d3a4485be018ba19dddc401a464c617a"}, + {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8270d104ec7caa0bdac246d31d48d94472033ceab5ba142881704350b28159c"}, + {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c208a977843d18d3bd185f323e4eaa912eb4869cb230947dc6edd8a27a4e558a"}, + {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eddc2be28a379c218e0d92e4a432805dcb0ca5870156a90b54c03cd9799f9f8a"}, + {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c0b519fa2159c42272f8a244354a0e110d65175647e5185b04008ec00df9f079"}, + {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1595533de3a80bf8363372c20bafa963ec4bf9f2b8f539b1d9a5017f430b84c9"}, + {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bbef99eb8d18ba9a40f00e8836b8040cdcf0f2fa649684cf7a66339599919d21"}, + {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:979486d444ca3c469cd1c7f6a619ce48ff08b3b595d451937db543754bfacb65"}, + {file = "pyzmq-26.3.0-cp311-cp311-win32.whl", hash = "sha256:4b127cfe10b4c56e4285b69fd4b38ea1d368099ea4273d8fb349163fce3cd598"}, + {file = "pyzmq-26.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:cf736cc1298ef15280d9fcf7a25c09b05af016656856dc6fe5626fd8912658dd"}, + {file = "pyzmq-26.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:2dc46ec09f5d36f606ac8393303149e69d17121beee13c8dac25e2a2078e31c4"}, + {file = "pyzmq-26.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:c80653332c6136da7f4d4e143975e74ac0fa14f851f716d90583bc19e8945cea"}, + {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e317ee1d4528a03506cb1c282cd9db73660a35b3564096de37de7350e7d87a7"}, + {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:943a22ebb3daacb45f76a9bcca9a7b74e7d94608c0c0505da30af900b998ca8d"}, + {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc9e71490d989144981ea21ef4fdfaa7b6aa84aff9632d91c736441ce2f6b00"}, + {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e281a8071a06888575a4eb523c4deeefdcd2f5fe4a2d47e02ac8bf3a5b49f695"}, + {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be77efd735bb1064605be8dec6e721141c1421ef0b115ef54e493a64e50e9a52"}, + {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a4ac2ffa34f1212dd586af90f4ba894e424f0cabb3a49cdcff944925640f6ac"}, + {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ba698c7c252af83b6bba9775035263f0df5f807f0404019916d4b71af8161f66"}, + {file = "pyzmq-26.3.0-cp312-cp312-win32.whl", hash = "sha256:214038aaa88e801e54c2ef0cfdb2e6df27eb05f67b477380a452b595c5ecfa37"}, + {file = "pyzmq-26.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:bad7fe0372e505442482ca3ccbc0d6f38dae81b1650f57a0aa6bbee18e7df495"}, + {file = "pyzmq-26.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:b7b578d604e79e99aa39495becea013fd043fa9f36e4b490efa951f3d847a24d"}, + {file = "pyzmq-26.3.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:fa85953df84beb7b8b73cb3ec3f5d92b62687a09a8e71525c6734e020edf56fd"}, + {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:209d09f0ab6ddbcebe64630d1e6ca940687e736f443c265ae15bc4bfad833597"}, + {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d35cc1086f1d4f907df85c6cceb2245cb39a04f69c3f375993363216134d76d4"}, + {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b380e9087078ba91e45fb18cdd0c25275ffaa045cf63c947be0ddae6186bc9d9"}, + {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6d64e74143587efe7c9522bb74d1448128fdf9897cc9b6d8b9927490922fd558"}, + {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:efba4f53ac7752eea6d8ca38a4ddac579e6e742fba78d1e99c12c95cd2acfc64"}, + {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9b0137a1c40da3b7989839f9b78a44de642cdd1ce20dcef341de174c8d04aa53"}, + {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a995404bd3982c089e57b428c74edd5bfc3b0616b3dbcd6a8e270f1ee2110f36"}, + {file = "pyzmq-26.3.0-cp313-cp313-win32.whl", hash = "sha256:240b1634b9e530ef6a277d95cbca1a6922f44dfddc5f0a3cd6c722a8de867f14"}, + {file = "pyzmq-26.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:fe67291775ea4c2883764ba467eb389c29c308c56b86c1e19e49c9e1ed0cbeca"}, + {file = "pyzmq-26.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:73ca9ae9a9011b714cf7650450cd9c8b61a135180b708904f1f0a05004543dce"}, + {file = "pyzmq-26.3.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:fea7efbd7e49af9d7e5ed6c506dfc7de3d1a628790bd3a35fd0e3c904dc7d464"}, + {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4430c7cba23bb0e2ee203eee7851c1654167d956fc6d4b3a87909ccaf3c5825"}, + {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:016d89bee8c7d566fad75516b4e53ec7c81018c062d4c51cd061badf9539be52"}, + {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04bfe59852d76d56736bfd10ac1d49d421ab8ed11030b4a0332900691507f557"}, + {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1fe05bd0d633a0f672bb28cb8b4743358d196792e1caf04973b7898a0d70b046"}, + {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:2aa1a9f236d5b835fb8642f27de95f9edcfd276c4bc1b6ffc84f27c6fb2e2981"}, + {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:21399b31753bf321043ea60c360ed5052cc7be20739785b1dff1820f819e35b3"}, + {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d015efcd96aca8882057e7e6f06224f79eecd22cad193d3e6a0a91ec67590d1f"}, + {file = "pyzmq-26.3.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:18183cc3851b995fdc7e5f03d03b8a4e1b12b0f79dff1ec1da75069af6357a05"}, + {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da87e977f92d930a3683e10ba2b38bcc59adfc25896827e0b9d78b208b7757a6"}, + {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf6db401f4957afbf372a4730c6d5b2a234393af723983cbf4bcd13d54c71e1a"}, + {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03caa2ffd64252122139d50ec92987f89616b9b92c9ba72920b40e92709d5e26"}, + {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fbf206e5329e20937fa19bd41cf3af06d5967f8f7e86b59d783b26b40ced755c"}, + {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6fb539a6382a048308b409d8c66d79bf636eda1b24f70c78f2a1fd16e92b037b"}, + {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7897b8c8bbbb2bd8cad887bffcb07aede71ef1e45383bd4d6ac049bf0af312a4"}, + {file = "pyzmq-26.3.0-cp38-cp38-win32.whl", hash = "sha256:91dead2daca698ae52ce70ee2adbb94ddd9b5f96877565fd40aa4efd18ecc6a3"}, + {file = "pyzmq-26.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:8c088e009a6d6b9f563336adb906e3a8d3fd64db129acc8d8fd0e9fe22b2dac8"}, + {file = "pyzmq-26.3.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2eaed0d911fb3280981d5495978152fab6afd9fe217fd16f411523665089cef1"}, + {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7998b60ef1c105846fb3bfca494769fde3bba6160902e7cd27a8df8257890ee9"}, + {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:96c0006a8d1d00e46cb44c8e8d7316d4a232f3d8f2ed43179d4578dbcb0829b6"}, + {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e17cc198dc50a25a0f245e6b1e56f692df2acec3ccae82d1f60c34bfb72bbec"}, + {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:92a30840f4f2a31f7049d0a7de5fc69dd03b19bd5d8e7fed8d0bde49ce49b589"}, + {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f52eba83272a26b444f4b8fc79f2e2c83f91d706d693836c9f7ccb16e6713c31"}, + {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:952085a09ff32115794629ba47f8940896d7842afdef1283332109d38222479d"}, + {file = "pyzmq-26.3.0-cp39-cp39-win32.whl", hash = "sha256:0240289e33e3fbae44a5db73e54e955399179332a6b1d47c764a4983ec1524c3"}, + {file = "pyzmq-26.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b2db7c82f08b8ce44c0b9d1153ce63907491972a7581e8b6adea71817f119df8"}, + {file = "pyzmq-26.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:2d3459b6311463c96abcb97808ee0a1abb0d932833edb6aa81c30d622fd4a12d"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad03f4252d9041b0635c37528dfa3f44b39f46024ae28c8567f7423676ee409b"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f3dfb68cf7bf4cfdf34283a75848e077c5defa4907506327282afe92780084d"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:356ec0e39c5a9cda872b65aca1fd8a5d296ffdadf8e2442b70ff32e73ef597b1"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:749d671b0eec8e738bbf0b361168369d8c682b94fcd458c20741dc4d69ef5278"}, + {file = "pyzmq-26.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f950f17ae608e0786298340163cac25a4c5543ef25362dd5ddb6dcb10b547be9"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4fc9903a73c25be9d5fe45c87faababcf3879445efa16140146b08fccfac017"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c15b69af22030960ac63567e98ad8221cddf5d720d9cf03d85021dfd452324ef"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2cf9ab0dff4dbaa2e893eb608373c97eb908e53b7d9793ad00ccbd082c0ee12f"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ec332675f6a138db57aad93ae6387953763f85419bdbd18e914cb279ee1c451"}, + {file = "pyzmq-26.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:eb96568a22fe070590942cd4780950e2172e00fb033a8b76e47692583b1bd97c"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:009a38241c76184cb004c869e82a99f0aee32eda412c1eb44df5820324a01d25"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c22a12713707467abedc6d75529dd365180c4c2a1511268972c6e1d472bd63e"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1614fcd116275d24f2346ffca4047a741c546ad9d561cbf7813f11226ca4ed2c"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e2cafe7e9c7fed690e8ecf65af119f9c482923b5075a78f6f7629c63e1b4b1d"}, + {file = "pyzmq-26.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:14e0b81753424bd374075df6cc30b87f2c99e5f022501d97eff66544ca578941"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:21c6ddb98557a77cfe3366af0c5600fb222a1b2de5f90d9cd052b324e0c295e8"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fc81d5d60c9d40e692de14b8d884d43cf67562402b931681f0ccb3ce6b19875"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52b064fafef772d0f5dbf52d4c39f092be7bc62d9a602fe6e82082e001326de3"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b72206eb041f780451c61e1e89dbc3705f3d66aaaa14ee320d4f55864b13358a"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ab78dc21c7b1e13053086bcf0b4246440b43b5409904b73bfd1156654ece8a1"}, + {file = "pyzmq-26.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0b42403ad7d1194dca9574cd3c56691c345f4601fa2d0a33434f35142baec7ac"}, + {file = "pyzmq-26.3.0.tar.gz", hash = "sha256:f1cd68b8236faab78138a8fc703f7ca0ad431b17a3fcac696358600d4e6243b3"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "qdrant-client" +version = "1.7.0" +description = "Client library for the Qdrant vector search engine" +optional = false +python-versions = ">=3.8,<3.13" +groups = ["main"] +files = [ + {file = "qdrant_client-1.7.0-py3-none-any.whl", hash = "sha256:ab5779cf3f008da2a801c943413423f1ff434128dfaeda031f037453e1fa8306"}, + {file = "qdrant_client-1.7.0.tar.gz", hash = "sha256:bbe0656020c2f11061d7836b87e99ba6b50a028f5318459cc1fddf4ef73d9a8b"}, +] + +[package.dependencies] +grpcio = ">=1.41.0" +grpcio-tools = ">=1.41.0" +httpx = {version = ">=0.14.0", extras = ["http2"]} +numpy = {version = ">=1.21", markers = "python_version >= \"3.8\" and python_version < \"3.12\""} +portalocker = ">=2.7.0,<3.0.0" +pydantic = ">=1.10.8" +urllib3 = ">=1.26.14,<2.0.0" + +[package.extras] +fastembed = ["fastembed (==0.1.1) ; python_version < \"3.12\""] + +[[package]] +name = "qianfan" +version = "0.4.12.3" +description = "文心千帆大模型平台 Python SDK" +optional = false +python-versions = "<4,>=3.7" +groups = ["main"] +files = [ + {file = "qianfan-0.4.12.3-py3-none-any.whl", hash = "sha256:728234bbab405b26fbbf1c684a35cab9857c855c96e94843f6aff8f6685eab9d"}, + {file = "qianfan-0.4.12.3.tar.gz", hash = "sha256:1c27dd9a6ff68f69e71a34b350a27624b47bd35d9eac9e0b6e23a4f51c02ef4b"}, +] + +[package.dependencies] +aiohttp = ">=3.7.0" +aiolimiter = ">=1.1.0" +bce-python-sdk = ">=0.8.79" +cachetools = ">=5.0.0" +diskcache = ">=5.6.3" +multiprocess = ">=0.70.12" +prompt-toolkit = ">=3.0.38" +pydantic = ">=1.0" +python-dotenv = {version = ">=1.0", markers = "python_version >= \"3.8\""} +pyyaml = ">=6.0.1,<7.0.0" +requests = ">=2.24" +rich = ">=13.0.0" +tenacity = ">=8.2.3,<9.0.0" +typer = ">=0.9.0" +typing-extensions = {version = ">=4.0.0", markers = "python_full_version <= \"3.10.0\""} + +[package.extras] +all = ["emoji (>=2.2.0)", "fastapi (>=0.85.0)", "filelock (>=3.7.0)", "ijson (>=3.0)", "langchain (>=0.1.10) ; python_full_version >= \"3.8.1\"", "langchain-community (>=0.2.0) ; python_full_version >= \"3.8.1\"", "locust (>=2.9.0)", "ltp (>=4.2.0)", "numpy (<1.22.0) ; python_version == \"3.7\"", "numpy (>=1.22.0) ; python_version >= \"3.8\"", "pyarrow (<=12.0.1) ; python_version == \"3.7\"", "pyarrow (>=14.0.1) ; python_version >= \"3.8\"", "python-dateutil (>=2.8.2,<3.0.0)", "sentencepiece (>=0.1.98)", "tabulate (>=0.9.0)", "torch (<=1.13.1) ; python_version < \"3.8\"", "torch (>=1.4.0) ; python_version >= \"3.8\"", "uvicorn (>=0.15.0)"] +dataset-base = ["filelock (>=3.7.0)", "ijson (>=3.0)", "locust (>=2.9.0)", "numpy (<1.22.0) ; python_version == \"3.7\"", "numpy (>=1.22.0) ; python_version >= \"3.8\"", "pyarrow (<=12.0.1) ; python_version == \"3.7\"", "pyarrow (>=14.0.1) ; python_version >= \"3.8\"", "python-dateutil (>=2.8.2,<3.0.0)", "tabulate (>=0.9.0)"] +langchain = ["langchain (>=0.1.10) ; python_full_version >= \"3.8.1\"", "langchain-community (>=0.2.0) ; python_full_version >= \"3.8.1\""] +local-data-clean = ["emoji (>=2.2.0)", "filelock (>=3.7.0)", "ijson (>=3.0)", "locust (>=2.9.0)", "ltp (>=4.2.0)", "numpy (<1.22.0) ; python_version == \"3.7\"", "numpy (>=1.22.0) ; python_version >= \"3.8\"", "pyarrow (<=12.0.1) ; python_version == \"3.7\"", "pyarrow (>=14.0.1) ; python_version >= \"3.8\"", "python-dateutil (>=2.8.2,<3.0.0)", "sentencepiece (>=0.1.98)", "tabulate (>=0.9.0)", "torch (<=1.13.1) ; python_version < \"3.8\"", "torch (>=1.4.0) ; python_version >= \"3.8\""] +openai = ["fastapi (>=0.85.0)", "uvicorn (>=0.15.0)"] + +[[package]] +name = "rank-bm25" +version = "0.2.2" +description = "Various BM25 algorithms for document ranking" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "rank_bm25-0.2.2-py3-none-any.whl", hash = "sha256:7bd4a95571adadfc271746fa146a4bcfd89c0cf731e49c3d1ad863290adbe8ae"}, + {file = "rank_bm25-0.2.2.tar.gz", hash = "sha256:096ccef76f8188563419aaf384a02f0ea459503fdf77901378d4fd9d87e5e51d"}, +] + +[package.dependencies] +numpy = "*" + +[package.extras] +dev = ["pytest"] + +[[package]] +name = "ratelimiter" +version = "1.2.0.post0" +description = "Simple python rate limiting object" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "ratelimiter-1.2.0.post0-py3-none-any.whl", hash = "sha256:a52be07bc0bb0b3674b4b304550f10c769bbb00fead3072e035904474259809f"}, + {file = "ratelimiter-1.2.0.post0.tar.gz", hash = "sha256:5c395dcabdbbde2e5178ef3f89b568a3066454a6ddc223b76473dac22f89b4f7"}, +] + +[package.extras] +test = ["pytest (>=3.0)", "pytest-asyncio ; python_version >= \"3.5\""] + +[[package]] +name = "redis" +version = "5.2.1" +description = "Python client for Redis database and key-value store" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "redis-5.2.1-py3-none-any.whl", hash = "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"}, + {file = "redis-5.2.1.tar.gz", hash = "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f"}, +] + +[package.dependencies] +async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} + +[package.extras] +hiredis = ["hiredis (>=3.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"] + +[[package]] +name = "referencing" +version = "0.30.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "regex" +version = "2023.12.25" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, + {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, + {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, + {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, + {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, + {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, + {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, + {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, + {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, + {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, + {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, + {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, + {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, + {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, + {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +groups = ["main", "search-google", "selenium", "test"] +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "retry" +version = "0.9.2" +description = "Easy to use retry decorator." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "retry-0.9.2-py2.py3-none-any.whl", hash = "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606"}, + {file = "retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4"}, +] + +[package.dependencies] +decorator = ">=3.4.2" +py = ">=1.4.26,<2.0.0" + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rich" +version = "13.6.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +groups = ["main"] +files = [ + {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, + {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rpds-py" +version = "0.24.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "rpds_py-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724"}, + {file = "rpds_py-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0"}, + {file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f"}, + {file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f"}, + {file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875"}, + {file = "rpds_py-0.24.0-cp310-cp310-win32.whl", hash = "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07"}, + {file = "rpds_py-0.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052"}, + {file = "rpds_py-0.24.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef"}, + {file = "rpds_py-0.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc"}, + {file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c"}, + {file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c"}, + {file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718"}, + {file = "rpds_py-0.24.0-cp311-cp311-win32.whl", hash = "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a"}, + {file = "rpds_py-0.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6"}, + {file = "rpds_py-0.24.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205"}, + {file = "rpds_py-0.24.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9"}, + {file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7"}, + {file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91"}, + {file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56"}, + {file = "rpds_py-0.24.0-cp312-cp312-win32.whl", hash = "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30"}, + {file = "rpds_py-0.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034"}, + {file = "rpds_py-0.24.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c"}, + {file = "rpds_py-0.24.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7"}, + {file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad"}, + {file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120"}, + {file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9"}, + {file = "rpds_py-0.24.0-cp313-cp313-win32.whl", hash = "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143"}, + {file = "rpds_py-0.24.0-cp313-cp313-win_amd64.whl", hash = "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a"}, + {file = "rpds_py-0.24.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114"}, + {file = "rpds_py-0.24.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7"}, + {file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d"}, + {file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797"}, + {file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c"}, + {file = "rpds_py-0.24.0-cp313-cp313t-win32.whl", hash = "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba"}, + {file = "rpds_py-0.24.0-cp313-cp313t-win_amd64.whl", hash = "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350"}, + {file = "rpds_py-0.24.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a36b452abbf29f68527cf52e181fced56685731c86b52e852053e38d8b60bc8d"}, + {file = "rpds_py-0.24.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b3b397eefecec8e8e39fa65c630ef70a24b09141a6f9fc17b3c3a50bed6b50e"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdabcd3beb2a6dca7027007473d8ef1c3b053347c76f685f5f060a00327b8b65"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5db385bacd0c43f24be92b60c857cf760b7f10d8234f4bd4be67b5b20a7c0b6b"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8097b3422d020ff1c44effc40ae58e67d93e60d540a65649d2cdaf9466030791"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493fe54318bed7d124ce272fc36adbf59d46729659b2c792e87c3b95649cdee9"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8aa362811ccdc1f8dadcc916c6d47e554169ab79559319ae9fae7d7752d0d60c"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d8f9a6e7fd5434817526815f09ea27f2746c4a51ee11bb3439065f5fc754db58"}, + {file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8205ee14463248d3349131bb8099efe15cd3ce83b8ef3ace63c7e976998e7124"}, + {file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:921ae54f9ecba3b6325df425cf72c074cd469dea843fb5743a26ca7fb2ccb149"}, + {file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32bab0a56eac685828e00cc2f5d1200c548f8bc11f2e44abf311d6b548ce2e45"}, + {file = "rpds_py-0.24.0-cp39-cp39-win32.whl", hash = "sha256:f5c0ed12926dec1dfe7d645333ea59cf93f4d07750986a586f511c0bc61fe103"}, + {file = "rpds_py-0.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:afc6e35f344490faa8276b5f2f7cbf71f88bc2cda4328e00553bd451728c571f"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e0f3ef95795efcd3b2ec3fe0a5bcfb5dadf5e3996ea2117427e524d4fbf309c6"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2c13777ecdbbba2077670285dd1fe50828c8742f6a4119dbef6f83ea13ad10fb"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79e8d804c2ccd618417e96720ad5cd076a86fa3f8cb310ea386a3e6229bae7d1"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd822f019ccccd75c832deb7aa040bb02d70a92eb15a2f16c7987b7ad4ee8d83"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0047638c3aa0dbcd0ab99ed1e549bbf0e142c9ecc173b6492868432d8989a046"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5b66d1b201cc71bc3081bc2f1fc36b0c1f268b773e03bbc39066651b9e18391"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbcbb6db5582ea33ce46a5d20a5793134b5365110d84df4e30b9d37c6fd40ad3"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63981feca3f110ed132fd217bf7768ee8ed738a55549883628ee3da75bb9cb78"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3a55fc10fdcbf1a4bd3c018eea422c52cf08700cf99c28b5cb10fe97ab77a0d3"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:c30ff468163a48535ee7e9bf21bd14c7a81147c0e58a36c1078289a8ca7af0bd"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:369d9c6d4c714e36d4a03957b4783217a3ccd1e222cdd67d464a3a479fc17796"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:24795c099453e3721fda5d8ddd45f5dfcc8e5a547ce7b8e9da06fecc3832e26f"}, + {file = "rpds_py-0.24.0.tar.gz", hash = "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e"}, +] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +groups = ["main", "search-google", "test"] +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "ruamel-yaml" +version = "0.18.10" +description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "ruamel.yaml-0.18.10-py3-none-any.whl", hash = "sha256:30f22513ab2301b3d2b577adc121c6471f28734d3d9728581245f1e76468b4f1"}, + {file = "ruamel.yaml-0.18.10.tar.gz", hash = "sha256:20c86ab29ac2153f80a428e1254a8adf686d3383df04490514ca3b79a362db58"}, +] + +[package.dependencies] +"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} + +[package.extras] +docs = ["mercurial (>5.7)", "ryd"] +jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.12" +description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "platform_python_implementation == \"CPython\"" +files = [ + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5415dded15c3822597455bc02bcd66e81ef8b7a48cb71a33628fc9fdde39df"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f66efbc1caa63c088dead1c4170d148eabc9b80d95fb75b6c92ac0aad2437d76"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22353049ba4181685023b25b5b51a574bce33e7f51c759371a7422dcae5402a6"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:932205970b9f9991b34f55136be327501903f7c66830e9760a8ffb15b07f05cd"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a52d48f4e7bf9005e8f0a89209bf9a73f7190ddf0489eee5eb51377385f59f2a"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win32.whl", hash = "sha256:3eac5a91891ceb88138c113f9db04f3cebdae277f5d44eaa3651a4f573e6a5da"}, + {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-win_amd64.whl", hash = "sha256:ab007f2f5a87bd08ab1499bdf96f3d5c6ad4dcfa364884cb4549aa0154b13a28"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:4a6679521a58256a90b0d89e03992c15144c5f3858f40d7c18886023d7943db6"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d84318609196d6bd6da0edfa25cedfbabd8dbde5140a0a23af29ad4b8f91fb1e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb43a269eb827806502c7c8efb7ae7e9e9d0573257a46e8e952f4d4caba4f31e"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:811ea1594b8a0fb466172c384267a4e5e367298af6b228931f273b111f17ef52"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf12567a7b565cbf65d438dec6cfbe2917d3c1bdddfce84a9930b7d35ea59642"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7dd5adc8b930b12c8fc5b99e2d535a09889941aa0d0bd06f4749e9a9397c71d2"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1492a6051dab8d912fc2adeef0e8c72216b24d57bd896ea607cb90bb0c4981d3"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win32.whl", hash = "sha256:bd0a08f0bab19093c54e18a14a10b4322e1eacc5217056f3c063bd2f59853ce4"}, + {file = "ruamel.yaml.clib-0.2.12-cp311-cp311-win_amd64.whl", hash = "sha256:a274fb2cb086c7a3dea4322ec27f4cb5cc4b6298adb583ab0e211a4682f241eb"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:20b0f8dc160ba83b6dcc0e256846e1a02d044e13f7ea74a3d1d56ede4e48c632"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:943f32bc9dedb3abff9879edc134901df92cfce2c3d5c9348f172f62eb2d771d"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c3829bb364fdb8e0332c9931ecf57d9be3519241323c5274bd82f709cebc0c"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:749c16fcc4a2b09f28843cda5a193e0283e47454b63ec4b81eaa2242f50e4ccd"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bf165fef1f223beae7333275156ab2022cffe255dcc51c27f066b4370da81e31"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:32621c177bbf782ca5a18ba4d7af0f1082a3f6e517ac2a18b3974d4edf349680"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b82a7c94a498853aa0b272fd5bc67f29008da798d4f93a2f9f289feb8426a58d"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win32.whl", hash = "sha256:e8c4ebfcfd57177b572e2040777b8abc537cdef58a2120e830124946aa9b42c5"}, + {file = "ruamel.yaml.clib-0.2.12-cp312-cp312-win_amd64.whl", hash = "sha256:0467c5965282c62203273b838ae77c0d29d7638c8a4e3a1c8bdd3602c10904e4"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4c8c5d82f50bb53986a5e02d1b3092b03622c02c2eb78e29bec33fd9593bae1a"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:e7e3736715fbf53e9be2a79eb4db68e4ed857017344d697e8b9749444ae57475"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b7e75b4965e1d4690e93021adfcecccbca7d61c7bddd8e22406ef2ff20d74ef"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96777d473c05ee3e5e3c3e999f5d23c6f4ec5b0c38c098b3a5229085f74236c6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:3bc2a80e6420ca8b7d3590791e2dfc709c88ab9152c00eeb511c9875ce5778bf"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e188d2699864c11c36cdfdada94d781fd5d6b0071cd9c427bceb08ad3d7c70e1"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4f6f3eac23941b32afccc23081e1f50612bdbe4e982012ef4f5797986828cd01"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win32.whl", hash = "sha256:6442cb36270b3afb1b4951f060eccca1ce49f3d087ca1ca4563a6eb479cb3de6"}, + {file = "ruamel.yaml.clib-0.2.12-cp313-cp313-win_amd64.whl", hash = "sha256:e5b8daf27af0b90da7bb903a876477a9e6d7270be6146906b276605997c7e9a3"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:fc4b630cd3fa2cf7fce38afa91d7cfe844a9f75d7f0f36393fa98815e911d987"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bc5f1e1c28e966d61d2519f2a3d451ba989f9ea0f2307de7bc45baa526de9e45"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a0e060aace4c24dcaf71023bbd7d42674e3b230f7e7b97317baf1e953e5b519"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2f1c3765db32be59d18ab3953f43ab62a761327aafc1594a2a1fbe038b8b8a7"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d85252669dc32f98ebcd5d36768f5d4faeaeaa2d655ac0473be490ecdae3c285"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e143ada795c341b56de9418c58d028989093ee611aa27ffb9b7f609c00d813ed"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2c59aa6170b990d8d2719323e628aaf36f3bfbc1c26279c0eeeb24d05d2d11c7"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win32.whl", hash = "sha256:beffaed67936fbbeffd10966a4eb53c402fafd3d6833770516bf7314bc6ffa12"}, + {file = "ruamel.yaml.clib-0.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:040ae85536960525ea62868b642bdb0c2cc6021c9f9d507810c0c604e66f5a7b"}, + {file = "ruamel.yaml.clib-0.2.12.tar.gz", hash = "sha256:6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f"}, +] + +[[package]] +name = "s3transfer" +version = "0.10.4" +description = "An Amazon S3 Transfer Manager" +optional = false +python-versions = ">=3.8" +groups = ["main", "test"] +files = [ + {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, + {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, +] + +[package.dependencies] +botocore = ">=1.33.2,<2.0a.0" + +[package.extras] +crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] + +[[package]] +name = "scikit-learn" +version = "1.3.2" +description = "A set of python modules for machine learning and data mining" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"}, + {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"}, + {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"}, + {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"}, + {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"}, + {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"}, +] + +[package.dependencies] +joblib = ">=1.1.1" +numpy = ">=1.17.3,<2.0" +scipy = ">=1.5.0" +threadpoolctl = ">=2.0.0" + +[package.extras] +benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] +tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"] + +[[package]] +name = "scipy" +version = "1.13.1" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version == \"3.9\"" +files = [ + {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, + {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, + {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, + {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, + {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, + {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, + {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, + {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, + {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, + {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<2.3" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "scipy" +version = "1.15.2" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "scipy-1.15.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a2ec871edaa863e8213ea5df811cd600734f6400b4af272e1c011e69401218e9"}, + {file = "scipy-1.15.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:6f223753c6ea76983af380787611ae1291e3ceb23917393079dcc746ba60cfb5"}, + {file = "scipy-1.15.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ecf797d2d798cf7c838c6d98321061eb3e72a74710e6c40540f0e8087e3b499e"}, + {file = "scipy-1.15.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:9b18aa747da280664642997e65aab1dd19d0c3d17068a04b3fe34e2559196cb9"}, + {file = "scipy-1.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87994da02e73549dfecaed9e09a4f9d58a045a053865679aeb8d6d43747d4df3"}, + {file = "scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69ea6e56d00977f355c0f84eba69877b6df084516c602d93a33812aa04d90a3d"}, + {file = "scipy-1.15.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:888307125ea0c4466287191e5606a2c910963405ce9671448ff9c81c53f85f58"}, + {file = "scipy-1.15.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9412f5e408b397ff5641080ed1e798623dbe1ec0d78e72c9eca8992976fa65aa"}, + {file = "scipy-1.15.2-cp310-cp310-win_amd64.whl", hash = "sha256:b5e025e903b4f166ea03b109bb241355b9c42c279ea694d8864d033727205e65"}, + {file = "scipy-1.15.2-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:92233b2df6938147be6fa8824b8136f29a18f016ecde986666be5f4d686a91a4"}, + {file = "scipy-1.15.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:62ca1ff3eb513e09ed17a5736929429189adf16d2d740f44e53270cc800ecff1"}, + {file = "scipy-1.15.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4c6676490ad76d1c2894d77f976144b41bd1a4052107902238047fb6a473e971"}, + {file = "scipy-1.15.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a8bf5cb4a25046ac61d38f8d3c3426ec11ebc350246a4642f2f315fe95bda655"}, + {file = "scipy-1.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a8e34cf4c188b6dd004654f88586d78f95639e48a25dfae9c5e34a6dc34547e"}, + {file = "scipy-1.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28a0d2c2075946346e4408b211240764759e0fabaeb08d871639b5f3b1aca8a0"}, + {file = "scipy-1.15.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:42dabaaa798e987c425ed76062794e93a243be8f0f20fff6e7a89f4d61cb3d40"}, + {file = "scipy-1.15.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f5e296ec63c5da6ba6fa0343ea73fd51b8b3e1a300b0a8cae3ed4b1122c7462"}, + {file = "scipy-1.15.2-cp311-cp311-win_amd64.whl", hash = "sha256:597a0c7008b21c035831c39927406c6181bcf8f60a73f36219b69d010aa04737"}, + {file = "scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd"}, + {file = "scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301"}, + {file = "scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93"}, + {file = "scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20"}, + {file = "scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e"}, + {file = "scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8"}, + {file = "scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11"}, + {file = "scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53"}, + {file = "scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded"}, + {file = "scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf"}, + {file = "scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37"}, + {file = "scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d"}, + {file = "scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb"}, + {file = "scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27"}, + {file = "scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0"}, + {file = "scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32"}, + {file = "scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d"}, + {file = "scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f"}, + {file = "scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9"}, + {file = "scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f"}, + {file = "scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6"}, + {file = "scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af"}, + {file = "scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274"}, + {file = "scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776"}, + {file = "scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828"}, + {file = "scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28"}, + {file = "scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db"}, + {file = "scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec"}, +] + +[package.dependencies] +numpy = ">=1.23.5,<2.5" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + +[[package]] +name = "selenium" +version = "4.30.0" +description = "Official Python bindings for Selenium WebDriver" +optional = false +python-versions = ">=3.9" +groups = ["selenium"] +files = [ + {file = "selenium-4.30.0-py3-none-any.whl", hash = "sha256:90bcd3be86a1762100a093b33e5e4530b328226da94208caadb15ce13243dffd"}, + {file = "selenium-4.30.0.tar.gz", hash = "sha256:16ab890fc7cb21a01e1b1e9a0fbaa9445fe30837eabc66e90b3bacf12138126a"}, +] + +[package.dependencies] +certifi = ">=2021.10.8" +trio = ">=0.17,<1.0" +trio-websocket = ">=0.9,<1.0" +typing_extensions = ">=4.9,<5.0" +urllib3 = {version = ">=1.26,<3", extras = ["socks"]} +websocket-client = ">=1.8,<2.0" + +[[package]] +name = "semantic-kernel" +version = "0.4.3.dev0" +description = "Semantic Kernel Python SDK" +optional = false +python-versions = ">=3.8,<4.0" +groups = ["main"] +files = [ + {file = "semantic_kernel-0.4.3.dev0-py3-none-any.whl", hash = "sha256:4ba4c79cf82197a26d91e4f96904be7318dd70dc16a9e6d5d03773c6a7a04d05"}, + {file = "semantic_kernel-0.4.3.dev0.tar.gz", hash = "sha256:c667e1e49f9f26ebf3aebe3be6820627db64b4e3827212fe7666430ea66a6dd7"}, +] + +[package.dependencies] +aiofiles = ">=23.1.0,<24.0.0" +aiohttp = ">=3.8,<4.0" +motor = ">=3.3.1,<4.0.0" +numpy = ">=1.24.2,<2.0.0" +openai = ">=1.0" +openapi_core = ">=0.18.0,<0.19.0" +prance = ">=23.6.21.0,<24.0.0.0" +pydantic = ">2" +python-dotenv = "1.0.0" +regex = ">=2023.6.3,<2024.0.0" + +[[package]] +name = "semver" +version = "3.0.4" +description = "Python helper for Semantic Versioning (https://semver.org)" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "semver-3.0.4-py3-none-any.whl", hash = "sha256:9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746"}, + {file = "semver-3.0.4.tar.gz", hash = "sha256:afc7d8c584a5ed0a11033af086e8af226a9c0b206f313e0301f8dd7b6b589602"}, +] + +[[package]] +name = "setuptools" +version = "65.6.3" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54"}, + {file = "setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov ; platform_python_implementation != \"PyPy\"", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "test"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "smmap" +version = "5.0.2" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"}, + {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +groups = ["main", "selenium", "test"] +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "socksio" +version = "1.0.0" +description = "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5." +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "socksio-1.0.0-py3-none-any.whl", hash = "sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3"}, + {file = "socksio-1.0.0.tar.gz", hash = "sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac"}, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +groups = ["selenium"] +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + +[[package]] +name = "soupsieve" +version = "2.6" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +groups = ["main", "selenium"] +files = [ + {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, + {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, +] + +[[package]] +name = "spark-ai-python" +version = "0.3.31" +description = "a sdk for iflytek's spark LLM." +optional = false +python-versions = "<3.13,>=3.8.1" +groups = ["main"] +files = [ + {file = "spark_ai_python-0.3.31-py3-none-any.whl", hash = "sha256:8062bc95db6b54cd2cf5e922de4ca2e750427841bc9abdbac43472fb0b00a04e"}, + {file = "spark_ai_python-0.3.31.tar.gz", hash = "sha256:3eaa73489ea13157b534d65e01ac30705e95ed868ca1836f5d937d3124dc16b3"}, +] + +[package.dependencies] +aiohttp = ">3.3" +httpx = "*" +jsonpatch = "*" +nest-asyncio = ">=1.6.0,<2.0.0" +packaging = "*" +pydantic = "*" +python-dotenv = "*" +pyyaml = "*" +requests = "*" +tenacity = "*" +websocket-client = ">=1.7.0,<2.0.0" +websockets = "*" + +[package.extras] +autogen = ["pyautogen (>=0.2.20)"] +llama-index = ["llama-index-core (>=0.10.24.post1,<0.11.0)"] +proxy = ["fastapi[all] (>=0.110.0,<0.111.0)", "uvicorn (>=0.26.0)"] + +[[package]] +name = "sqlparse" +version = "0.5.3" +description = "A non-validating SQL parser." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "sqlparse-0.5.3-py3-none-any.whl", hash = "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca"}, + {file = "sqlparse-0.5.3.tar.gz", hash = "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272"}, +] + +[package.extras] +dev = ["build", "hatch"] +doc = ["sphinx"] + +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + +[[package]] +name = "starlette" +version = "0.46.1" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "starlette-0.46.1-py3-none-any.whl", hash = "sha256:77c74ed9d2720138b25875133f3a2dae6d854af2ec37dceb56aef370c1d8a227"}, + {file = "starlette-0.46.1.tar.gz", hash = "sha256:3c88d58ee4bd1bb807c0d1acb381838afc7752f9ddaec81bbe4383611d833230"}, +] + +[package.dependencies] +anyio = ">=3.6.2,<5" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] + +[[package]] +name = "ta" +version = "0.10.2" +description = "Technical Analysis Library in Python" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "ta-0.10.2.tar.gz", hash = "sha256:e8d193dadd44d88e3c4118dc5224e2fcdc0235caba3efa758aa7a875ffba2faa"}, +] + +[package.dependencies] +numpy = "*" +pandas = "*" + +[[package]] +name = "tenacity" +version = "8.2.3" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, + {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, +] + +[package.extras] +doc = ["reno", "sphinx", "tornado (>=4.5)"] + +[[package]] +name = "termcolor" +version = "3.0.1" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "termcolor-3.0.1-py3-none-any.whl", hash = "sha256:da1ed4ec8a5dc5b2e17476d859febdb3cccb612be1c36e64511a6f2485c10c69"}, + {file = "termcolor-3.0.1.tar.gz", hash = "sha256:a6abd5c6e1284cea2934443ba806e70e5ec8fd2449021be55c280f8a3731b611"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "threadpoolctl" +version = "3.6.0" +description = "threadpoolctl" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"}, + {file = "threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e"}, +] + +[[package]] +name = "tiktoken" +version = "0.7.0" +description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "tiktoken-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485f3cc6aba7c6b6ce388ba634fbba656d9ee27f766216f45146beb4ac18b25f"}, + {file = "tiktoken-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e54be9a2cd2f6d6ffa3517b064983fb695c9a9d8aa7d574d1ef3c3f931a99225"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79383a6e2c654c6040e5f8506f3750db9ddd71b550c724e673203b4f6b4b4590"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4511c52caacf3c4981d1ae2df85908bd31853f33d30b345c8b6830763f769c"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13c94efacdd3de9aff824a788353aa5749c0faee1fbe3816df365ea450b82311"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8e58c7eb29d2ab35a7a8929cbeea60216a4ccdf42efa8974d8e176d50c9a3df5"}, + {file = "tiktoken-0.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:21a20c3bd1dd3e55b91c1331bf25f4af522c525e771691adbc9a69336fa7f702"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10c7674f81e6e350fcbed7c09a65bca9356eaab27fb2dac65a1e440f2bcfe30f"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:084cec29713bc9d4189a937f8a35dbdfa785bd1235a34c1124fe2323821ee93f"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811229fde1652fedcca7c6dfe76724d0908775b353556d8a71ed74d866f73f7b"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b6e7dc2e7ad1b3757e8a24597415bafcfb454cebf9a33a01f2e6ba2e663992"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1063c5748be36344c7e18c7913c53e2cca116764c2080177e57d62c7ad4576d1"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20295d21419bfcca092644f7e2f2138ff947a6eb8cfc732c09cc7d76988d4a89"}, + {file = "tiktoken-0.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:959d993749b083acc57a317cbc643fb85c014d055b2119b739487288f4e5d1cb"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:71c55d066388c55a9c00f61d2c456a6086673ab7dec22dd739c23f77195b1908"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09ed925bccaa8043e34c519fbb2f99110bd07c6fd67714793c21ac298e449410"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03c6c40ff1db0f48a7b4d2dafeae73a5607aacb472fa11f125e7baf9dce73704"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20b5c6af30e621b4aca094ee61777a44118f52d886dbe4f02b70dfe05c15350"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d427614c3e074004efa2f2411e16c826f9df427d3c70a54725cae860f09e4bf4"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c46d7af7b8c6987fac9b9f61041b452afe92eb087d29c9ce54951280f899a97"}, + {file = "tiktoken-0.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bc603c30b9e371e7c4c7935aba02af5994a909fc3c0fe66e7004070858d3f8f"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2398fecd38c921bcd68418675a6d155fad5f5e14c2e92fcf5fe566fa5485a858"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f5f6afb52fb8a7ea1c811e435e4188f2bef81b5e0f7a8635cc79b0eef0193d6"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:861f9ee616766d736be4147abac500732b505bf7013cfaf019b85892637f235e"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54031f95c6939f6b78122c0aa03a93273a96365103793a22e1793ee86da31685"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fffdcb319b614cf14f04d02a52e26b1d1ae14a570f90e9b55461a72672f7b13d"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c72baaeaefa03ff9ba9688624143c858d1f6b755bb85d456d59e529e17234769"}, + {file = "tiktoken-0.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:131b8aeb043a8f112aad9f46011dced25d62629091e51d9dc1adbf4a1cc6aa98"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cabc6dc77460df44ec5b879e68692c63551ae4fae7460dd4ff17181df75f1db7"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8d57f29171255f74c0aeacd0651e29aa47dff6f070cb9f35ebc14c82278f3b25"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ee92776fdbb3efa02a83f968c19d4997a55c8e9ce7be821ceee04a1d1ee149c"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e215292e99cb41fbc96988ef62ea63bb0ce1e15f2c147a61acc319f8b4cbe5bf"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a81bac94769cab437dd3ab0b8a4bc4e0f9cf6835bcaa88de71f39af1791727a"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d6d73ea93e91d5ca771256dfc9d1d29f5a554b83821a1dc0891987636e0ae226"}, + {file = "tiktoken-0.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:2bcb28ddf79ffa424f171dfeef9a4daff61a94c631ca6813f43967cb263b83b9"}, + {file = "tiktoken-0.7.0.tar.gz", hash = "sha256:1077266e949c24e0291f6c350433c6f0971365ece2b173a23bc3b9f9defef6b6"}, +] + +[package.dependencies] +regex = ">=2022.1.18" +requests = ">=2.26.0" + +[package.extras] +blobfile = ["blobfile (>=2)"] + +[[package]] +name = "tomli" +version = "2.2.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev", "test"] +markers = "python_version < \"3.11\"" +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] + +[[package]] +name = "tomlkit" +version = "0.13.2" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev", "test"] +files = [ + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, +] + +[[package]] +name = "tornado" +version = "6.4.2" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c"}, + {file = "tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482"}, + {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"}, + {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, +] + +[[package]] +name = "tqdm" +version = "4.66.2" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +groups = ["main", "pyppeteer"] +files = [ + {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, + {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "traitlets" +version = "5.14.3" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "tree-sitter" +version = "0.23.2" +description = "Python bindings to the Tree-sitter parsing library" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "tree-sitter-0.23.2.tar.gz", hash = "sha256:66bae8dd47f1fed7bdef816115146d3a41c39b5c482d7bad36d9ba1def088450"}, + {file = "tree_sitter-0.23.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3a937f5d8727bc1c74c4bf2a9d1c25ace049e8628273016ad0d45914ae904e10"}, + {file = "tree_sitter-0.23.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2c7eae7fe2af215645a38660d2d57d257a4c461fe3ec827cca99a79478284e80"}, + {file = "tree_sitter-0.23.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a71d607595270b6870eaf778a1032d146b2aa79bfcfa60f57a82a7b7584a4c7"}, + {file = "tree_sitter-0.23.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fe9b9ea7a0aa23b52fd97354da95d1b2580065bc12a4ac868f9164a127211d6"}, + {file = "tree_sitter-0.23.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d74d00a8021719eae14d10d1b1e28649e15d8b958c01c2b2c3dad7a2ebc4dbae"}, + {file = "tree_sitter-0.23.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6de18d8d8a7f67ab71f472d1fcb01cc506e080cbb5e13d52929e4b6fdce6bbee"}, + {file = "tree_sitter-0.23.2-cp310-cp310-win_amd64.whl", hash = "sha256:12b60dca70d2282af942b650a6d781be487485454668c7c956338a367b98cdee"}, + {file = "tree_sitter-0.23.2-cp310-cp310-win_arm64.whl", hash = "sha256:3346a4dd0447a42aabb863443b0fd8c92b909baf40ed2344fae4b94b625d5955"}, + {file = "tree_sitter-0.23.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91fda41d4f8824335cc43c64e2c37d8089c8c563bd3900a512d2852d075af719"}, + {file = "tree_sitter-0.23.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:92b2b489d5ce54b41f94c6f23fbaf592bd6e84dc2877048fd1cb060480fa53f7"}, + {file = "tree_sitter-0.23.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64859bd4aa1567d0d6016a811b2b49c59d4a4427d096e3d8c84b2521455f62b7"}, + {file = "tree_sitter-0.23.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:614590611636044e071d3a0b748046d52676dbda3bc9fa431216231e11dd98f7"}, + {file = "tree_sitter-0.23.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08466953c78ae57be61057188fb88c89791b0a562856010228e0ccf60e2ac453"}, + {file = "tree_sitter-0.23.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8a33f03a562de91f7fd05eefcedd8994a06cd44c62f7aabace811ad82bc11cbd"}, + {file = "tree_sitter-0.23.2-cp311-cp311-win_amd64.whl", hash = "sha256:03b70296b569ef64f7b92b42ca5da9bf86d81bee2afd480bea35092687f51dae"}, + {file = "tree_sitter-0.23.2-cp311-cp311-win_arm64.whl", hash = "sha256:7cb4bb953ea7c0b50eeafc4454783e030357179d2a93c3dd5ebed2da5588ddd0"}, + {file = "tree_sitter-0.23.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a014498b6a9e6003fae8c6eb72f5927d62da9dcb72b28b3ce8cd15c6ff6a6572"}, + {file = "tree_sitter-0.23.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:04f8699b131d4bcbe3805c37e4ef3d159ee9a82a0e700587625623999ba0ea53"}, + {file = "tree_sitter-0.23.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4471577df285059c71686ecb208bc50fb472099b38dcc8e849b0e86652891e87"}, + {file = "tree_sitter-0.23.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f342c925290dd4e20ecd5787ef7ae8749981597ab364783a1eb73173efe65226"}, + {file = "tree_sitter-0.23.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a4e9e53d07dd076bede72e4f7d3a0173d7b9ad6576572dd86da008a740a9bb22"}, + {file = "tree_sitter-0.23.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8caebe65bc358759dac2500d8f8feed3aed939c4ade9a684a1783fe07bc7d5db"}, + {file = "tree_sitter-0.23.2-cp312-cp312-win_amd64.whl", hash = "sha256:fc5a72eb50d43485000dbbb309acb350467b7467e66dc747c6bb82ce63041582"}, + {file = "tree_sitter-0.23.2-cp312-cp312-win_arm64.whl", hash = "sha256:a0320eb6c7993359c5f7b371d22719ccd273f440d41cf1bd65dac5e9587f2046"}, + {file = "tree_sitter-0.23.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:eff630dddee7ba05accb439b17e559e15ce13f057297007c246237ceb6306332"}, + {file = "tree_sitter-0.23.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4780ba8f3894f2dea869fad2995c2aceab3fd5ab9e6a27c45475d2acd7f7e84e"}, + {file = "tree_sitter-0.23.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b609460b8e3e256361fb12e94fae5b728cb835b16f0f9d590b5aadbf9d109b"}, + {file = "tree_sitter-0.23.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d070d8eaeaeb36cf535f55e5578fddbfc3bf53c1980f58bf1a99d57466b3b5"}, + {file = "tree_sitter-0.23.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:878580b2ad5054c410ba3418edca4d34c81cc26706114d8f5b5541688bc2d785"}, + {file = "tree_sitter-0.23.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:29224bdc2a3b9af535b7725e249d3ee291b2e90708e82832e73acc175e40dc48"}, + {file = "tree_sitter-0.23.2-cp313-cp313-win_amd64.whl", hash = "sha256:c58d89348162fbc3aea1fe6511a66ee189fc0e4e4bbe937026f29e4ecef17763"}, + {file = "tree_sitter-0.23.2-cp313-cp313-win_arm64.whl", hash = "sha256:0ff2037be5edab7801de3f6a721b9cf010853f612e2008ee454e0e0badb225a6"}, + {file = "tree_sitter-0.23.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a5db8e585205faef8bf219da77d8993e2ef04d08eda2e3c8ad7e4df8297ee344"}, + {file = "tree_sitter-0.23.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9dbd110a30cf28be5da734ae4cd0e9031768228dbf6a79f2973962aa51de4ec7"}, + {file = "tree_sitter-0.23.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569514b9a996a0fd458b3a891c46ca125298be0c03cf82f2b6f0c13d5d8f25dc"}, + {file = "tree_sitter-0.23.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a357ed98a74e47787b812df99a74a2c35c0fe11e55c2095cc01d1cad144ef552"}, + {file = "tree_sitter-0.23.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c2dfb8e8f760f4cc67888d03ef9e2dbd3353245f67f5efba375c2a14d944ac0e"}, + {file = "tree_sitter-0.23.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3ead958df87a21d706903987e665e9e0e5df7b2c5021ff69ea349826840adc6a"}, + {file = "tree_sitter-0.23.2-cp39-cp39-win_amd64.whl", hash = "sha256:611cae16be332213c0e6ece72c0bfca202e30ff320a8b309b1526c6cb79ee4ba"}, + {file = "tree_sitter-0.23.2-cp39-cp39-win_arm64.whl", hash = "sha256:b848e0fdd522fbb8888cdb4f4d93f8fad97ae10d70c122fb922e51363c7febcd"}, +] + +[package.extras] +docs = ["sphinx (>=7.3,<8.0)", "sphinx-book-theme"] +tests = ["tree-sitter-html (>=0.23.0)", "tree-sitter-javascript (>=0.23.0)", "tree-sitter-json (>=0.23.0)", "tree-sitter-python (>=0.23.0)", "tree-sitter-rust (>=0.23.0)"] + +[[package]] +name = "tree-sitter-languages" +version = "1.10.2" +description = "Binary Python wheels for all tree sitter languages." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "tree_sitter_languages-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5580348f0b20233b1d5431fa178ccd3d07423ca4a3275df02a44608fd72344b9"}, + {file = "tree_sitter_languages-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:103c7466644486b1e9e03850df46fc6aa12f13ca636c74f173270276220ac80b"}, + {file = "tree_sitter_languages-1.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d13db84511c6f1a7dc40383b66deafa74dabd8b877e3d65ab253f3719eccafd6"}, + {file = "tree_sitter_languages-1.10.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57adfa32be7e465b54aa72f915f6c78a2b66b227df4f656b5d4fbd1ca7a92b3f"}, + {file = "tree_sitter_languages-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c6385e033e460ceb8f33f3f940335f422ef2b763700a04f0089391a68b56153"}, + {file = "tree_sitter_languages-1.10.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dfa3f38cc5381c5aba01dd7494f59b8a9050e82ff6e06e1233e3a0cbae297e3c"}, + {file = "tree_sitter_languages-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9f195155acf47f8bc5de7cee46ecd07b2f5697f007ba89435b51ef4c0b953ea5"}, + {file = "tree_sitter_languages-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2de330e2ac6d7426ca025a3ec0f10d5640c3682c1d0c7702e812dcfb44b58120"}, + {file = "tree_sitter_languages-1.10.2-cp310-cp310-win32.whl", hash = "sha256:c9731cf745f135d9770eeba9bb4e2ff4dabc107b5ae9b8211e919f6b9100ea6d"}, + {file = "tree_sitter_languages-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:6dd75851c41d0c3c4987a9b7692d90fa8848706c23115669d8224ffd6571e357"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7eb7d7542b2091c875fe52719209631fca36f8c10fa66970d2c576ae6a1b8289"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6b41bcb00974b1c8a1800c7f1bb476a1d15a0463e760ee24872f2d53b08ee424"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f370cd7845c6c81df05680d5bd96db8a99d32b56f4728c5d05978911130a853"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1dc195c88ef4c72607e112a809a69190e096a2e5ebc6201548b3e05fdd169ad"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ae34ac314a7170be24998a0f994c1ac80761d8d4bd126af27ee53a023d3b849"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:01b5742d5f5bd675489486b582bd482215880b26dde042c067f8265a6e925d9c"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ab1cbc46244d34fd16f21edaa20231b2a57f09f092a06ee3d469f3117e6eb954"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0b1149e7467a4e92b8a70e6005fe762f880f493cf811fc003554b29f04f5e7c8"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-win32.whl", hash = "sha256:049276343962f4696390ee555acc2c1a65873270c66a6cbe5cb0bca83bcdf3c6"}, + {file = "tree_sitter_languages-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:7f3fdd468a577f04db3b63454d939e26e360229b53c80361920aa1ebf2cd7491"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c0f4c8b2734c45859edc7fcaaeaab97a074114111b5ba51ab4ec7ed52104763c"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:eecd3c1244ac3425b7a82ba9125b4ddb45d953bbe61de114c0334fd89b7fe782"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15db3c8510bc39a80147ee7421bf4782c15c09581c1dc2237ea89cefbd95b846"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92c6487a6feea683154d3e06e6db68c30e0ae749a7ce4ce90b9e4e46b78c85c7"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2f1cd1d1bdd65332f9c2b67d49dcf148cf1ded752851d159ac3e5ee4f4d260"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:976c8039165b8e12f17a01ddee9f4e23ec6e352b165ad29b44d2bf04e2fbe77e"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:dafbbdf16bf668a580902e1620f4baa1913e79438abcce721a50647564c687b9"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1aeabd3d60d6d276b73cd8f3739d595b1299d123cc079a317f1a5b3c5461e2ca"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-win32.whl", hash = "sha256:fab8ee641914098e8933b87ea3d657bea4dd00723c1ee7038b847b12eeeef4f5"}, + {file = "tree_sitter_languages-1.10.2-cp312-cp312-win_amd64.whl", hash = "sha256:5e606430d736367e5787fa5a7a0c5a1ec9b85eded0b3596bbc0d83532a40810b"}, + {file = "tree_sitter_languages-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:838d5b48a7ed7a17658721952c77fda4570d2a069f933502653b17e15a9c39c9"}, + {file = "tree_sitter_languages-1.10.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b3c71b1d278c2889e018ee77b8ee05c384e2e3334dec798f8b611c4ab2d1e"}, + {file = "tree_sitter_languages-1.10.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faa00abcb2c819027df58472da055d22fa7dfcb77c77413d8500c32ebe24d38b"}, + {file = "tree_sitter_languages-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e102fbbf02322d9201a86a814e79a9734ac80679fdb9682144479044f401a73"}, + {file = "tree_sitter_languages-1.10.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8f0b87cf1a7b03174ba18dfd81582be82bfed26803aebfe222bd20e444aba003"}, + {file = "tree_sitter_languages-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c0f1b9af9cb67f0b942b020da9fdd000aad5e92f2383ae0ba7a330b318d31912"}, + {file = "tree_sitter_languages-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5a4076c921f7a4d31e643843de7dfe040b65b63a238a5aa8d31d93aabe6572aa"}, + {file = "tree_sitter_languages-1.10.2-cp37-cp37m-win32.whl", hash = "sha256:fa6391a3a5d83d32db80815161237b67d70576f090ce5f38339206e917a6f8bd"}, + {file = "tree_sitter_languages-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:55649d3f254585a064121513627cf9788c1cfdadbc5f097f33d5ba750685a4c0"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6f85d1edaa2d22d80d4ea5b6d12b95cf3644017b6c227d0d42854439e02e8893"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d78feed4a764ef3141cb54bf00fe94d514d8b6e26e09423e23b4c616fcb7938c"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da1aca27531f9dd5308637d76643372856f0f65d0d28677d1bcf4211e8ed1ad0"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1031ea440dafb72237437d754eff8940153a3b051e3d18932ac25e75ce060a15"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99d3249beaef2c9fe558ecc9a97853c260433a849dcc68266d9770d196c2e102"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:59a4450f262a55148fb7e68681522f0c2a2f6b7d89666312a2b32708d8f416e1"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ce74eab0e430370d5e15a96b6c6205f93405c177a8b2e71e1526643b2fb9bab1"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9b4dd2b6b3d24c85dffe33d6c343448869eaf4f41c19ddba662eb5d65d8808f4"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-win32.whl", hash = "sha256:92d734fb968fe3927a7596d9f0459f81a8fa7b07e16569476b28e27d0d753348"}, + {file = "tree_sitter_languages-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:46a13f7d38f2eeb75f7cf127d1201346093748c270d686131f0cbc50e42870a1"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f8c6a936ae99fdd8857e91f86c11c2f5e507ff30631d141d98132bb7ab2c8638"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c283a61423f49cdfa7b5a5dfbb39221e3bd126fca33479cd80749d4d7a6b7349"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e60be6bdcff923386a54a5edcb6ff33fc38ab0118636a762024fa2bc98de55"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c00069f9575bd831eabcce2cdfab158dde1ed151e7e5614c2d985ff7d78a7de1"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:475ff53203d8a43ccb19bb322fa2fb200d764001cc037793f1fadd714bb343da"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26fe7c9c412e4141dea87ea4b3592fd12e385465b5bdab106b0d5125754d4f60"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8fed27319957458340f24fe14daad467cd45021da034eef583519f83113a8c5e"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3657a491a7f96cc75a3568ddd062d25f3be82b6a942c68801a7b226ff7130181"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-win32.whl", hash = "sha256:33f7d584d01a7a3c893072f34cfc64ec031f3cfe57eebc32da2f8ac046e101a7"}, + {file = "tree_sitter_languages-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:1b944af3ee729fa70fc8ae82224a9ff597cdb63addea084e0ea2fa2b0ec39bb7"}, +] + +[package.dependencies] +tree-sitter = "*" + +[[package]] +name = "tree-sitter-python" +version = "0.23.6" +description = "Python grammar for tree-sitter" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "tree_sitter_python-0.23.6-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:28fbec8f74eeb2b30292d97715e60fac9ccf8a8091ce19b9d93e9b580ed280fb"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:680b710051b144fedf61c95197db0094f2245e82551bf7f0c501356333571f7a"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a9dcef55507b6567207e8ee0a6b053d0688019b47ff7f26edc1764b7f4dc0a4"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29dacdc0cd2f64e55e61d96c6906533ebb2791972bec988450c46cce60092f5d"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7e048733c36f564b379831689006801feb267d8194f9e793fbb395ef1723335d"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-win_amd64.whl", hash = "sha256:a24027248399fb41594b696f929f9956828ae7cc85596d9f775e6c239cd0c2be"}, + {file = "tree_sitter_python-0.23.6-cp39-abi3-win_arm64.whl", hash = "sha256:71334371bd73d5fe080aed39fbff49ed8efb9506edebe16795b0c7567ed6a272"}, + {file = "tree_sitter_python-0.23.6.tar.gz", hash = "sha256:354bfa0a2f9217431764a631516f85173e9711af2c13dbd796a8815acfe505d9"}, +] + +[package.extras] +core = ["tree-sitter (>=0.22,<1.0)"] + +[[package]] +name = "trio" +version = "0.29.0" +description = "A friendly Python library for async concurrency and I/O" +optional = false +python-versions = ">=3.9" +groups = ["selenium"] +files = [ + {file = "trio-0.29.0-py3-none-any.whl", hash = "sha256:d8c463f1a9cc776ff63e331aba44c125f423a5a13c684307e828d930e625ba66"}, + {file = "trio-0.29.0.tar.gz", hash = "sha256:ea0d3967159fc130acb6939a0be0e558e364fee26b5deeecc893a6b08c361bdf"}, +] + +[package.dependencies] +attrs = ">=23.2.0" +cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""} +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +idna = "*" +outcome = "*" +sniffio = ">=1.3.0" +sortedcontainers = "*" + +[[package]] +name = "trio-websocket" +version = "0.12.2" +description = "WebSocket library for Trio" +optional = false +python-versions = ">=3.8" +groups = ["selenium"] +files = [ + {file = "trio_websocket-0.12.2-py3-none-any.whl", hash = "sha256:df605665f1db533f4a386c94525870851096a223adcb97f72a07e8b4beba45b6"}, + {file = "trio_websocket-0.12.2.tar.gz", hash = "sha256:22c72c436f3d1e264d0910a3951934798dcc5b00ae56fc4ee079d46c7cf20fae"}, +] + +[package.dependencies] +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +outcome = ">=1.2.0" +trio = ">=0.11" +wsproto = ">=0.14" + +[[package]] +name = "typer" +version = "0.9.0" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "typer-0.9.0-py3-none-any.whl", hash = "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee"}, + {file = "typer-0.9.0.tar.gz", hash = "sha256:50922fd79aea2f4751a8e0408ff10d2662bd0c8bbfa84755a699f3bada2978b2"}, +] + +[package.dependencies] +click = ">=7.1.1,<9.0.0" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] +dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] +doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] +test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] + +[[package]] +name = "typing-extensions" +version = "4.11.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev", "pyppeteer", "search-ddg", "selenium", "test"] +files = [ + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, +] +markers = {dev = "python_version < \"3.11\""} + +[[package]] +name = "typing-inspect" +version = "0.8.0" +description = "Runtime inspection utilities for typing module." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "typing_inspect-0.8.0-py3-none-any.whl", hash = "sha256:5fbf9c1e65d4fa01e701fe12a5bca6c6e08a4ffd5bc60bfac028253a447c5188"}, + {file = "typing_inspect-0.8.0.tar.gz", hash = "sha256:8b1ff0c400943b6145df8119c41c244ca8207f1f10c9c057aeed1560e4806e3d"}, +] + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "tzdata" +version = "2025.2" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +groups = ["main", "test"] +files = [ + {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, + {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, +] + +[[package]] +name = "uc-micro-py" +version = "1.0.3" +description = "Micro subset of unicode data files for linkify-it-py projects." +optional = false +python-versions = ">=3.7" +groups = ["test"] +files = [ + {file = "uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a"}, + {file = "uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5"}, +] + +[package.extras] +test = ["coverage", "pytest", "pytest-cov"] + +[[package]] +name = "unidiff" +version = "0.7.5" +description = "Unified diff parsing/metadata extraction library." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "unidiff-0.7.5-py2.py3-none-any.whl", hash = "sha256:c93bf2265cc1ba2a520e415ab05da587370bc2a3ae9e0414329f54f0c2fc09e8"}, + {file = "unidiff-0.7.5.tar.gz", hash = "sha256:2e5f0162052248946b9f0970a40e9e124236bf86c82b70821143a6fc1dea2574"}, +] + +[[package]] +name = "uritemplate" +version = "4.1.1" +description = "Implementation of RFC 6570 URI Templates" +optional = false +python-versions = ">=3.6" +groups = ["search-google"] +files = [ + {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, + {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, +] + +[[package]] +name = "urllib3" +version = "1.26.20" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main", "pyppeteer", "search-google", "selenium", "test"] +files = [ + {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, + {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, +] + +[package.dependencies] +PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7,<2.0", optional = true, markers = "extra == \"socks\""} + +[package.extras] +brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "uvicorn" +version = "0.34.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4"}, + {file = "uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.6.3", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "uvloop" +version = "0.21.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +groups = ["test"] +markers = "platform_python_implementation != \"PyPy\" and sys_platform != \"win32\" and sys_platform != \"cygwin\"" +files = [ + {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, + {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, + {file = "uvloop-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f38b2e090258d051d68a5b14d1da7203a3c3677321cf32a95a6f4db4dd8b6f26"}, + {file = "uvloop-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c43e0f13022b998eb9b973b5e97200c8b90823454d4bc06ab33829e09fb9bb"}, + {file = "uvloop-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10d66943def5fcb6e7b37310eb6b5639fd2ccbc38df1177262b0640c3ca68c1f"}, + {file = "uvloop-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67dd654b8ca23aed0a8e99010b4c34aca62f4b7fce88f39d452ed7622c94845c"}, + {file = "uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8"}, + {file = "uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0"}, + {file = "uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e"}, + {file = "uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb"}, + {file = "uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6"}, + {file = "uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d"}, + {file = "uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c"}, + {file = "uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2"}, + {file = "uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d"}, + {file = "uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc"}, + {file = "uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb"}, + {file = "uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f"}, + {file = "uvloop-0.21.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bfd55dfcc2a512316e65f16e503e9e450cab148ef11df4e4e679b5e8253a5281"}, + {file = "uvloop-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787ae31ad8a2856fc4e7c095341cccc7209bd657d0e71ad0dc2ea83c4a6fa8af"}, + {file = "uvloop-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ee4d4ef48036ff6e5cfffb09dd192c7a5027153948d85b8da7ff705065bacc6"}, + {file = "uvloop-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3df876acd7ec037a3d005b3ab85a7e4110422e4d9c1571d4fc89b0fc41b6816"}, + {file = "uvloop-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd53ecc9a0f3d87ab847503c2e1552b690362e005ab54e8a48ba97da3924c0dc"}, + {file = "uvloop-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a5c39f217ab3c663dc699c04cbd50c13813e31d917642d459fdcec07555cc553"}, + {file = "uvloop-0.21.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:17df489689befc72c39a08359efac29bbee8eee5209650d4b9f34df73d22e414"}, + {file = "uvloop-0.21.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc09f0ff191e61c2d592a752423c767b4ebb2986daa9ed62908e2b1b9a9ae206"}, + {file = "uvloop-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0ce1b49560b1d2d8a2977e3ba4afb2414fb46b86a1b64056bc4ab929efdafbe"}, + {file = "uvloop-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e678ad6fe52af2c58d2ae3c73dc85524ba8abe637f134bf3564ed07f555c5e79"}, + {file = "uvloop-0.21.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:460def4412e473896ef179a1671b40c039c7012184b627898eea5072ef6f017a"}, + {file = "uvloop-0.21.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:10da8046cc4a8f12c91a1c39d1dd1585c41162a15caaef165c2174db9ef18bdc"}, + {file = "uvloop-0.21.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c097078b8031190c934ed0ebfee8cc5f9ba9642e6eb88322b9958b649750f72b"}, + {file = "uvloop-0.21.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:46923b0b5ee7fc0020bef24afe7836cb068f5050ca04caf6b487c513dc1a20b2"}, + {file = "uvloop-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e420a3afe22cdcf2a0f4846e377d16e718bc70103d7088a4f7623567ba5fb0"}, + {file = "uvloop-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88cb67cdbc0e483da00af0b2c3cdad4b7c61ceb1ee0f33fe00e09c81e3a6cb75"}, + {file = "uvloop-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:221f4f2a1f46032b403bf3be628011caf75428ee3cc204a22addf96f586b19fd"}, + {file = "uvloop-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2d1f581393673ce119355d56da84fe1dd9d2bb8b3d13ce792524e1607139feff"}, + {file = "uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3"}, +] + +[package.extras] +dev = ["Cython (>=3.0,<4.0)", "setuptools (>=60)"] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["aiohttp (>=3.10.5)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + +[[package]] +name = "virtualenv" +version = "20.30.0" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "virtualenv-20.30.0-py3-none-any.whl", hash = "sha256:e34302959180fca3af42d1800df014b35019490b119eba981af27f2fa486e5d6"}, + {file = "virtualenv-20.30.0.tar.gz", hash = "sha256:800863162bcaa5450a6e4d721049730e7f2dae07720e0902b0e4040bd6f9ada8"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] + +[[package]] +name = "volcengine-python-sdk" +version = "1.1.2" +description = "Volcengine SDK for Python" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "volcengine-python-sdk-1.1.2.tar.gz", hash = "sha256:b204fd1e6cb0809d3e10113c4ee94cb59debb25fddfa209a6bb0fd44b79a3679"}, +] + +[package.dependencies] +anyio = {version = ">=3.5.0,<5", optional = true, markers = "extra == \"ark\""} +certifi = ">=2017.4.17" +cryptography = {version = ">=43.0.3,<43.0.4", optional = true, markers = "extra == \"ark\""} +httpx = {version = ">=0.23.0,<1", optional = true, markers = "extra == \"ark\""} +pydantic = {version = ">=1.9.0,<3", optional = true, markers = "extra == \"ark\""} +python-dateutil = ">=2.1" +six = ">=1.10" +urllib3 = ">=1.23" + +[package.extras] +ark = ["anyio (>=3.5.0,<5)", "cached-property ; python_version < \"3.8\"", "cryptography (>=43.0.3,<43.0.4)", "httpx (>=0.23.0,<1)", "pydantic (>=1.9.0,<3)"] + +[[package]] +name = "watchfiles" +version = "1.0.4" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.9" +groups = ["test"] +files = [ + {file = "watchfiles-1.0.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ba5bb3073d9db37c64520681dd2650f8bd40902d991e7b4cfaeece3e32561d08"}, + {file = "watchfiles-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f25d0ba0fe2b6d2c921cf587b2bf4c451860086534f40c384329fb96e2044d1"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47eb32ef8c729dbc4f4273baece89398a4d4b5d21a1493efea77a17059f4df8a"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:076f293100db3b0b634514aa0d294b941daa85fc777f9c698adb1009e5aca0b1"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eacd91daeb5158c598fe22d7ce66d60878b6294a86477a4715154990394c9b3"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13c2ce7b72026cfbca120d652f02c7750f33b4c9395d79c9790b27f014c8a5a2"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90192cdc15ab7254caa7765a98132a5a41471cf739513cc9bcf7d2ffcc0ec7b2"}, + {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278aaa395f405972e9f523bd786ed59dfb61e4b827856be46a42130605fd0899"}, + {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a462490e75e466edbb9fc4cd679b62187153b3ba804868452ef0577ec958f5ff"}, + {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8d0d0630930f5cd5af929040e0778cf676a46775753e442a3f60511f2409f48f"}, + {file = "watchfiles-1.0.4-cp310-cp310-win32.whl", hash = "sha256:cc27a65069bcabac4552f34fd2dce923ce3fcde0721a16e4fb1b466d63ec831f"}, + {file = "watchfiles-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:8b1f135238e75d075359cf506b27bf3f4ca12029c47d3e769d8593a2024ce161"}, + {file = "watchfiles-1.0.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2a9f93f8439639dc244c4d2902abe35b0279102bca7bbcf119af964f51d53c19"}, + {file = "watchfiles-1.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9eea33ad8c418847dd296e61eb683cae1c63329b6d854aefcd412e12d94ee235"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31f1a379c9dcbb3f09cf6be1b7e83b67c0e9faabed0471556d9438a4a4e14202"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab594e75644421ae0a2484554832ca5895f8cab5ab62de30a1a57db460ce06c6"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc2eb5d14a8e0d5df7b36288979176fbb39672d45184fc4b1c004d7c3ce29317"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f68d8e9d5a321163ddacebe97091000955a1b74cd43724e346056030b0bacee"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9ce064e81fe79faa925ff03b9f4c1a98b0bbb4a1b8c1b015afa93030cb21a49"}, + {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b77d5622ac5cc91d21ae9c2b284b5d5c51085a0bdb7b518dba263d0af006132c"}, + {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1941b4e39de9b38b868a69b911df5e89dc43767feeda667b40ae032522b9b5f1"}, + {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f8c4998506241dedf59613082d1c18b836e26ef2a4caecad0ec41e2a15e4226"}, + {file = "watchfiles-1.0.4-cp311-cp311-win32.whl", hash = "sha256:4ebbeca9360c830766b9f0df3640b791be569d988f4be6c06d6fae41f187f105"}, + {file = "watchfiles-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:05d341c71f3d7098920f8551d4df47f7b57ac5b8dad56558064c3431bdfc0b74"}, + {file = "watchfiles-1.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:32b026a6ab64245b584acf4931fe21842374da82372d5c039cba6bf99ef722f3"}, + {file = "watchfiles-1.0.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:229e6ec880eca20e0ba2f7e2249c85bae1999d330161f45c78d160832e026ee2"}, + {file = "watchfiles-1.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5717021b199e8353782dce03bd8a8f64438832b84e2885c4a645f9723bf656d9"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0799ae68dfa95136dde7c472525700bd48777875a4abb2ee454e3ab18e9fc712"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43b168bba889886b62edb0397cab5b6490ffb656ee2fcb22dec8bfeb371a9e12"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb2c46e275fbb9f0c92e7654b231543c7bbfa1df07cdc4b99fa73bedfde5c844"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:857f5fc3aa027ff5e57047da93f96e908a35fe602d24f5e5d8ce64bf1f2fc733"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55ccfd27c497b228581e2838d4386301227fc0cb47f5a12923ec2fe4f97b95af"}, + {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c11ea22304d17d4385067588123658e9f23159225a27b983f343fcffc3e796a"}, + {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:74cb3ca19a740be4caa18f238298b9d472c850f7b2ed89f396c00a4c97e2d9ff"}, + {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7cce76c138a91e720d1df54014a047e680b652336e1b73b8e3ff3158e05061e"}, + {file = "watchfiles-1.0.4-cp312-cp312-win32.whl", hash = "sha256:b045c800d55bc7e2cadd47f45a97c7b29f70f08a7c2fa13241905010a5493f94"}, + {file = "watchfiles-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:c2acfa49dd0ad0bf2a9c0bb9a985af02e89345a7189be1efc6baa085e0f72d7c"}, + {file = "watchfiles-1.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:22bb55a7c9e564e763ea06c7acea24fc5d2ee5dfc5dafc5cfbedfe58505e9f90"}, + {file = "watchfiles-1.0.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:8012bd820c380c3d3db8435e8cf7592260257b378b649154a7948a663b5f84e9"}, + {file = "watchfiles-1.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa216f87594f951c17511efe5912808dfcc4befa464ab17c98d387830ce07b60"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c9953cf85529c05b24705639ffa390f78c26449e15ec34d5339e8108c7c407"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cf684aa9bba4cd95ecb62c822a56de54e3ae0598c1a7f2065d51e24637a3c5d"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f44a39aee3cbb9b825285ff979ab887a25c5d336e5ec3574f1506a4671556a8d"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38320582736922be8c865d46520c043bff350956dfc9fbaee3b2df4e1740a4b"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39f4914548b818540ef21fd22447a63e7be6e24b43a70f7642d21f1e73371590"}, + {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f12969a3765909cf5dc1e50b2436eb2c0e676a3c75773ab8cc3aa6175c16e902"}, + {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0986902677a1a5e6212d0c49b319aad9cc48da4bd967f86a11bde96ad9676ca1"}, + {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:308ac265c56f936636e3b0e3f59e059a40003c655228c131e1ad439957592303"}, + {file = "watchfiles-1.0.4-cp313-cp313-win32.whl", hash = "sha256:aee397456a29b492c20fda2d8961e1ffb266223625346ace14e4b6d861ba9c80"}, + {file = "watchfiles-1.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:d6097538b0ae5c1b88c3b55afa245a66793a8fec7ada6755322e465fb1a0e8cc"}, + {file = "watchfiles-1.0.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:d3452c1ec703aa1c61e15dfe9d482543e4145e7c45a6b8566978fbb044265a21"}, + {file = "watchfiles-1.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7b75fee5a16826cf5c46fe1c63116e4a156924d668c38b013e6276f2582230f0"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e997802d78cdb02623b5941830ab06f8860038faf344f0d288d325cc9c5d2ff"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0611d244ce94d83f5b9aff441ad196c6e21b55f77f3c47608dcf651efe54c4a"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9745a4210b59e218ce64c91deb599ae8775c8a9da4e95fb2ee6fe745fc87d01a"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4810ea2ae622add560f4aa50c92fef975e475f7ac4900ce5ff5547b2434642d8"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:740d103cd01458f22462dedeb5a3382b7f2c57d07ff033fbc9465919e5e1d0f3"}, + {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbd912a61543a36aef85e34f212e5d2486e7c53ebfdb70d1e0b060cc50dd0bf"}, + {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0bc80d91ddaf95f70258cf78c471246846c1986bcc5fd33ccc4a1a67fcb40f9a"}, + {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab0311bb2ffcd9f74b6c9de2dda1612c13c84b996d032cd74799adb656af4e8b"}, + {file = "watchfiles-1.0.4-cp39-cp39-win32.whl", hash = "sha256:02a526ee5b5a09e8168314c905fc545c9bc46509896ed282aeb5a8ba9bd6ca27"}, + {file = "watchfiles-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:a5ae5706058b27c74bac987d615105da17724172d5aaacc6c362a40599b6de43"}, + {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdcc92daeae268de1acf5b7befcd6cfffd9a047098199056c72e4623f531de18"}, + {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8d3d9203705b5797f0af7e7e5baa17c8588030aaadb7f6a86107b7247303817"}, + {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdef5a1be32d0b07dcea3318a0be95d42c98ece24177820226b56276e06b63b0"}, + {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:342622287b5604ddf0ed2d085f3a589099c9ae8b7331df3ae9845571586c4f3d"}, + {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9fe37a2de80aa785d340f2980276b17ef697ab8db6019b07ee4fd28a8359d2f3"}, + {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9d1ef56b56ed7e8f312c934436dea93bfa3e7368adfcf3df4c0da6d4de959a1e"}, + {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b42cac65beae3a362629950c444077d1b44f1790ea2772beaea95451c086bb"}, + {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e0227b8ed9074c6172cf55d85b5670199c99ab11fd27d2c473aa30aec67ee42"}, + {file = "watchfiles-1.0.4.tar.gz", hash = "sha256:6ba473efd11062d73e4f00c2b730255f9c1bdd73cd5f9fe5b5da8dbd4a717205"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + +[[package]] +name = "webdriver-manager" +version = "4.0.2" +description = "Library provides the way to automatically manage drivers for different browsers" +optional = false +python-versions = ">=3.7" +groups = ["selenium"] +files = [ + {file = "webdriver_manager-4.0.2-py2.py3-none-any.whl", hash = "sha256:75908d92ecc45ff2b9953614459c633db8f9aa1ff30181cefe8696e312908129"}, + {file = "webdriver_manager-4.0.2.tar.gz", hash = "sha256:efedf428f92fd6d5c924a0d054e6d1322dd77aab790e834ee767af392b35590f"}, +] + +[package.dependencies] +packaging = "*" +python-dotenv = "*" +requests = "*" + +[[package]] +name = "websocket-client" +version = "1.8.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +groups = ["main", "selenium"] +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "websockets" +version = "10.4" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.7" +groups = ["main", "pyppeteer", "test"] +files = [ + {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, + {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, + {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, + {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, + {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, + {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, + {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, + {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, + {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, + {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, + {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, + {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, + {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, + {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, + {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, + {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, + {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, + {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, + {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, + {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, + {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, + {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, + {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, + {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, +] + +[[package]] +name = "werkzeug" +version = "3.1.3" +description = "The comprehensive WSGI web application library." +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, + {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, +] + +[package.dependencies] +MarkupSafe = ">=2.1.1" + +[package.extras] +watchdog = ["watchdog (>=2.3)"] + +[[package]] +name = "widgetsnbextension" +version = "4.0.13" +description = "Jupyter interactive widgets for Jupyter Notebook" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"}, + {file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"}, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +description = "A small Python utility to set file creation time on Windows" +optional = false +python-versions = ">=3.5" +groups = ["main"] +markers = "sys_platform == \"win32\"" +files = [ + {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"}, + {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"}, +] + +[package.extras] +dev = ["black (>=19.3b0) ; python_version >= \"3.6\"", "pytest (>=4.6.2)"] + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +groups = ["main", "test"] +files = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] + +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = false +python-versions = ">=3.7.0" +groups = ["selenium"] +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + +[[package]] +name = "yarl" +version = "1.18.3" +description = "Yet another URL library" +optional = false +python-versions = ">=3.9" +groups = ["main", "test"] +files = [ + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690"}, + {file = "yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6"}, + {file = "yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a"}, + {file = "yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1"}, + {file = "yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285"}, + {file = "yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2"}, + {file = "yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8"}, + {file = "yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d"}, + {file = "yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1"}, + {file = "yarl-1.18.3-cp39-cp39-win32.whl", hash = "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5"}, + {file = "yarl-1.18.3-cp39-cp39-win_amd64.whl", hash = "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9"}, + {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"}, + {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +propcache = ">=0.2.0" + +[[package]] +name = "zhipuai" +version = "2.1.5.20250106" +description = "A SDK library for accessing big model apis from ZhipuAI" +optional = false +python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" +groups = ["main"] +files = [ + {file = "zhipuai-2.1.5.20250106-py3-none-any.whl", hash = "sha256:ca76095f32db501e36038fc1ac4b287b88ed90c4cdd28902d3b1a9365fff879b"}, + {file = "zhipuai-2.1.5.20250106.tar.gz", hash = "sha256:45d391be336a210b360f126443f07882fa6d8184a148c46a8c7d0b7607d6d1f8"}, +] + +[package.dependencies] +cachetools = ">=4.2.2" +httpx = ">=0.23.0" +pydantic = ">=1.9.0,<3.0" +pydantic-core = ">=2.14.6" +pyjwt = ">=2.8.0,<2.9.0" + +[[package]] +name = "zipp" +version = "3.21.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.9" +groups = ["main", "pyppeteer", "test"] +files = [ + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, +] +markers = {main = "python_version == \"3.9\"", test = "python_version == \"3.9\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + +[metadata] +lock-version = "2.1" +python-versions = ">=3.9,<3.12" +content-hash = "f5a7d00f8703333b9b93b76355d5e13afc485ecf861cb9abf2d1be62862dd493" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000..1d60acc08b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,131 @@ +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry] +name = "metagpt" +version = "1.0.0" +description = "The Multi-Agent Framework" +authors = ["Alexander Wu "] +readme = "README.md" +license = "MIT" +repository = "https://github.com/geekan/MetaGPT" +keywords = ["metagpt", "multi-agent", "multi-role", "programming", "gpt", "llm", "metaprogramming"] +classifiers = [ + "Development Status :: 4 - Beta", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "License :: OSI Approved :: MIT License", +] +exclude = ["metagpt/core/**", "examples/**", "tests/**", "scripts/**"] +packages = [ + { include = "metagpt" } +] + +[tool.poetry.dependencies] +python = ">=3.9,<3.12" +# 明确将metagpt-core作为依赖,使用path确保开发模式下也能正确工作 +metagpt-core = { path = "metagpt/core", develop = true } +channels = "4.0.0" +faiss_cpu = "1.7.4" +fire = "0.4.0" +typer = "0.9.0" +lancedb = "0.4.0" +meilisearch = "0.21.0" +openai = "^1.64.0" +openpyxl = "^3.1.5" +beautifulsoup4 = "4.12.3" +pandas = "2.1.1" +python_docx = "0.8.11" +tqdm = "4.66.2" +anthropic = "0.47.2" +numpy = "^1.26.4" +typing-inspect = "0.8.0" +libcst = "1.0.1" +qdrant-client = "1.7.0" +grpcio = "^1.67.0" +grpcio-tools = "^1.62.3" +grpcio-status = "^1.62.3" +ta = "0.10.2" +semantic-kernel = "0.4.3.dev0" +wrapt = "1.15.0" +redis = "^5.0.0" +curl-cffi = "^0.7.0" +httplib2 = "^0.22.0" +websocket-client = "^1.8.0" +gitpython = "3.1.40" +zhipuai = "^2.1.5" +rich = "13.6.0" +nbclient = "0.9.0" +nbformat = "5.9.2" +ipython = "8.17.2" +ipykernel = "6.27.1" +scikit_learn = "1.3.2" +typing-extensions = "4.11.0" +socksio = "^1.0.0" +gitignore-parser = "0.1.9" +websockets = ">=10.0,<12.0" +networkx = "^3.2.1" +google-generativeai = "0.4.1" +playwright = ">=1.26" +anytree = "*" +ipywidgets = "8.1.1" +pillow = "*" +imap_tools = "1.5.0" +pylint = "^3.0.3" +pygithub = "^2.3" +htmlmin = "*" +fsspec = "*" +grep-ast = "^0.3.3" +unidiff = "0.7.5" +qianfan = "^0.4.4" +dashscope = "^1.19.3" +jieba = "0.42.1" +volcengine-python-sdk = {extras = ["ark"], version = "^1.0.94"} +gymnasium = "0.29.1" +boto3 = "^1.34.69" +spark_ai_python = "^0.3.30" +httpx = "0.28.1" + +[tool.poetry.group.selenium.dependencies] +selenium = ">4" +webdriver_manager = "*" +beautifulsoup4 = "*" + +[tool.poetry.group.search-google.dependencies] +google-api-python-client = "2.94.0" + +[tool.poetry.group.search-ddg.dependencies] +duckduckgo-search = "^4.1.1" + +[tool.poetry.group.test.dependencies] +pytest = "*" +pytest-asyncio = "*" +pytest-cov = "*" +pytest-mock = "*" +pytest-html = "*" +pytest-xdist = "*" +pytest-timeout = "*" +connexion = {extras = ["uvicorn"], version = "^3.0.5"} +azure-cognitiveservices-speech = "^1.31.0" +aioboto3 = "^12.4.0" +gradio = "3.0.0" +google-api-core = "2.17.1" +protobuf = "^4.25.5" +pylint = "3.0.3" +pybrowsers = "*" + +[tool.poetry.group.dev.dependencies] +pylint = "^3.0.3" +black = "^23.3.0" +isort = "^5.12.0" +pre-commit = "^3.6.0" + +[tool.poetry.scripts] +metagpt = "metagpt.software_company:app" +install-mermaid = "scripts.install_mermaid:install_mermaid_cli" + +[tool.poetry.group.pyppeteer.dependencies] +pyppeteer = ">=1.0.2" diff --git a/requirements.txt b/requirements.txt index 536474df2c..b61125ae6b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ -aiohttp==3.8.6 #azure_storage==0.37.0 channels==4.0.0 # Django==4.1.5 @@ -10,28 +9,22 @@ typer==0.9.0 # godot==0.1.1 # google_api_python_client==2.93.0 # Used by search_engine.py lancedb==0.4.0 -loguru==0.6.0 meilisearch==0.21.0 -numpy~=1.26.4 openai~=1.64.0 openpyxl~=3.1.5 beautifulsoup4==4.12.3 pandas==2.1.1 -pydantic>=2.5.3 #pygame==2.1.3 # pymilvus==2.4.6 # pytest==7.2.2 # test extras require python_docx==0.8.11 -PyYAML==6.0.1 # sentence_transformers==2.2.2 -setuptools==65.6.3 -tenacity==8.2.3 -tiktoken==0.7.0 tqdm==4.66.2 #unstructured[local-inference] # selenium>4 # webdriver_manager<3.9 anthropic==0.47.2 +numpy~=1.26.4 typing-inspect==0.8.0 libcst==1.0.1 qdrant-client==1.7.0 @@ -50,7 +43,6 @@ redis~=5.0.0 # Used by metagpt/utils/redis.py curl-cffi~=0.7.0 httplib2~=0.22.0 websocket-client~=1.8.0 -aiofiles==23.2.1 gitpython==3.1.40 zhipuai~=2.1.5 rich==13.6.0 @@ -79,12 +71,9 @@ grep-ast~=0.3.3 # linter unidiff==0.7.5 # used at metagpt/tools/libs/cr.py qianfan~=0.4.4 dashscope~=1.19.3 -rank-bm25==0.2.2 # for tool recommendation jieba==0.42.1 # for tool recommendation volcengine-python-sdk[ark]~=1.0.94 # Solution for installation error in Windows: https://github.com/volcengine/volcengine-python-sdk/issues/5 gymnasium==0.29.1 boto3~=1.34.69 spark_ai_python~=0.3.30 -tree_sitter~=0.23.2 -tree_sitter_python~=0.23.2 -httpx==0.28.1 +httpx==0.28.1 \ No newline at end of file diff --git a/requirements_core.txt b/requirements_core.txt new file mode 100644 index 0000000000..f216d612f9 --- /dev/null +++ b/requirements_core.txt @@ -0,0 +1,13 @@ +aiohttp==3.8.6 +loguru==0.6.0 +pydantic>=2.5.3 +PyYAML==6.0.1 +setuptools==65.6.3 +tenacity==8.2.3 +tiktoken==0.7.0 +aiofiles==23.2.1 +rank-bm25==0.2.2 # for tool recommendation +tree_sitter~=0.23.2 +tree_sitter_python~=0.23.2 +chardet==5.2.0 +anthropic==0.47.2 \ No newline at end of file diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000000..c6b200b6c2 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,110 @@ +# MetaGPT Poetry Scripts Guide + +This directory contains scripts for building and installing MetaGPT using Poetry. + +install poetry and loguru, before start: `pip install poetry loguru` + +## Build Script (build.py) + +`build.py` is used to build the MetaGPT package with Poetry, including both the core sub-package and the main package. + +### Usage + +```bash +python scripts/build.py +``` + +### Features + +- Automatically cleans the dist directory to ensure clean build results +- Automatically detects the core package (metagpt/core) and builds it first +- Then builds the main package (metagpt) +- Outputs all build results to the dist directory in the project root +- Displays the filenames and sizes of the build results +- Records detailed logs during the build process + +## Installation Script (install.py) + +`install.py` is used to install MetaGPT and its dependencies using Poetry. + +### Usage + +```bash +python scripts/install.py [options] +``` + +### Options + +- `--dev`: Install development dependencies +- `--groups GROUP1,GROUP2,...`: Install specified dependency groups, comma-separated, e.g., 'test,selenium' +- `--editable` or `-e`: Install in editable mode (recommended for development testing) +- `--core-only`: Only install the metagpt-core sub-package +- `--no-core`: Do not install the metagpt-core sub-package (only the main package) +- `--no-deps`: Do not install dependencies, only the project itself +- `--sync`: Synchronize all dependency versions in the lock file +- `--skip-env-check`: Skip virtual environment check + +### Security Checks + +- The script checks if it's running in a virtual environment +- After installation, an import test is performed to confirm successful installation + +### Examples + +Install the basic package: +```bash +python scripts/install.py +``` + +Install development dependencies: +```bash +python scripts/install.py --dev +``` + +Install specific dependency groups: +```bash +python scripts/install.py --groups test,selenium +``` + +Install in editable mode: +```bash +python scripts/install.py --editable +``` + +Only install the core package: +```bash +python scripts/install.py --core-only +``` + +Install the project while skipping dependencies: +```bash +python scripts/install.py --no-deps +``` + +## Dependencies + +These scripts depend on the following Python packages: + +- loguru: For logging +- poetry: For building and installation + +If poetry is not installed, the script will automatically install it. + +## Development Workflow Example + +Here's a typical development workflow example: + +1. After code changes, install in the development environment for testing: + ```bash + python scripts/install.py --dev + ``` + +2. After testing is successful, build the distribution package: + ```bash + python scripts/build.py + ``` + +3. View the build results: + ```bash + ls -l dist/ + ``` \ No newline at end of file diff --git a/scripts/build.py b/scripts/build.py new file mode 100644 index 0000000000..943125baef --- /dev/null +++ b/scripts/build.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Build metagpt packages using poetry +""" + +import os +import shutil +import subprocess +import sys +from pathlib import Path + +from loguru import logger + + +def setup_logger(): + """Configure logger""" + logger.remove() + logger.add( + sys.stderr, + level="INFO", + format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}", + ) + + +def clean_dist_dir(dist_dir: str): + """Clean the dist directory + + Args: + dist_dir: Path to the dist directory + """ + if os.path.exists(dist_dir): + logger.info(f"Cleaning dist directory: {dist_dir}") + # Delete all files in the directory + for file in os.listdir(dist_dir): + file_path = os.path.join(dist_dir, file) + try: + if os.path.isfile(file_path): + os.unlink(file_path) + logger.debug(f"Deleted file: {file_path}") + elif os.path.isdir(file_path): + shutil.rmtree(file_path) + logger.debug(f"Deleted directory: {file_path}") + except Exception as e: + logger.error(f"Deletion failed: {file_path}, Error: {e}") + else: + # Create directory + os.makedirs(dist_dir) + logger.info(f"Created dist directory: {dist_dir}") + + +def run_poetry_build(project_dir: str, output_dir: str = None) -> bool: + """Run poetry build command to build packages + + Args: + project_dir: Project root directory + output_dir: Output directory (optional) + + Returns: + bool: True if build successful, False otherwise + """ + try: + logger.info(f"Starting to build project: {os.path.basename(project_dir)}") + # Build both wheel and sdist formats + cmd = ["poetry", "build"] + + if output_dir: + # Ensure output directory exists + os.makedirs(output_dir, exist_ok=True) + cmd.extend(["--output", output_dir]) + + subprocess.run(cmd, cwd=project_dir, check=True, capture_output=True, text=True) + + logger.info(f"Build completed: {os.path.basename(project_dir)}") + return True + except subprocess.CalledProcessError as e: + logger.error(f"Build failed: {e.stderr}") + return False + + +def main(): + """Main function""" + setup_logger() + + # Get project root directory + project_root = Path(__file__).parent.parent.absolute() + core_dir = os.path.join(project_root, "metagpt", "core") + dist_dir = os.path.join(project_root, "dist") + + # Clean dist directory + clean_dist_dir(dist_dir) + + # Check project structure + if not os.path.exists(core_dir): + logger.warning(f"Core directory does not exist: {core_dir}") + if input("Continue building the main project? (y/n): ").lower() != "y": + return + else: + # Build core project first + logger.info("Starting to build core package...") + if not run_poetry_build(core_dir, dist_dir): + logger.error("Core project build failed, aborting main project build") + if input("Force continue building the main project? (y/n): ").lower() != "y": + return + else: + logger.info("Core project build successful") + + # Then build main project + logger.info("Starting to build main project...") + if run_poetry_build(project_root, dist_dir): + logger.info(f"Main project build successful, output directory: {dist_dir}") + else: + logger.error("Main project build failed") + + # List built packages + if os.path.exists(dist_dir): + built_packages = os.listdir(dist_dir) + if built_packages: + logger.info(f"Built package files ({len(built_packages)}):") + for package in built_packages: + package_path = os.path.join(dist_dir, package) + size_mb = os.path.getsize(package_path) / (1024 * 1024) + logger.info(f" - {package} ({size_mb:.2f} MB)") + logger.info(f"All packages successfully built to: {dist_dir}") + else: + logger.warning("No built package files found") + + +if __name__ == "__main__": + main() diff --git a/scripts/install.py b/scripts/install.py new file mode 100644 index 0000000000..c6469666af --- /dev/null +++ b/scripts/install.py @@ -0,0 +1,267 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Install metagpt and its dependencies using poetry +""" + +import argparse +import os +import subprocess +import sys +from pathlib import Path +from typing import List, Optional, Tuple + +from loguru import logger + + +def setup_logger(): + """Configure logger""" + logger.remove() + logger.add( + sys.stderr, + level="INFO", + format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}", + ) + + +def parse_args(): + """Parse command line arguments""" + parser = argparse.ArgumentParser(description="Install MetaGPT using Poetry") + + parser.add_argument("--dev", action="store_true", help="Install development dependencies") + + parser.add_argument( + "--groups", type=str, default="", help="Dependency groups to install, comma-separated, e.g. 'test,selenium'" + ) + + parser.add_argument("--editable", "-e", action="store_true", help="Install in editable mode") + + parser.add_argument("--core-only", action="store_true", help="Only install metagpt-core") + + parser.add_argument("--no-core", action="store_true", help="Do not install metagpt-core") + + parser.add_argument("--no-deps", action="store_true", help="Do not install dependencies, only the project itself") + + parser.add_argument("--sync", action="store_true", help="Synchronize all dependency versions in the lock file") + + parser.add_argument("--skip-env-check", action="store_true", help="Skip virtual environment check") + + return parser.parse_args() + + +def run_command(cmd: List[str], cwd: Optional[str] = None) -> Tuple[bool, str]: + """Run command + + Args: + cmd: Command list + cwd: Working directory + + Returns: + Tuple[bool, str]: (success, output) + """ + try: + logger.info(f"Running command: {' '.join(cmd)}") + result = subprocess.run(cmd, cwd=cwd, check=True, capture_output=True, text=True) + if result.stdout: + logger.debug(result.stdout) + logger.info("Command executed successfully") + return True, result.stdout + except subprocess.CalledProcessError as e: + logger.error(f"Command execution failed: {e.stderr}") + return False, e.stderr + + +def check_virtual_env(skip_check: bool = False) -> bool: + """Check if running in a virtual environment + + Args: + skip_check: Whether to skip the virtual environment check + + Returns: + bool: Whether in a virtual environment + """ + # Simple check if in a virtual environment + in_venv = sys.prefix != sys.base_prefix + + if in_venv: + logger.info(f"Currently in virtual environment: {os.path.basename(sys.prefix)}") + else: + logger.warning( + "Not running in a virtual environment, recommended to install and test in a virtual environment." + ) + if not skip_check and input("Continue with installation? (y/n): ").lower() != "y": + logger.info("Installation cancelled") + sys.exit(0) + + return in_venv + + +def install_poetry(): + """Check and install poetry""" + try: + success, output = run_command(["poetry", "--version"]) + if success: + logger.info(f"Poetry already installed: {output.strip()}") + except (subprocess.CalledProcessError, FileNotFoundError): + logger.warning("Poetry not installed, installing now...") + install_cmd = [sys.executable, "-m", "pip", "install", "poetry"] + + success, _ = run_command(install_cmd) + if not success: + logger.error("Poetry installation failed") + sys.exit(1) + + logger.info("Poetry installation successful") + + +def install_core(project_root: Path, editable: bool, no_deps: bool, sync: bool) -> bool: + """Install metagpt-core + + Args: + project_root: Project root directory + editable: Whether to install in editable mode + no_deps: Whether to skip dependencies + sync: Whether to synchronize dependencies + + Returns: + bool: True if installation successful, False otherwise + """ + core_dir = project_root / "metagpt" / "core" + + if not core_dir.exists(): + logger.error(f"Core directory does not exist: {core_dir}") + return False + + logger.info("Starting to install metagpt-core...") + + cmd = ["poetry", "install"] + + if editable: + cmd.append("--editable") + + if no_deps: + cmd.append("--no-deps") + + if sync: + cmd.append("--sync") + + success, _ = run_command(cmd, str(core_dir)) + return success + + +def install_metagpt( + project_root: Path, groups: List[str], editable: bool, dev: bool, no_deps: bool, sync: bool +) -> bool: + """Install metagpt + + Args: + project_root: Project root directory + groups: Dependency groups to install + editable: Whether to install in editable mode + dev: Whether to install development dependencies + no_deps: Whether to skip dependencies + sync: Whether to synchronize dependencies + + Returns: + bool: True if installation successful, False otherwise + """ + logger.info("Starting to install metagpt...") + + cmd = ["poetry", "install"] + + if editable: + cmd.append("--editable") + + if no_deps: + cmd.append("--no-deps") + + if sync: + cmd.append("--sync") + + if not dev: + cmd.append("--without") + cmd.append("dev") + + if groups: + cmd.append("--with") + cmd.append(",".join(groups)) + + success, _ = run_command(cmd, str(project_root)) + return success + + +def check_installation() -> bool: + """Verify installation success + + Returns: + bool: True if verification successful, False otherwise + """ + try: + # Try to import metagpt.core + check_core_cmd = [sys.executable, "-c", "import metagpt.core; print('Successfully imported MetaGPT Core')"] + success, output = run_command(check_core_cmd) + if success: + logger.info(output.strip()) + + else: + return False + + # Try to import metagpt + check_cmd = [sys.executable, "-c", "import metagpt; print('Successfully imported MetaGPT')"] + success, output = run_command(check_cmd) + if success: + logger.info(output.strip()) + return True + else: + return False + except Exception as e: + logger.error(f"Import test failed: {e}") + return False + + +def main(): + """Main function""" + setup_logger() + args = parse_args() + + # Install poetry + install_poetry() + + # Get project root directory + project_root = Path(__file__).parent.parent.absolute() + + # Process dependency groups + groups = [] + if args.groups: + groups = [g.strip() for g in args.groups.split(",") if g.strip()] + + # Install core package + if args.core_only: + if install_core(project_root, args.editable, args.no_deps, args.sync): + logger.info("metagpt-core installation successful (development testing mode)") + else: + logger.error("metagpt-core installation failed") + return + + # If core package and main package need to be installed together + if not args.no_core: + if not install_core(project_root, args.editable, args.no_deps, args.sync): + logger.error("metagpt-core installation failed, aborting main package installation") + return + logger.info("metagpt-core installation successful (development testing mode)") + + # Install main package + if install_metagpt(project_root, groups, args.editable, args.dev, args.no_deps, args.sync): + logger.info("metagpt installation successful (development testing mode)") + + # Verify installation + if check_installation(): + logger.info("Installation verification successful, MetaGPT is ready") + else: + logger.error("Installation verification failed, please check logs") + else: + logger.error("metagpt installation failed") + + +if __name__ == "__main__": + main() diff --git a/scripts/install_mermaid.py b/scripts/install_mermaid.py new file mode 100644 index 0000000000..3559f034d3 --- /dev/null +++ b/scripts/install_mermaid.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Tool script for installing Mermaid CLI + +This script provides functionality to install mermaid-cli in the MetaGPT environment, +similar to the InstallMermaidCLI command in setup.py, but adapted for Poetry environments. +""" + +import subprocess +import sys + +from metagpt.core.logs import logger + + +def install_mermaid_cli(): + """Install mermaid-cli + + Installs mermaid-cli via npm, enabling MetaGPT to generate diagrams. + If installation fails, appropriate error messages and alternatives are provided. + """ + try: + # Check if npm is installed + try: + subprocess.run(["npm", "--version"], check=True, capture_output=True) + except (subprocess.CalledProcessError, FileNotFoundError): + logger.error("npm is not installed. Please install Node.js to get npm: https://nodejs.org/") + print("npm is not installed. Please install Node.js to get npm: https://nodejs.org/") + return 1 + + # Install mermaid-cli + logger.info("Installing mermaid-cli...") + print("Installing mermaid-cli...") + subprocess.check_call(["npm", "install", "-g", "@mermaid-js/mermaid-cli"]) + + logger.info("mermaid-cli installed successfully!") + print("mermaid-cli installed successfully!") + + # Suggest alternatives to the user + print("\nNote: MetaGPT also supports other diagram rendering engines:") + print("1. playwright (recommended): pip install playwright && playwright install --with-deps chromium") + print("2. pyppeteer: pip install pyppeteer") + print("3. mermaid.ink: No installation required, only supports SVG and PNG formats") + print("\nTo use these alternative engines, set in config2.yaml:") + print("mermaid:\n engine: playwright # or pyppeteer, ink") + + return 0 + except subprocess.CalledProcessError as e: + logger.error(f"Error installing mermaid-cli: {e}") + print(f"Error installing mermaid-cli: {e}") + print("\nPlease consider alternatives:") + print("1. Local installation: npm install @mermaid-js/mermaid-cli") + print(" Then set the path in config2.yaml: mermaid.path: './node_modules/.bin/mmdc'") + print("2. Use other rendering engines:") + print(" - playwright (recommended): pip install playwright && playwright install --with-deps chromium") + print(" - pyppeteer: pip install pyppeteer") + print(" - mermaid.ink: No installation required, only supports SVG and PNG formats") + return 1 + + +if __name__ == "__main__": + sys.exit(install_mermaid_cli()) diff --git a/setup.py b/setup.py index 1fe74b64d7..c05d66f597 100644 --- a/setup.py +++ b/setup.py @@ -21,31 +21,12 @@ def run(self): here = Path(__file__).resolve().parent long_description = (here / "README.md").read_text(encoding="utf-8") requirements = (here / "requirements.txt").read_text(encoding="utf-8").splitlines() - +requirements = requirements + ["metagpt-core==1.0.0"] extras_require = { "selenium": ["selenium>4", "webdriver_manager", "beautifulsoup4"], "search-google": ["google-api-python-client==2.94.0"], "search-ddg": ["duckduckgo-search~=4.1.1"], - # "ocr": ["paddlepaddle==2.4.2", "paddleocr~=2.7.3", "tabulate==0.9.0"], - "rag": [ - "llama-index-core==0.10.15", - "llama-index-embeddings-azure-openai==0.1.6", - "llama-index-embeddings-openai==0.1.5", - "llama-index-embeddings-gemini==0.1.6", - "llama-index-embeddings-ollama==0.1.2", - "llama-index-llms-azure-openai==0.1.4", - "llama-index-readers-file==0.1.4", - "llama-index-retrievers-bm25==0.1.3", - "llama-index-vector-stores-faiss==0.1.1", - "llama-index-vector-stores-elasticsearch==0.1.6", - "llama-index-vector-stores-chroma==0.1.6", - "llama-index-postprocessor-cohere-rerank==0.1.4", - "llama-index-postprocessor-colbert-rerank==0.1.1", - "llama-index-postprocessor-flag-embedding-reranker==0.1.2", - "llama-index-vector-stores-milvus==0.1.23", - "docx2txt==0.8", - ], } extras_require["test"] = [ @@ -71,30 +52,6 @@ def run(self): "pyppeteer>=1.0.2" ] # pyppeteer is unmaintained and there are conflicts with dependencies extras_require["dev"] = (["pylint~=3.0.3", "black~=23.3.0", "isort~=5.12.0", "pre-commit~=3.6.0"],) -extras_require["android_assistant"] = [ - "pyshine==0.0.9", - "opencv-python==4.6.0.66", - "protobuf<3.20,>=3.9.2", - "modelscope", - "tensorflow==2.9.1; os_name == 'linux'", - "tensorflow==2.9.1; os_name == 'win32'", - "tensorflow-macos==2.9; os_name == 'darwin'", - "keras==2.9.0", - "torch", - "torchvision", - "transformers", - "opencv-python", - "matplotlib", - "pycocotools", - "SentencePiece", - "tf_slim", - "tf_keras", - "pyclipper", - "shapely", - "groundingdino-py", - "datasets==2.18.0", - "clip-openai", -] setup( name="metagpt", @@ -107,7 +64,7 @@ def run(self): author_email="alexanderwu@deepwisdom.ai", license="MIT", keywords="metagpt multi-agent multi-role programming gpt llm metaprogramming", - packages=find_packages(exclude=["contrib", "docs", "examples", "tests*"]), + packages=find_packages(exclude=["metagpt.core*", "examples*", "tests*"]), python_requires=">=3.9, <3.12", install_requires=requirements, extras_require=extras_require, diff --git a/setup_core.py b/setup_core.py new file mode 100644 index 0000000000..45591cc0aa --- /dev/null +++ b/setup_core.py @@ -0,0 +1,53 @@ +"""Setup script for MetaGPT core.""" + +from pathlib import Path + +from setuptools import find_namespace_packages, setup + +here = Path(__file__).resolve().parent +requirements = (here / "requirements_core.txt").read_text(encoding="utf-8").splitlines() + +extras_require = {} + +extras_require["test"] = [ + *set(i for j in extras_require.values() for i in j), + "pytest", + "pytest-asyncio", + "pytest-cov", + "pytest-mock", + "pytest-html", + "pytest-xdist", + "pytest-timeout", + "connexion[uvicorn]~=3.0.5", + "azure-cognitiveservices-speech~=1.31.0", + "aioboto3~=12.4.0", + "gradio==3.0.0", + "google-api-core==2.17.1", + "protobuf~=4.25.5", + "pylint==3.0.3", + "pybrowsers", +] + +extras_require["pyppeteer"] = [ + "pyppeteer>=1.0.2" +] # pyppeteer is unmaintained and there are conflicts with dependencies +extras_require["dev"] = (["pylint~=3.0.3", "black~=23.3.0", "isort~=5.12.0", "pre-commit~=3.6.0"],) + +setup( + name="metagpt-core", + version="1.0.0", + description="The core package of The Multi-Agent Framework", + long_description="", + long_description_content_type="text/markdown", + url="https://github.com/geekan/MetaGPT", + author="Alexander Wu", + author_email="alexanderwu@deepwisdom.ai", + license="MIT", + keywords="metagpt multi-agent multi-role programming gpt llm metaprogramming", + packages=find_namespace_packages(include=["metagpt.core*"], exclude=["examples*", "tests*"]), + # package_dir={"metagpt.core": "core"}, + python_requires=">=3.9, <3.12", + install_requires=requirements, + extras_require=extras_require, + include_package_data=True, +) diff --git a/tests/config2.yaml b/tests/config2.yaml index e1eb7cfd2d..0dfa3ae3ed 100644 --- a/tests/config2.yaml +++ b/tests/config2.yaml @@ -14,9 +14,6 @@ s3: secure: false bucket: "mock" -azure_tts_subscription_key: "xxx" -azure_tts_region: "eastus" - iflytek_app_id: "xxx" iflytek_api_key: "xxx" iflytek_api_secret: "xxx" diff --git a/tests/conftest.py b/tests/conftest.py index 1f6661f7c4..6d06092a01 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -17,10 +17,10 @@ import aiohttp.web import pytest -from metagpt.const import DEFAULT_WORKSPACE_ROOT, TEST_DATA_PATH -from metagpt.context import Context as MetagptContext -from metagpt.llm import LLM -from metagpt.logs import logger +from metagpt.core.const import DEFAULT_WORKSPACE_ROOT, TEST_DATA_PATH +from metagpt.core.context import Context as MetagptContext +from metagpt.core.llm import LLM +from metagpt.core.logs import logger from metagpt.utils.git_repository import GitRepository from tests.mock.mock_aiohttp import MockAioResponse from tests.mock.mock_curl_cffi import MockCurlCffiResponse @@ -62,8 +62,8 @@ def pytest_runtest_makereport(item, call): def llm_mock(rsp_cache, mocker, request): llm = MockLLM(allow_open_api_call=ALLOW_OPENAI_API_CALL) llm.rsp_cache = rsp_cache - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", llm.aask) - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask_batch", llm.aask_batch) + mocker.patch("metagpt.core.provider.base_llm.BaseLLM.aask", llm.aask) + mocker.patch("metagpt.core.provider.base_llm.BaseLLM.aask_batch", llm.aask_batch) mocker.patch("metagpt.provider.openai_api.OpenAILLM.aask_code", llm.aask_code) yield mocker if hasattr(request.node, "test_outcome") and request.node.test_outcome.passed: @@ -150,6 +150,12 @@ def context(request): repo = GitRepository(local_path=DEFAULT_WORKSPACE_ROOT / f"unittest/{uuid.uuid4().hex}") ctx.config.project_path = str(repo.workdir) + # 使用 kwargs 存储额外属性 + ctx.kwargs.set("git_repo", repo) + from metagpt.utils.project_repo import ProjectRepo + + ctx.kwargs.set("repo", ProjectRepo(repo)) + # Destroy git repo at the end of the test session. def fin(): if ctx.config.project_path: diff --git a/tests/data/graph_db/networkx.class_view.json b/tests/data/graph_db/networkx.class_view.json deleted file mode 100644 index ad464e79ae..0000000000 --- a/tests/data/graph_db/networkx.class_view.json +++ /dev/null @@ -1 +0,0 @@ -{"directed": true, "multigraph": false, "graph": {}, "nodes": [{"id": "metagpt/schema.py"}, {"id": "source_code"}, {"id": "python"}, {"id": "metagpt/schema.py:AIMessage"}, {"id": "class"}, {"id": "{\"name\":\"AIMessage\",\"package\":\"metagpt/schema.py:AIMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/general_api_base.py"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor"}, {"id": "{\"name\":\"APIRequestor\",\"package\":\"metagpt/provider/general_api_base.py:APIRequestor\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key : NoneType\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"AZURE_AD,OPEN_AI\",\"default_\":\"\",\"description\":\"api_type : AZURE_AD, OPEN_AI\",\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"]},\"api_version\":{\"name\":\"api_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_version : NoneType\",\"compositions\":[]},\"base_url\":{\"name\":\"base_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"base_url : NoneType\",\"compositions\":[]},\"organization\":{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization : NoneType\",\"compositions\":[]}},\"methods\":{\"arequest\":{\"name\":\"arequest\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[AsyncGenerator[OpenAIResponse,None],bool,str]\",\"description\":\"Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"compositions\":[\"AsyncGenerator\",\"OpenAIResponse\"]},\"description\":\"arequest(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\"]},\"arequest_raw\":{\"name\":\"arequest_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"aiohttp.ClientResponse\",\"description\":\"aiohttp.ClientResponse\",\"compositions\":[\"aiohttp.ClientResponse\"]},\"description\":\"arequest_raw(method, url, session): aiohttp.ClientResponse\",\"aggregations\":[\"aiohttp.ClientResponse\"]},\"request\":{\"name\":\"request\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[Iterator[OpenAIResponse],bool,str]\",\"description\":\"Tuple[Iterator[OpenAIResponse], bool, str]\",\"compositions\":[\"OpenAIResponse\"]},\"description\":\"request(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[Iterator[OpenAIResponse], bool, str]\",\"aggregations\":[\"OpenAIResponse\"]},\"request_headers\":{\"name\":\"request_headers\",\"args\":[{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"extra\",\"type_\":\"\",\"default_\":\"\",\"description\":\"extra\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"request_headers(method: str, extra, request_id: Optional[str]): Dict[str, str]\",\"aggregations\":[]},\"request_raw\":{\"name\":\"request_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"requests.Response\",\"description\":\"requests.Response\",\"compositions\":[\"requests.Response\"]},\"description\":\"request_raw(method, url): requests.Response\",\"aggregations\":[\"requests.Response\"]}},\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"],\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\",\"aiohttp.ClientResponse\",\"requests.Response\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:api_key"}, {"id": "class_property"}, {"id": "{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:api_type"}, {"id": "{\"name\":\"api_type\",\"type_\":\"AZURE_AD,OPEN_AI\",\"default_\":\"\",\"description\":\"api_type : AZURE_AD, OPEN_AI\",\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:api_version"}, {"id": "{\"name\":\"api_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_version : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:base_url"}, {"id": "{\"name\":\"base_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"base_url : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:organization"}, {"id": "{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:arequest"}, {"id": "class_method"}, {"id": "{\"name\":\"arequest\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[AsyncGenerator[OpenAIResponse,None],bool,str]\",\"description\":\"Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"compositions\":[\"AsyncGenerator\",\"OpenAIResponse\"]},\"description\":\"arequest(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:arequest_raw"}, {"id": "{\"name\":\"arequest_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"aiohttp.ClientResponse\",\"description\":\"aiohttp.ClientResponse\",\"compositions\":[\"aiohttp.ClientResponse\"]},\"description\":\"arequest_raw(method, url, session): aiohttp.ClientResponse\",\"aggregations\":[\"aiohttp.ClientResponse\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:request"}, {"id": "{\"name\":\"request\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[Iterator[OpenAIResponse],bool,str]\",\"description\":\"Tuple[Iterator[OpenAIResponse], bool, str]\",\"compositions\":[\"OpenAIResponse\"]},\"description\":\"request(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[Iterator[OpenAIResponse], bool, str]\",\"aggregations\":[\"OpenAIResponse\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:request_headers"}, {"id": "{\"name\":\"request_headers\",\"args\":[{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"extra\",\"type_\":\"\",\"default_\":\"\",\"description\":\"extra\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"request_headers(method: str, extra, request_id: Optional[str]): Dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:request_raw"}, {"id": "{\"name\":\"request_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"requests.Response\",\"description\":\"requests.Response\",\"compositions\":[\"requests.Response\"]},\"description\":\"request_raw(method, url): requests.Response\",\"aggregations\":[\"requests.Response\"]}"}, {"id": "?:AZURE_AD"}, {"id": "?:OPEN_AI"}, {"id": "?:OpenAIResponse"}, {"id": "?:AsyncGenerator"}, {"id": "?:aiohttp.ClientResponse"}, {"id": "?:requests.Response"}, {"id": "metagpt/actions/action.py"}, {"id": "metagpt/actions/action.py:Action"}, {"id": "{\"name\":\"Action\",\"package\":\"metagpt/actions/action.py:Action\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_\":\"\",\"description\":\"i_context : Union[dict, CodingContext, CodeSummarizeContext, TestingContext, RunCodeContext, CodePlanAndChangeContext, str, None]\",\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"node\":{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},\"prefix\":{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"set_name_if_empty\":{\"name\":\"set_name_if_empty\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_name_if_empty(values)\",\"aggregations\":[]},\"set_prefix\":{\"name\":\"set_prefix\",\"args\":[{\"name\":\"prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prefix\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_prefix(prefix)\",\"aggregations\":[]}},\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/action.py:Action:desc"}, {"id": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_\":\"\",\"description\":\"i_context : Union[dict, CodingContext, CodeSummarizeContext, TestingContext, RunCodeContext, CodePlanAndChangeContext, str, None]\",\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"]}"}, {"id": "metagpt/actions/action.py:Action:model_config"}, {"id": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:name"}, {"id": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:node"}, {"id": "{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:prefix"}, {"id": "{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:project_name"}, {"id": "{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:project_path"}, {"id": "{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:prompt_schema"}, {"id": "{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:repo"}, {"id": "{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action.py:Action:set_name_if_empty"}, {"id": "{\"name\":\"set_name_if_empty\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_name_if_empty(values)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action.py:Action:set_prefix"}, {"id": "{\"name\":\"set_prefix\",\"args\":[{\"name\":\"prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prefix\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_prefix(prefix)\",\"aggregations\":[]}"}, {"id": "?:CodePlanAndChangeContext"}, {"id": "?:CodeSummarizeContext"}, {"id": "?:CodingContext"}, {"id": "?:RunCodeContext"}, {"id": "?:TestingContext"}, {"id": "metagpt/actions/action_graph.py"}, {"id": "metagpt/actions/action_graph.py:ActionGraph"}, {"id": "{\"name\":\"ActionGraph\",\"package\":\"metagpt/actions/action_graph.py:ActionGraph\",\"attributes\":{\"edges\":{\"name\":\"edges\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"edges : dict\",\"compositions\":[]},\"execution_order\":{\"name\":\"execution_order\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"execution_order : list\",\"compositions\":[]},\"nodes\":{\"name\":\"nodes\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"nodes : dict\",\"compositions\":[]}},\"methods\":{\"add_edge\":{\"name\":\"add_edge\",\"args\":[{\"name\":\"from_node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"from_node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]},{\"name\":\"to_node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"to_node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_edge(from_node: 'ActionNode', to_node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"add_node\":{\"name\":\"add_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_node(node)\",\"aggregations\":[]},\"topological_sort\":{\"name\":\"topological_sort\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"topological_sort()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_graph.py:ActionGraph:edges"}, {"id": "{\"name\":\"edges\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"edges : dict\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_graph.py:ActionGraph:execution_order"}, {"id": "{\"name\":\"execution_order\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"execution_order : list\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_graph.py:ActionGraph:nodes"}, {"id": "{\"name\":\"nodes\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"nodes : dict\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_graph.py:ActionGraph:add_edge"}, {"id": "{\"name\":\"add_edge\",\"args\":[{\"name\":\"from_node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"from_node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]},{\"name\":\"to_node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"to_node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_edge(from_node: 'ActionNode', to_node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_graph.py:ActionGraph:add_node"}, {"id": "{\"name\":\"add_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_node(node)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_graph.py:ActionGraph:topological_sort"}, {"id": "{\"name\":\"topological_sort\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"topological_sort()\",\"aggregations\":[]}"}, {"id": "?:ActionNode"}, {"id": "metagpt/actions/action_node.py"}, {"id": "metagpt/actions/action_node.py:ActionNode"}, {"id": "{\"name\":\"ActionNode\",\"package\":\"metagpt/actions/action_node.py:ActionNode\",\"attributes\":{\"children\":{\"name\":\"children\",\"type_\":\"dict[str,ActionNode]\",\"default_\":\"\",\"description\":\"children : dict[str, 'ActionNode']\",\"compositions\":[\"ActionNode\"]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]},\"example\":{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]},\"expected_type\":{\"name\":\"expected_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"expected_type : Type\",\"compositions\":[\"Type\"]},\"func\":{\"name\":\"func\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"func : Callable\",\"compositions\":[\"Callable\"]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]},\"instruction\":{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]},\"key\":{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key : str\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"nexts\":{\"name\":\"nexts\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nexts : List['ActionNode']\",\"compositions\":[\"ActionNode\"]},\"params\":{\"name\":\"params\",\"type_\":\"Dict[str,Type]\",\"default_\":\"\",\"description\":\"params : Dict[str, Type]\",\"compositions\":[\"Type\"]},\"prevs\":{\"name\":\"prevs\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"prevs : List['ActionNode']\",\"compositions\":[\"ActionNode\"]},\"schema\":{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema : str\",\"compositions\":[]}},\"methods\":{\"add_child\":{\"name\":\"add_child\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_child(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"add_children\":{\"name\":\"add_children\",\"args\":[{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_children(nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]},\"add_next\":{\"name\":\"add_next\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_next(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"add_prev\":{\"name\":\"add_prev\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_prev(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"auto_review\":{\"name\":\"auto_review\",\"args\":[{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_review(template: str): dict[str, str]\",\"aggregations\":[]},\"auto_revise\":{\"name\":\"auto_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]},{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_revise(revise_mode: ReviseMode, template: str): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"compile\":{\"name\":\"compile\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"template\",\"type_\":\"\",\"default_\":\"\",\"description\":\"template\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile(context, schema, mode, template, exclude): str\",\"aggregations\":[]},\"compile_example\":{\"name\":\"compile_example\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_example(schema, mode, tag, exclude): str\",\"aggregations\":[]},\"compile_instruction\":{\"name\":\"compile_instruction\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_instruction(schema, mode, tag, exclude): str\",\"aggregations\":[]},\"compile_to\":{\"name\":\"compile_to\",\"args\":[{\"name\":\"i\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"i: Dict\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"kv_sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kv_sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_to(i: Dict, schema, kv_sep): str\",\"aggregations\":[]},\"create_class\":{\"name\":\"create_class\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]},{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_class(mode: str, class_name: str, exclude)\",\"aggregations\":[]},\"create_model_class\":{\"name\":\"create_model_class\",\"args\":[{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"default_\":\"\",\"description\":\"mapping: Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_model_class(class_name: str, mapping: Dict[str, Tuple[Type, Any]])\",\"aggregations\":[\"Type\"]},\"fill\":{\"name\":\"fill\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"strgy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strgy\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fill(context, llm, schema, mode, strgy, images: Optional[Union[str, list[str]]], timeout, exclude)\",\"aggregations\":[]},\"from_children\":{\"name\":\"from_children\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_children(key, nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]},\"from_pydantic\":{\"name\":\"from_pydantic\",\"args\":[{\"name\":\"model\",\"type_\":\"Type[BaseModel]\",\"default_\":\"\",\"description\":\"model: Type[BaseModel]\",\"compositions\":[\"BaseModel\",\"Type\"]},{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_pydantic(model: Type[BaseModel], key: str)\",\"aggregations\":[\"BaseModel\",\"Type\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key)\",\"aggregations\":[]},\"get_child\":{\"name\":\"get_child\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union['ActionNode',None]\",\"description\":\"Union['ActionNode', None]\",\"compositions\":[\"ActionNode\"]},\"description\":\"get_child(key: str): Union['ActionNode', None]\",\"aggregations\":[\"ActionNode\"]},\"get_mapping\":{\"name\":\"get_mapping\",\"args\":[{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_mapping(mode, exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"human_review\":{\"name\":\"human_review\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_review(): dict[str, str]\",\"aggregations\":[]},\"human_revise\":{\"name\":\"human_revise\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_revise(): dict[str, str]\",\"aggregations\":[]},\"keys\":{\"name\":\"keys\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"keys(mode: str): list\",\"aggregations\":[]},\"review\":{\"name\":\"review\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"review(strgy: str, review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]},\"revise\":{\"name\":\"revise\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"revise(strgy: str, revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"set_context\":{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context)\",\"aggregations\":[]},\"set_llm\":{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm)\",\"aggregations\":[]},\"set_recursive\":{\"name\":\"set_recursive\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_recursive(name, value)\",\"aggregations\":[]},\"simple_fill\":{\"name\":\"simple_fill\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_fill(schema, mode, images: Optional[Union[str, list[str]]], timeout, exclude)\",\"aggregations\":[]},\"simple_review\":{\"name\":\"simple_review\",\"args\":[{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_review(review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]},\"simple_revise\":{\"name\":\"simple_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"simple_revise(revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"tagging\":{\"name\":\"tagging\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"tagging(text, schema, tag): str\",\"aggregations\":[]},\"to_dict\":{\"name\":\"to_dict\",\"args\":[{\"name\":\"format_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format_func\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"to_dict(format_func, mode, exclude): Dict\",\"aggregations\":[]},\"update_instruct_content\":{\"name\":\"update_instruct_content\",\"args\":[{\"name\":\"incre_data\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"incre_data: dict[str, Any]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_instruct_content(incre_data: dict[str, Any])\",\"aggregations\":[]}},\"compositions\":[\"ActionNode\",\"Type\",\"Callable\",\"BaseModel\"],\"aggregations\":[\"ReviseMode\",\"ReviewMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:children"}, {"id": "{\"name\":\"children\",\"type_\":\"dict[str,ActionNode]\",\"default_\":\"\",\"description\":\"children : dict[str, 'ActionNode']\",\"compositions\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:content"}, {"id": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:context"}, {"id": "{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:example"}, {"id": "{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:expected_type"}, {"id": "{\"name\":\"expected_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"expected_type : Type\",\"compositions\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:func"}, {"id": "{\"name\":\"func\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"func : Callable\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:instruct_content"}, {"id": "{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:instruction"}, {"id": "{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:key"}, {"id": "{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:llm"}, {"id": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:nexts"}, {"id": "{\"name\":\"nexts\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nexts : List['ActionNode']\",\"compositions\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:params"}, {"id": "{\"name\":\"params\",\"type_\":\"Dict[str,Type]\",\"default_\":\"\",\"description\":\"params : Dict[str, Type]\",\"compositions\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:prevs"}, {"id": "{\"name\":\"prevs\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"prevs : List['ActionNode']\",\"compositions\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:schema"}, {"id": "{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:add_child"}, {"id": "{\"name\":\"add_child\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_child(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:add_children"}, {"id": "{\"name\":\"add_children\",\"args\":[{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_children(nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:add_next"}, {"id": "{\"name\":\"add_next\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_next(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:add_prev"}, {"id": "{\"name\":\"add_prev\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_prev(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:auto_review"}, {"id": "{\"name\":\"auto_review\",\"args\":[{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_review(template: str): dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:auto_revise"}, {"id": "{\"name\":\"auto_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]},{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_revise(revise_mode: ReviseMode, template: str): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:compile"}, {"id": "{\"name\":\"compile\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"template\",\"type_\":\"\",\"default_\":\"\",\"description\":\"template\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile(context, schema, mode, template, exclude): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:compile_example"}, {"id": "{\"name\":\"compile_example\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_example(schema, mode, tag, exclude): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:compile_instruction"}, {"id": "{\"name\":\"compile_instruction\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_instruction(schema, mode, tag, exclude): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:compile_to"}, {"id": "{\"name\":\"compile_to\",\"args\":[{\"name\":\"i\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"i: Dict\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"kv_sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kv_sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_to(i: Dict, schema, kv_sep): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:create_class"}, {"id": "{\"name\":\"create_class\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]},{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_class(mode: str, class_name: str, exclude)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:create_model_class"}, {"id": "{\"name\":\"create_model_class\",\"args\":[{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"default_\":\"\",\"description\":\"mapping: Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_model_class(class_name: str, mapping: Dict[str, Tuple[Type, Any]])\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:fill"}, {"id": "{\"name\":\"fill\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"strgy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strgy\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fill(context, llm, schema, mode, strgy, images: Optional[Union[str, list[str]]], timeout, exclude)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:from_children"}, {"id": "{\"name\":\"from_children\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_children(key, nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:from_pydantic"}, {"id": "{\"name\":\"from_pydantic\",\"args\":[{\"name\":\"model\",\"type_\":\"Type[BaseModel]\",\"default_\":\"\",\"description\":\"model: Type[BaseModel]\",\"compositions\":[\"BaseModel\",\"Type\"]},{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_pydantic(model: Type[BaseModel], key: str)\",\"aggregations\":[\"BaseModel\",\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:get_child"}, {"id": "{\"name\":\"get_child\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union['ActionNode',None]\",\"description\":\"Union['ActionNode', None]\",\"compositions\":[\"ActionNode\"]},\"description\":\"get_child(key: str): Union['ActionNode', None]\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:get_mapping"}, {"id": "{\"name\":\"get_mapping\",\"args\":[{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_mapping(mode, exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:human_review"}, {"id": "{\"name\":\"human_review\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_review(): dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:human_revise"}, {"id": "{\"name\":\"human_revise\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_revise(): dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:keys"}, {"id": "{\"name\":\"keys\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"keys(mode: str): list\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:review"}, {"id": "{\"name\":\"review\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"review(strgy: str, review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:revise"}, {"id": "{\"name\":\"revise\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"revise(strgy: str, revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:set_context"}, {"id": "{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:set_llm"}, {"id": "{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:set_recursive"}, {"id": "{\"name\":\"set_recursive\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_recursive(name, value)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:simple_fill"}, {"id": "{\"name\":\"simple_fill\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_fill(schema, mode, images: Optional[Union[str, list[str]]], timeout, exclude)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:simple_review"}, {"id": "{\"name\":\"simple_review\",\"args\":[{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_review(review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:simple_revise"}, {"id": "{\"name\":\"simple_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"simple_revise(revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:tagging"}, {"id": "{\"name\":\"tagging\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"tagging(text, schema, tag): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:to_dict"}, {"id": "{\"name\":\"to_dict\",\"args\":[{\"name\":\"format_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format_func\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"to_dict(format_func, mode, exclude): Dict\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:update_instruct_content"}, {"id": "{\"name\":\"update_instruct_content\",\"args\":[{\"name\":\"incre_data\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"incre_data: dict[str, Any]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_instruct_content(incre_data: dict[str, Any])\",\"aggregations\":[]}"}, {"id": "?:Type"}, {"id": "?:Callable"}, {"id": "?:BaseModel"}, {"id": "?:ReviseMode"}, {"id": "?:ReviewMode"}, {"id": "metagpt/actions/action_output.py"}, {"id": "metagpt/actions/action_output.py:ActionOutput"}, {"id": "{\"name\":\"ActionOutput\",\"package\":\"metagpt/actions/action_output.py:ActionOutput\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}},\"methods\":{},\"compositions\":[\"BaseModel\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/action_output.py:ActionOutput:content"}, {"id": "metagpt/actions/action_output.py:ActionOutput:instruct_content"}, {"id": "metagpt/actions"}, {"id": ""}, {"id": "metagpt/actions:ActionType"}, {"id": "{\"name\":\"ActionType\",\"package\":\"metagpt/actions:ActionType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions:ActionType:name"}, {"id": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_env.py"}, {"id": "metagpt/environment/android_env/android_env.py:AndroidEnv"}, {"id": "{\"name\":\"AndroidEnv\",\"package\":\"metagpt/environment/android_env/android_env.py:AndroidEnv\",\"attributes\":{\"cols\":{\"name\":\"cols\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"cols : int\",\"compositions\":[]},\"rows\":{\"name\":\"rows\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"rows : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/environment/android_env/android_env.py:AndroidEnv:cols"}, {"id": "{\"name\":\"cols\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"cols : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_env.py:AndroidEnv:rows"}, {"id": "{\"name\":\"rows\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"rows : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv"}, {"id": "{\"name\":\"AndroidExtEnv\",\"package\":\"metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv\",\"attributes\":{\"adb_prefix\":{\"name\":\"adb_prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix\",\"compositions\":[]},\"adb_prefix_shell\":{\"name\":\"adb_prefix_shell\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix_shell\",\"compositions\":[]},\"adb_prefix_si\":{\"name\":\"adb_prefix_si\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix_si\",\"compositions\":[]},\"device_id\":{\"name\":\"device_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"device_id : Optional[str]\",\"compositions\":[]},\"device_shape\":{\"name\":\"device_shape\",\"type_\":\"\",\"default_\":\"\",\"description\":\"device_shape\",\"compositions\":[]},\"height\":{\"name\":\"height\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"height : int\",\"compositions\":[]},\"screenshot_dir\":{\"name\":\"screenshot_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"screenshot_dir : Optional[Path]\",\"compositions\":[\"Path\"]},\"width\":{\"name\":\"width\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"width : int\",\"compositions\":[]},\"xml_dir\":{\"name\":\"xml_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"xml_dir : Optional[Path]\",\"compositions\":[\"Path\"]}},\"methods\":{\"execute_adb_with_cmd\":{\"name\":\"execute_adb_with_cmd\",\"args\":[{\"name\":\"adb_cmd\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"adb_cmd: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"execute_adb_with_cmd(adb_cmd: str): str\",\"aggregations\":[]},\"get_screenshot\":{\"name\":\"get_screenshot\",\"args\":[{\"name\":\"ss_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ss_name: str\",\"compositions\":[]},{\"name\":\"local_save_dir\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_save_dir: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"get_screenshot(ss_name: str, local_save_dir: Path): Path\",\"aggregations\":[\"Path\"]},\"get_xml\":{\"name\":\"get_xml\",\"args\":[{\"name\":\"xml_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"xml_name: str\",\"compositions\":[]},{\"name\":\"local_save_dir\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_save_dir: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"get_xml(xml_name: str, local_save_dir: Path): Path\",\"aggregations\":[\"Path\"]},\"list_devices\":{\"name\":\"list_devices\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"list_devices()\",\"aggregations\":[]},\"system_back\":{\"name\":\"system_back\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"system_back(): str\",\"aggregations\":[]},\"system_tap\":{\"name\":\"system_tap\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"system_tap(x: int, y: int): str\",\"aggregations\":[]},\"user_input\":{\"name\":\"user_input\",\"args\":[{\"name\":\"input_txt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_txt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_input(input_txt: str): str\",\"aggregations\":[]},\"user_longpress\":{\"name\":\"user_longpress\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]},{\"name\":\"duration\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"duration: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_longpress(x: int, y: int, duration: int): str\",\"aggregations\":[]},\"user_swipe\":{\"name\":\"user_swipe\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]},{\"name\":\"orient\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"orient: str\",\"compositions\":[]},{\"name\":\"dist\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dist: str\",\"compositions\":[]},{\"name\":\"if_quick\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"if_quick: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_swipe(x: int, y: int, orient: str, dist: str, if_quick: bool): str\",\"aggregations\":[]},\"user_swipe_to\":{\"name\":\"user_swipe_to\",\"args\":[{\"name\":\"start\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"start: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"end\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"end: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"duration\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"duration: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"user_swipe_to(start: tuple[int, int], end: tuple[int, int], duration: int)\",\"aggregations\":[\"tuple\"]}},\"compositions\":[\"Path\"],\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix"}, {"id": "{\"name\":\"adb_prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_shell"}, {"id": "{\"name\":\"adb_prefix_shell\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix_shell\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_si"}, {"id": "{\"name\":\"adb_prefix_si\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix_si\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:device_id"}, {"id": "{\"name\":\"device_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"device_id : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:device_shape"}, {"id": "{\"name\":\"device_shape\",\"type_\":\"\",\"default_\":\"\",\"description\":\"device_shape\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:height"}, {"id": "{\"name\":\"height\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"height : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:screenshot_dir"}, {"id": "{\"name\":\"screenshot_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"screenshot_dir : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:width"}, {"id": "{\"name\":\"width\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"width : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:xml_dir"}, {"id": "{\"name\":\"xml_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"xml_dir : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:execute_adb_with_cmd"}, {"id": "{\"name\":\"execute_adb_with_cmd\",\"args\":[{\"name\":\"adb_cmd\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"adb_cmd: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"execute_adb_with_cmd(adb_cmd: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:get_screenshot"}, {"id": "{\"name\":\"get_screenshot\",\"args\":[{\"name\":\"ss_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ss_name: str\",\"compositions\":[]},{\"name\":\"local_save_dir\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_save_dir: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"get_screenshot(ss_name: str, local_save_dir: Path): Path\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:get_xml"}, {"id": "{\"name\":\"get_xml\",\"args\":[{\"name\":\"xml_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"xml_name: str\",\"compositions\":[]},{\"name\":\"local_save_dir\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_save_dir: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"get_xml(xml_name: str, local_save_dir: Path): Path\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:list_devices"}, {"id": "{\"name\":\"list_devices\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"list_devices()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:system_back"}, {"id": "{\"name\":\"system_back\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"system_back(): str\",\"aggregations\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:system_tap"}, {"id": "{\"name\":\"system_tap\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"system_tap(x: int, y: int): str\",\"aggregations\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_input"}, {"id": "{\"name\":\"user_input\",\"args\":[{\"name\":\"input_txt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_txt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_input(input_txt: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_longpress"}, {"id": "{\"name\":\"user_longpress\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]},{\"name\":\"duration\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"duration: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_longpress(x: int, y: int, duration: int): str\",\"aggregations\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_swipe"}, {"id": "{\"name\":\"user_swipe\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]},{\"name\":\"orient\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"orient: str\",\"compositions\":[]},{\"name\":\"dist\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dist: str\",\"compositions\":[]},{\"name\":\"if_quick\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"if_quick: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_swipe(x: int, y: int, orient: str, dist: str, if_quick: bool): str\",\"aggregations\":[]}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_swipe_to"}, {"id": "{\"name\":\"user_swipe_to\",\"args\":[{\"name\":\"start\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"start: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"end\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"end: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"duration\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"duration: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"user_swipe_to(start: tuple[int, int], end: tuple[int, int], duration: int)\",\"aggregations\":[\"tuple\"]}"}, {"id": "?:Path"}, {"id": "?:tuple"}, {"id": "metagpt/provider/general_api_base.py:ApiType"}, {"id": "{\"name\":\"ApiType\",\"package\":\"metagpt/provider/general_api_base.py:ApiType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"from_str\":{\"name\":\"from_str\",\"args\":[{\"name\":\"label\",\"type_\":\"\",\"default_\":\"\",\"description\":\"label\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_str(label)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/general_api_base.py:ApiType:name"}, {"id": "metagpt/provider/general_api_base.py:ApiType:from_str"}, {"id": "{\"name\":\"from_str\",\"args\":[{\"name\":\"label\",\"type_\":\"\",\"default_\":\"\",\"description\":\"label\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_str(label)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/architect.py"}, {"id": "metagpt/roles/architect.py:Architect"}, {"id": "{\"name\":\"Architect\",\"package\":\"metagpt/roles/architect.py:Architect\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/architect.py:Architect:constraints"}, {"id": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/architect.py:Architect:goal"}, {"id": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/architect.py:Architect:name"}, {"id": "metagpt/roles/architect.py:Architect:profile"}, {"id": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction"}, {"id": "{\"name\":\"ArgumentsParingAction\",\"package\":\"metagpt/actions/skill_action.py:ArgumentsParingAction\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"Optional[Dict]\",\"default_\":\"\",\"description\":\"args : Optional[Dict]\",\"compositions\":[]},\"ask\":{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]},\"prompt\":{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]},\"skill\":{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}},\"methods\":{\"parse_arguments\":{\"name\":\"parse_arguments\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill_name\",\"compositions\":[]},{\"name\":\"txt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"txt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"parse_arguments(skill_name, txt): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:args"}, {"id": "{\"name\":\"args\",\"type_\":\"Optional[Dict]\",\"default_\":\"\",\"description\":\"args : Optional[Dict]\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:ask"}, {"id": "{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt"}, {"id": "{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp"}, {"id": "{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill"}, {"id": "{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:parse_arguments"}, {"id": "{\"name\":\"parse_arguments\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill_name\",\"compositions\":[]},{\"name\":\"txt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"txt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"parse_arguments(skill_name, txt): dict\",\"aggregations\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}"}, {"id": "?:Message"}, {"id": "metagpt/roles/assistant.py"}, {"id": "metagpt/roles/assistant.py:Assistant"}, {"id": "{\"name\":\"Assistant\",\"package\":\"metagpt/roles/assistant.py:Assistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"Optional[SkillsDeclaration]\",\"default_\":\"\",\"description\":\"skills : Optional[SkillsDeclaration]\",\"compositions\":[\"SkillsDeclaration\"]}},\"methods\":{\"act\":{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"act(): Message\",\"aggregations\":[\"Message\"]},\"get_memory\":{\"name\":\"get_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_memory(): str\",\"aggregations\":[]},\"load_memory\":{\"name\":\"load_memory\",\"args\":[{\"name\":\"m\",\"type_\":\"\",\"default_\":\"\",\"description\":\"m\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_memory(m)\",\"aggregations\":[]},\"refine_memory\":{\"name\":\"refine_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"refine_memory(): str\",\"aggregations\":[]},\"skill_handler\":{\"name\":\"skill_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"skill_handler(text): bool\",\"aggregations\":[]},\"talk\":{\"name\":\"talk\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"talk(text)\",\"aggregations\":[]},\"talk_handler\":{\"name\":\"talk_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"talk_handler(text): bool\",\"aggregations\":[]},\"think\":{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"think(): bool\",\"aggregations\":[]}},\"compositions\":[\"SkillsDeclaration\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/assistant.py:Assistant:constraints"}, {"id": "metagpt/roles/assistant.py:Assistant:desc"}, {"id": "metagpt/roles/assistant.py:Assistant:goal"}, {"id": "metagpt/roles/assistant.py:Assistant:memory"}, {"id": "{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:name"}, {"id": "metagpt/roles/assistant.py:Assistant:profile"}, {"id": "metagpt/roles/assistant.py:Assistant:skills"}, {"id": "{\"name\":\"skills\",\"type_\":\"Optional[SkillsDeclaration]\",\"default_\":\"\",\"description\":\"skills : Optional[SkillsDeclaration]\",\"compositions\":[\"SkillsDeclaration\"]}"}, {"id": "metagpt/roles/assistant.py:Assistant:act"}, {"id": "{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"act(): Message\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/assistant.py:Assistant:get_memory"}, {"id": "{\"name\":\"get_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_memory(): str\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:load_memory"}, {"id": "{\"name\":\"load_memory\",\"args\":[{\"name\":\"m\",\"type_\":\"\",\"default_\":\"\",\"description\":\"m\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_memory(m)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:refine_memory"}, {"id": "{\"name\":\"refine_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"refine_memory(): str\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:skill_handler"}, {"id": "{\"name\":\"skill_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"skill_handler(text): bool\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:talk"}, {"id": "{\"name\":\"talk\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"talk(text)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:talk_handler"}, {"id": "{\"name\":\"talk_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"talk_handler(text): bool\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:think"}, {"id": "{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"think(): bool\",\"aggregations\":[]}"}, {"id": "?:SkillsDeclaration"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient"}, {"id": "{\"name\":\"AsyncSSEClient\",\"package\":\"metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient\",\"attributes\":{},\"methods\":{\"stream\":{\"name\":\"stream\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"stream(): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:stream"}, {"id": "{\"name\":\"stream\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"stream(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/context.py"}, {"id": "metagpt/context.py:AttrDict"}, {"id": "{\"name\":\"AttrDict\",\"package\":\"metagpt/context.py:AttrDict\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"default\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"default: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key, default: Any)\",\"aggregations\":[]},\"remove\":{\"name\":\"remove\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove(key)\",\"aggregations\":[]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"val\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"val: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key, val: Any)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/context.py:AttrDict:model_config"}, {"id": "metagpt/context.py:AttrDict:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"default\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"default: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key, default: Any)\",\"aggregations\":[]}"}, {"id": "metagpt/context.py:AttrDict:remove"}, {"id": "{\"name\":\"remove\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove(key)\",\"aggregations\":[]}"}, {"id": "metagpt/context.py:AttrDict:set"}, {"id": "{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"val\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"val: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key, val: Any)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py"}, {"id": "metagpt/tools/iflytek_tts.py:AudioData"}, {"id": "{\"name\":\"AudioData\",\"package\":\"metagpt/tools/iflytek_tts.py:AudioData\",\"attributes\":{\"audio\":{\"name\":\"audio\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"audio : str\",\"compositions\":[]},\"ced\":{\"name\":\"ced\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ced : str\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"status : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:AudioData:audio"}, {"id": "{\"name\":\"audio\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"audio : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:AudioData:ced"}, {"id": "{\"name\":\"ced\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ced : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:AudioData:status"}, {"id": "{\"name\":\"status\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"status : int\",\"compositions\":[]}"}, {"id": "metagpt/provider/azure_openai_api.py"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM"}, {"id": "{\"name\":\"AzureOpenAILLM\",\"package\":\"metagpt/provider/azure_openai_api.py:AzureOpenAILLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"AsyncAzureOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncAzureOpenAI\",\"compositions\":[\"AsyncAzureOpenAI\"]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"AsyncAzureOpenAI\"],\"aggregations\":[]}"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:aclient"}, {"id": "{\"name\":\"aclient\",\"type_\":\"AsyncAzureOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncAzureOpenAI\",\"compositions\":[\"AsyncAzureOpenAI\"]}"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:model"}, {"id": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:pricing_plan"}, {"id": "{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}"}, {"id": "?:AsyncAzureOpenAI"}, {"id": "metagpt/tools/azure_tts.py"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS"}, {"id": "{\"name\":\"AzureTTS\",\"package\":\"metagpt/tools/azure_tts.py:AzureTTS\",\"attributes\":{\"region\":{\"name\":\"region\",\"type_\":\"\",\"default_\":\"\",\"description\":\"region\",\"compositions\":[]},\"subscription_key\":{\"name\":\"subscription_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subscription_key\",\"compositions\":[]}},\"methods\":{\"role_style_text\":{\"name\":\"role_style_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_style_text(role, style, text)\",\"aggregations\":[]},\"role_text\":{\"name\":\"role_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_text(role, text)\",\"aggregations\":[]},\"style_text\":{\"name\":\"style_text\",\"args\":[{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"style_text(style, text)\",\"aggregations\":[]},\"synthesize_speech\":{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_file\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(lang, voice, text, output_file)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:region"}, {"id": "{\"name\":\"region\",\"type_\":\"\",\"default_\":\"\",\"description\":\"region\",\"compositions\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:subscription_key"}, {"id": "{\"name\":\"subscription_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subscription_key\",\"compositions\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:role_style_text"}, {"id": "{\"name\":\"role_style_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_style_text(role, style, text)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:role_text"}, {"id": "{\"name\":\"role_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_text(role, text)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:style_text"}, {"id": "{\"name\":\"style_text\",\"args\":[{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"style_text(style, text)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:synthesize_speech"}, {"id": "{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_file\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(lang, voice, text, output_file)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py"}, {"id": "metagpt/tools/prompt_writer.py:BEAGECTemplate"}, {"id": "{\"name\":\"BEAGECTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:BEAGECTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:BEAGECTemplate:gen"}, {"id": "{\"name\":\"gen\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen()\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py"}, {"id": "metagpt/strategy/tot.py:BFSSolver"}, {"id": "{\"name\":\"BFSSolver\",\"package\":\"metagpt/strategy/tot.py:BFSSolver\",\"attributes\":{\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}},\"methods\":{\"generate_and_evaluate_nodes\":{\"name\":\"generate_and_evaluate_nodes\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_value\",\"compositions\":[]},{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_and_evaluate_nodes(current_state, current_value, node)\",\"aggregations\":[]},\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:BFSSolver:thought_tree"}, {"id": "{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot.py:BFSSolver:generate_and_evaluate_nodes"}, {"id": "{\"name\":\"generate_and_evaluate_nodes\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_value\",\"compositions\":[]},{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_and_evaluate_nodes(current_state, current_value, node)\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:BFSSolver:solve"}, {"id": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:BaseContext"}, {"id": "{\"name\":\"BaseContext\",\"package\":\"metagpt/schema.py:BaseContext\",\"attributes\":{},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[T]\",\"description\":\"Optional[T]\",\"compositions\":[\"T\"]},\"description\":\"loads(val: str): Optional[T]\",\"aggregations\":[\"T\"]}},\"compositions\":[],\"aggregations\":[\"T\"]}"}, {"id": "metagpt/schema.py:BaseContext:loads"}, {"id": "{\"name\":\"loads\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[T]\",\"description\":\"Optional[T]\",\"compositions\":[\"T\"]},\"description\":\"loads(val: str): Optional[T]\",\"aggregations\":[\"T\"]}"}, {"id": "?:T"}, {"id": "metagpt/strategy/base.py"}, {"id": "metagpt/strategy/base.py:BaseEvaluator"}, {"id": "{\"name\":\"BaseEvaluator\",\"package\":\"metagpt/strategy/base.py:BaseEvaluator\",\"attributes\":{},\"methods\":{\"status_verify\":{\"name\":\"status_verify\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"status_verify()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:BaseEvaluator:status_verify"}, {"id": "{\"name\":\"status_verify\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"status_verify()\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py"}, {"id": "metagpt/provider/base_llm.py:BaseLLM"}, {"id": "{\"name\":\"BaseLLM\",\"package\":\"metagpt/provider/base_llm.py:BaseLLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"Optional[Union[AsyncOpenAI]]\",\"default_\":\"\",\"description\":\"aclient : Optional[Union[AsyncOpenAI]]\",\"compositions\":[\"AsyncOpenAI\"]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"model\":{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"pricing_plan : Optional[str]\",\"compositions\":[]},\"system_prompt\":{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], images: Optional[Union[str, list[str]]], timeout, stream): str\",\"aggregations\":[]},\"aask_batch\":{\"name\":\"aask_batch\",\"args\":[{\"name\":\"msgs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"msgs: list\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask_batch(msgs: list, timeout): str\",\"aggregations\":[]},\"aask_code\":{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]], timeout): dict\",\"aggregations\":[\"Message\"]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"get_choice_delta_text\":{\"name\":\"get_choice_delta_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_delta_text(rsp: dict): str\",\"aggregations\":[]},\"get_choice_function\":{\"name\":\"get_choice_function\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function(rsp: dict): dict\",\"aggregations\":[]},\"get_choice_function_arguments\":{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: dict): dict\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]},\"messages_to_dict\":{\"name\":\"messages_to_dict\",\"args\":[{\"name\":\"messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"messages_to_dict(messages)\",\"aggregations\":[]},\"messages_to_prompt\":{\"name\":\"messages_to_prompt\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"messages_to_prompt(messages: list[dict])\",\"aggregations\":[]}},\"compositions\":[\"AsyncOpenAI\",\"CostManager\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:aclient"}, {"id": "{\"name\":\"aclient\",\"type_\":\"Optional[Union[AsyncOpenAI]]\",\"default_\":\"\",\"description\":\"aclient : Optional[Union[AsyncOpenAI]]\",\"compositions\":[\"AsyncOpenAI\"]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:config"}, {"id": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:cost_manager"}, {"id": "{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:model"}, {"id": "{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:pricing_plan"}, {"id": "{\"name\":\"pricing_plan\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"pricing_plan : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:system_prompt"}, {"id": "{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:use_system_prompt"}, {"id": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:aask"}, {"id": "{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], images: Optional[Union[str, list[str]]], timeout, stream): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:aask_batch"}, {"id": "{\"name\":\"aask_batch\",\"args\":[{\"name\":\"msgs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"msgs: list\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask_batch(msgs: list, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:aask_code"}, {"id": "{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]], timeout): dict\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:acompletion"}, {"id": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:acompletion_text"}, {"id": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:get_choice_delta_text"}, {"id": "{\"name\":\"get_choice_delta_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_delta_text(rsp: dict): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function"}, {"id": "{\"name\":\"get_choice_function\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function(rsp: dict): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function_arguments"}, {"id": "{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: dict): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:get_choice_text"}, {"id": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:messages_to_dict"}, {"id": "{\"name\":\"messages_to_dict\",\"args\":[{\"name\":\"messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"messages_to_dict(messages)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:messages_to_prompt"}, {"id": "{\"name\":\"messages_to_prompt\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"messages_to_prompt(messages: list[dict])\",\"aggregations\":[]}"}, {"id": "?:AsyncOpenAI"}, {"id": "?:CostManager"}, {"id": "metagpt/strategy/base.py:BaseParser"}, {"id": "{\"name\":\"BaseParser\",\"package\":\"metagpt/strategy/base.py:BaseParser\",\"attributes\":{},\"methods\":{\"propose\":{\"name\":\"propose\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"propose(current_state: str): str\",\"aggregations\":[]},\"sample\":{\"name\":\"sample\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"sample(current_state: str): str\",\"aggregations\":[]},\"value\":{\"name\":\"value\",\"args\":[{\"name\":\"input\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"value(input: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:BaseParser:propose"}, {"id": "{\"name\":\"propose\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"propose(current_state: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:BaseParser:sample"}, {"id": "{\"name\":\"sample\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"sample(current_state: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:BaseParser:value"}, {"id": "{\"name\":\"value\",\"args\":[{\"name\":\"input\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"value(input: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin"}, {"id": "{\"name\":\"BasePostProcessPlugin\",\"package\":\"metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin\",\"attributes\":{\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]},\"run_extract_content_from_output\":{\"name\":\"run_extract_content_from_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"right_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"right_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_extract_content_from_output(content: str, right_key: str): str\",\"aggregations\":[]},\"run_repair_llm_output\":{\"name\":\"run_repair_llm_output\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_repair_llm_output(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]},\"run_repair_llm_raw_output\":{\"name\":\"run_repair_llm_raw_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"req_keys\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"req_keys: list[str]\",\"compositions\":[]},{\"name\":\"repair_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"repair_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_repair_llm_raw_output(content: str, req_keys: list[str], repair_type: str): str\",\"aggregations\":[]},\"run_retry_parse_json_text\":{\"name\":\"run_retry_parse_json_text\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_retry_parse_json_text(content: str): Union[dict, list]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:model"}, {"id": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_extract_content_from_output"}, {"id": "{\"name\":\"run_extract_content_from_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"right_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"right_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_extract_content_from_output(content: str, right_key: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_output"}, {"id": "{\"name\":\"run_repair_llm_output\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_repair_llm_output(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_raw_output"}, {"id": "{\"name\":\"run_repair_llm_raw_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"req_keys\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"req_keys: list[str]\",\"compositions\":[]},{\"name\":\"repair_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"repair_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_repair_llm_raw_output(content: str, req_keys: list[str], repair_type: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_retry_parse_json_text"}, {"id": "{\"name\":\"run_retry_parse_json_text\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_retry_parse_json_text(content: str): Union[dict, list]\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py"}, {"id": "metagpt/strategy/solver.py:BaseSolver"}, {"id": "{\"name\":\"BaseSolver\",\"package\":\"metagpt/strategy/solver.py:BaseSolver\",\"attributes\":{\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"graph\":{\"name\":\"graph\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"search_space\":{\"name\":\"search_space\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_space\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:BaseSolver:context"}, {"id": "{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}"}, {"id": "metagpt/strategy/solver.py:BaseSolver:graph"}, {"id": "{\"name\":\"graph\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph\",\"compositions\":[]}"}, {"id": "metagpt/strategy/solver.py:BaseSolver:llm"}, {"id": "metagpt/strategy/solver.py:BaseSolver:search_space"}, {"id": "{\"name\":\"search_space\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_space\",\"compositions\":[]}"}, {"id": "metagpt/strategy/solver.py:BaseSolver:solve"}, {"id": "{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py"}, {"id": "metagpt/document_store/base_store.py:BaseStore"}, {"id": "{\"name\":\"BaseStore\",\"package\":\"metagpt/document_store/base_store.py:BaseStore\",\"attributes\":{},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search()\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py:BaseStore:add"}, {"id": "{\"name\":\"add\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py:BaseStore:search"}, {"id": "{\"name\":\"search\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py:BaseStore:write"}, {"id": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory"}, {"id": "{\"name\":\"BrainMemory\",\"package\":\"metagpt/memory/brain_memory.py:BrainMemory\",\"attributes\":{\"cacheable\":{\"name\":\"cacheable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"cacheable : bool\",\"compositions\":[]},\"historical_summary\":{\"name\":\"historical_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"historical_summary : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"history : List[Message]\",\"compositions\":[\"Message\"]},\"history_text\":{\"name\":\"history_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_text\",\"compositions\":[]},\"is_dirty\":{\"name\":\"is_dirty\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_dirty : bool\",\"compositions\":[]},\"is_history_available\":{\"name\":\"is_history_available\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_history_available\",\"compositions\":[]},\"knowledge\":{\"name\":\"knowledge\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"knowledge : List[Message]\",\"compositions\":[\"Message\"]},\"last_history_id\":{\"name\":\"last_history_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"last_history_id : str\",\"compositions\":[]},\"last_talk\":{\"name\":\"last_talk\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"last_talk : Optional[str]\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}},\"methods\":{\"add_answer\":{\"name\":\"add_answer\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_answer(msg: Message)\",\"aggregations\":[\"Message\"]},\"add_history\":{\"name\":\"add_history\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_history(msg: Message)\",\"aggregations\":[\"Message\"]},\"add_talk\":{\"name\":\"add_talk\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_talk(msg: Message)\",\"aggregations\":[\"Message\"]},\"dumps\":{\"name\":\"dumps\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"dumps(redis_key: str, timeout_sec: int)\",\"aggregations\":[]},\"exists\":{\"name\":\"exists\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"exists(text): bool\",\"aggregations\":[]},\"extract_info\":{\"name\":\"extract_info\",\"args\":[{\"name\":\"input_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"input_string\",\"compositions\":[]},{\"name\":\"pattern\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pattern\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_info(input_string, pattern)\",\"aggregations\":[]},\"get_knowledge\":{\"name\":\"get_knowledge\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_knowledge(): str\",\"aggregations\":[]},\"get_title\":{\"name\":\"get_title\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_title(llm, max_words): str\",\"aggregations\":[]},\"is_related\":{\"name\":\"is_related\",\"args\":[{\"name\":\"text1\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text1\",\"compositions\":[]},{\"name\":\"text2\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text2\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_related(text1, text2, llm)\",\"aggregations\":[]},\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'BrainMemory'\",\"description\":\"'BrainMemory'\",\"compositions\":[\"BrainMemory\"]},\"description\":\"loads(redis_key: str): 'BrainMemory'\",\"aggregations\":[\"BrainMemory\"]},\"pop_last_talk\":{\"name\":\"pop_last_talk\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pop_last_talk()\",\"aggregations\":[]},\"rewrite\":{\"name\":\"rewrite\",\"args\":[{\"name\":\"sentence\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sentence: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rewrite(sentence: str, context: str, llm)\",\"aggregations\":[]},\"set_history_summary\":{\"name\":\"set_history_summary\",\"args\":[{\"name\":\"history_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_summary\",\"compositions\":[]},{\"name\":\"redis_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"redis_key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_history_summary(history_summary, redis_key)\",\"aggregations\":[]},\"split_texts\":{\"name\":\"split_texts\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"window_size\",\"type_\":\"\",\"default_\":\"\",\"description\":\"window_size\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"split_texts(text: str, window_size): List[str]\",\"aggregations\":[]},\"summarize\":{\"name\":\"summarize\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]},{\"name\":\"keep_language\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"keep_language: bool\",\"compositions\":[]},{\"name\":\"limit\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"limit: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize(llm, max_words, keep_language: bool, limit: int)\",\"aggregations\":[]},\"to_int\":{\"name\":\"to_int\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"default_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"default_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_int(v, default_value)\",\"aggregations\":[]},\"to_metagpt_history_format\":{\"name\":\"to_metagpt_history_format\",\"args\":[{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"to_metagpt_history_format(history): str\",\"aggregations\":[]},\"to_redis_key\":{\"name\":\"to_redis_key\",\"args\":[{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix: str\",\"compositions\":[]},{\"name\":\"user_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"user_id: str\",\"compositions\":[]},{\"name\":\"chat_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chat_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_redis_key(prefix: str, user_id: str, chat_id: str)\",\"aggregations\":[]}},\"compositions\":[\"Message\",\"BaseLLM\"],\"aggregations\":[\"BrainMemory\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:cacheable"}, {"id": "{\"name\":\"cacheable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"cacheable : bool\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:historical_summary"}, {"id": "{\"name\":\"historical_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"historical_summary : str\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:history"}, {"id": "{\"name\":\"history\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"history : List[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:history_text"}, {"id": "{\"name\":\"history_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_text\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:is_dirty"}, {"id": "{\"name\":\"is_dirty\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_dirty : bool\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available"}, {"id": "{\"name\":\"is_history_available\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_history_available\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:knowledge"}, {"id": "{\"name\":\"knowledge\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"knowledge : List[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:last_history_id"}, {"id": "{\"name\":\"last_history_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"last_history_id : str\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:last_talk"}, {"id": "{\"name\":\"last_talk\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"last_talk : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:llm"}, {"id": "{\"name\":\"llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:add_answer"}, {"id": "{\"name\":\"add_answer\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_answer(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:add_history"}, {"id": "{\"name\":\"add_history\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_history(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:add_talk"}, {"id": "{\"name\":\"add_talk\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_talk(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:dumps"}, {"id": "{\"name\":\"dumps\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"dumps(redis_key: str, timeout_sec: int)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:exists"}, {"id": "{\"name\":\"exists\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"exists(text): bool\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:extract_info"}, {"id": "{\"name\":\"extract_info\",\"args\":[{\"name\":\"input_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"input_string\",\"compositions\":[]},{\"name\":\"pattern\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pattern\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_info(input_string, pattern)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:get_knowledge"}, {"id": "{\"name\":\"get_knowledge\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_knowledge(): str\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:get_title"}, {"id": "{\"name\":\"get_title\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_title(llm, max_words): str\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:is_related"}, {"id": "{\"name\":\"is_related\",\"args\":[{\"name\":\"text1\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text1\",\"compositions\":[]},{\"name\":\"text2\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text2\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_related(text1, text2, llm)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:loads"}, {"id": "{\"name\":\"loads\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'BrainMemory'\",\"description\":\"'BrainMemory'\",\"compositions\":[\"BrainMemory\"]},\"description\":\"loads(redis_key: str): 'BrainMemory'\",\"aggregations\":[\"BrainMemory\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:pop_last_talk"}, {"id": "{\"name\":\"pop_last_talk\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pop_last_talk()\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:rewrite"}, {"id": "{\"name\":\"rewrite\",\"args\":[{\"name\":\"sentence\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sentence: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rewrite(sentence: str, context: str, llm)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:set_history_summary"}, {"id": "{\"name\":\"set_history_summary\",\"args\":[{\"name\":\"history_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_summary\",\"compositions\":[]},{\"name\":\"redis_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"redis_key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_history_summary(history_summary, redis_key)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:split_texts"}, {"id": "{\"name\":\"split_texts\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"window_size\",\"type_\":\"\",\"default_\":\"\",\"description\":\"window_size\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"split_texts(text: str, window_size): List[str]\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:summarize"}, {"id": "{\"name\":\"summarize\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]},{\"name\":\"keep_language\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"keep_language: bool\",\"compositions\":[]},{\"name\":\"limit\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"limit: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize(llm, max_words, keep_language: bool, limit: int)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:to_int"}, {"id": "{\"name\":\"to_int\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"default_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"default_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_int(v, default_value)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:to_metagpt_history_format"}, {"id": "{\"name\":\"to_metagpt_history_format\",\"args\":[{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"to_metagpt_history_format(history): str\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:to_redis_key"}, {"id": "{\"name\":\"to_redis_key\",\"args\":[{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix: str\",\"compositions\":[]},{\"name\":\"user_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"user_id: str\",\"compositions\":[]},{\"name\":\"chat_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chat_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_redis_key(prefix: str, user_id: str, chat_id: str)\",\"aggregations\":[]}"}, {"id": "?:BaseLLM"}, {"id": "?:BrainMemory"}, {"id": "metagpt/configs/browser_config.py"}, {"id": "metagpt/configs/browser_config.py:BrowserConfig"}, {"id": "{\"name\":\"BrowserConfig\",\"package\":\"metagpt/configs/browser_config.py:BrowserConfig\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit','chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit', 'chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/browser_config.py:BrowserConfig:browser_type"}, {"id": "{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit','chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit', 'chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]}"}, {"id": "metagpt/configs/browser_config.py:BrowserConfig:engine"}, {"id": "{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:BugFixContext"}, {"id": "{\"name\":\"BugFixContext\",\"package\":\"metagpt/schema.py:BugFixContext\",\"attributes\":{\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:BugFixContext:filename"}, {"id": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py"}, {"id": "metagpt/config2.py:CLIParams"}, {"id": "{\"name\":\"CLIParams\",\"package\":\"metagpt/config2.py:CLIParams\",\"attributes\":{\"git_reinit\":{\"name\":\"git_reinit\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"git_reinit : bool\",\"compositions\":[]},\"inc\":{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]},\"max_auto_summarize_code\":{\"name\":\"max_auto_summarize_code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_auto_summarize_code : int\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_path : str\",\"compositions\":[]},\"reqa_file\":{\"name\":\"reqa_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reqa_file : str\",\"compositions\":[]}},\"methods\":{\"check_project_path\":{\"name\":\"check_project_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_project_path()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/config2.py:CLIParams:git_reinit"}, {"id": "{\"name\":\"git_reinit\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"git_reinit : bool\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:inc"}, {"id": "{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:max_auto_summarize_code"}, {"id": "{\"name\":\"max_auto_summarize_code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_auto_summarize_code : int\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:project_name"}, {"id": "{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:project_path"}, {"id": "{\"name\":\"project_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_path : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:reqa_file"}, {"id": "{\"name\":\"reqa_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reqa_file : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:check_project_path"}, {"id": "{\"name\":\"check_project_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_project_path()\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:COTSolver"}, {"id": "{\"name\":\"COTSolver\",\"package\":\"metagpt/strategy/solver.py:COTSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:COTSolver:solve"}, {"id": "metagpt/tools/libs/feature_engineering.py"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCount"}, {"id": "{\"name\":\"CatCount\",\"package\":\"metagpt/tools/libs/feature_engineering.py:CatCount\",\"attributes\":{\"col\":{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]},\"encoder_dict\":{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCount:col"}, {"id": "{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCount:encoder_dict"}, {"id": "{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCount:fit"}, {"id": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCount:transform"}, {"id": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "?:pd.DataFrame"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCross"}, {"id": "{\"name\":\"CatCross\",\"package\":\"metagpt/tools/libs/feature_engineering.py:CatCross\",\"attributes\":{\"cols\":{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]},\"combs\":{\"name\":\"combs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"combs : list\",\"compositions\":[]},\"combs_map\":{\"name\":\"combs_map\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"combs_map : dict\",\"compositions\":[]},\"max_cat_num\":{\"name\":\"max_cat_num\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_cat_num : int\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCross:cols"}, {"id": "{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCross:combs"}, {"id": "{\"name\":\"combs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"combs : list\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCross:combs_map"}, {"id": "{\"name\":\"combs_map\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"combs_map : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCross:max_cat_num"}, {"id": "{\"name\":\"max_cat_num\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_cat_num : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCross:fit"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCross:transform"}, {"id": "metagpt/utils/git_repository.py"}, {"id": "metagpt/utils/git_repository.py:ChangeType"}, {"id": "{\"name\":\"ChangeType\",\"package\":\"metagpt/utils/git_repository.py:ChangeType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:ChangeType:name"}, {"id": "metagpt/document_store/chromadb_store.py"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore"}, {"id": "{\"name\":\"ChromaStore\",\"package\":\"metagpt/document_store/chromadb_store.py:ChromaStore\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]},\"collection\":{\"name\":\"collection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"collection\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"document\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(document, metadata, _id)\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metadata_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata_filter\",\"compositions\":[]},{\"name\":\"document_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document_filter\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metadata_filter, document_filter)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"documents\",\"type_\":\"\",\"default_\":\"\",\"description\":\"documents\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(documents, metadatas, ids)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:client"}, {"id": "{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:collection"}, {"id": "{\"name\":\"collection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"collection\",\"compositions\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"document\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(document, metadata, _id)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:persist"}, {"id": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metadata_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata_filter\",\"compositions\":[]},{\"name\":\"document_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document_filter\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metadata_filter, document_filter)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:write"}, {"id": "{\"name\":\"write\",\"args\":[{\"name\":\"documents\",\"type_\":\"\",\"default_\":\"\",\"description\":\"documents\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(documents, metadatas, ids)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/anthropic_api.py"}, {"id": "metagpt/provider/anthropic_api.py:Claude2"}, {"id": "{\"name\":\"Claude2\",\"package\":\"metagpt/provider/anthropic_api.py:Claude2\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(prompt: str): str\",\"aggregations\":[]},\"ask\":{\"name\":\"ask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(prompt: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/anthropic_api.py:Claude2:config"}, {"id": "metagpt/provider/anthropic_api.py:Claude2:aask"}, {"id": "{\"name\":\"aask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(prompt: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/anthropic_api.py:Claude2:ask"}, {"id": "{\"name\":\"ask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(prompt: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo"}, {"id": "{\"name\":\"CodeBlockInfo\",\"package\":\"metagpt/repo_parser.py:CodeBlockInfo\",\"attributes\":{\"end_lineno\":{\"name\":\"end_lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"end_lineno : int\",\"compositions\":[]},\"lineno\":{\"name\":\"lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"lineno : int\",\"compositions\":[]},\"properties\":{\"name\":\"properties\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"properties : Dict\",\"compositions\":[]},\"tokens\":{\"name\":\"tokens\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"tokens : List\",\"compositions\":[]},\"type_name\":{\"name\":\"type_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:end_lineno"}, {"id": "{\"name\":\"end_lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"end_lineno : int\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:lineno"}, {"id": "{\"name\":\"lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"lineno : int\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:properties"}, {"id": "{\"name\":\"properties\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"properties : Dict\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:tokens"}, {"id": "{\"name\":\"tokens\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"tokens : List\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:type_name"}, {"id": "{\"name\":\"type_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_name : str\",\"compositions\":[]}"}, {"id": "metagpt/strategy/solver.py:CodeInterpreterSolver"}, {"id": "{\"name\":\"CodeInterpreterSolver\",\"package\":\"metagpt/strategy/solver.py:CodeInterpreterSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:CodeInterpreterSolver:solve"}, {"id": "metagpt/utils/common.py"}, {"id": "metagpt/utils/common.py:CodeParser"}, {"id": "{\"name\":\"CodeParser\",\"package\":\"metagpt/utils/common.py:CodeParser\",\"attributes\":{},\"methods\":{\"parse_block\":{\"name\":\"parse_block\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_block(block: str, text: str): str\",\"aggregations\":[]},\"parse_blocks\":{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]},\"parse_code\":{\"name\":\"parse_code\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(block: str, text: str, lang: str): str\",\"aggregations\":[]},\"parse_file_list\":{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(block: str, text: str, lang: str): list[str]\",\"aggregations\":[]},\"parse_str\":{\"name\":\"parse_str\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(block: str, text: str, lang: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_block"}, {"id": "{\"name\":\"parse_block\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_block(block: str, text: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_blocks"}, {"id": "{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_code"}, {"id": "{\"name\":\"parse_code\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(block: str, text: str, lang: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_file_list"}, {"id": "{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(block: str, text: str, lang: str): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_str"}, {"id": "{\"name\":\"parse_str\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(block: str, text: str, lang: str)\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext"}, {"id": "{\"name\":\"CodePlanAndChangeContext\",\"package\":\"metagpt/schema.py:CodePlanAndChangeContext\",\"attributes\":{\"design_filename\":{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]},\"prd_filename\":{\"name\":\"prd_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_filename : str\",\"compositions\":[]},\"requirement\":{\"name\":\"requirement\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"requirement : str\",\"compositions\":[]},\"task_filename\":{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodePlanAndChangeContext\",\"description\":\"CodePlanAndChangeContext\",\"compositions\":[\"CodePlanAndChangeContext\"]},\"description\":\"loads(filenames: List): CodePlanAndChangeContext\",\"aggregations\":[\"CodePlanAndChangeContext\"]}},\"compositions\":[],\"aggregations\":[\"CodePlanAndChangeContext\"]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:design_filename"}, {"id": "{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:prd_filename"}, {"id": "{\"name\":\"prd_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:requirement"}, {"id": "{\"name\":\"requirement\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"requirement : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:task_filename"}, {"id": "{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:loads"}, {"id": "{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodePlanAndChangeContext\",\"description\":\"CodePlanAndChangeContext\",\"compositions\":[\"CodePlanAndChangeContext\"]},\"description\":\"loads(filenames: List): CodePlanAndChangeContext\",\"aggregations\":[\"CodePlanAndChangeContext\"]}"}, {"id": "metagpt/schema.py:CodeSummarizeContext"}, {"id": "{\"name\":\"CodeSummarizeContext\",\"package\":\"metagpt/schema.py:CodeSummarizeContext\",\"attributes\":{\"codes_filenames\":{\"name\":\"codes_filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"codes_filenames : List[str]\",\"compositions\":[]},\"design_filename\":{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]},\"reason\":{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]},\"task_filename\":{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeSummarizeContext\",\"description\":\"CodeSummarizeContext\",\"compositions\":[\"CodeSummarizeContext\"]},\"description\":\"loads(filenames: List): CodeSummarizeContext\",\"aggregations\":[\"CodeSummarizeContext\"]}},\"compositions\":[],\"aggregations\":[\"CodeSummarizeContext\"]}"}, {"id": "metagpt/schema.py:CodeSummarizeContext:codes_filenames"}, {"id": "{\"name\":\"codes_filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"codes_filenames : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodeSummarizeContext:design_filename"}, {"id": "metagpt/schema.py:CodeSummarizeContext:reason"}, {"id": "{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodeSummarizeContext:task_filename"}, {"id": "metagpt/schema.py:CodeSummarizeContext:loads"}, {"id": "{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeSummarizeContext\",\"description\":\"CodeSummarizeContext\",\"compositions\":[\"CodeSummarizeContext\"]},\"description\":\"loads(filenames: List): CodeSummarizeContext\",\"aggregations\":[\"CodeSummarizeContext\"]}"}, {"id": "metagpt/schema.py:CodingContext"}, {"id": "{\"name\":\"CodingContext\",\"package\":\"metagpt/schema.py:CodingContext\",\"attributes\":{\"code_doc\":{\"name\":\"code_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"code_plan_and_change_doc\":{\"name\":\"code_plan_and_change_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_plan_and_change_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"design_doc\":{\"name\":\"design_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"design_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"task_doc\":{\"name\":\"task_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"task_doc : Optional[Document]\",\"compositions\":[\"Document\"]}},\"methods\":{},\"compositions\":[\"Document\"],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:CodingContext:code_doc"}, {"id": "{\"name\":\"code_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"id": "metagpt/schema.py:CodingContext:code_plan_and_change_doc"}, {"id": "{\"name\":\"code_plan_and_change_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_plan_and_change_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"id": "metagpt/schema.py:CodingContext:design_doc"}, {"id": "{\"name\":\"design_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"design_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"id": "metagpt/schema.py:CodingContext:filename"}, {"id": "metagpt/schema.py:CodingContext:task_doc"}, {"id": "{\"name\":\"task_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"task_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"id": "?:Document"}, {"id": "metagpt/actions/research.py"}, {"id": "metagpt/actions/research.py:CollectLinks"}, {"id": "{\"name\":\"CollectLinks\",\"package\":\"metagpt/actions/research.py:CollectLinks\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"rank_func\":{\"name\":\"rank_func\",\"type_\":\"Optional[Callable[[list[str]],None]]\",\"default_\":\"\",\"description\":\"rank_func : Optional[Callable[[list[str]], None]]\",\"compositions\":[\"Callable\"]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]},\"search_func\":{\"name\":\"search_func\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_func : Optional[Any]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"decomposition_nums\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"decomposition_nums: int\",\"compositions\":[]},{\"name\":\"url_per_query\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"url_per_query: int\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\\\\|None\",\"default_\":\"\",\"description\":\"system_text: str \\\\| None\",\"compositions\":[\"str\\\\\"]}],\"return_args\":{\"type_\":\"dict[str,list[str]]\",\"description\":\"dict[str, list[str]]\",\"compositions\":[]},\"description\":\"run(topic: str, decomposition_nums: int, url_per_query: int, system_text: str \\\\| None): dict[str, list[str]]\",\"aggregations\":[\"str\\\\\"]},\"validate_engine_and_run_func\":{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}},\"compositions\":[\"Callable\",\"SearchEngine\"],\"aggregations\":[\"str\\\\\"]}"}, {"id": "metagpt/actions/research.py:CollectLinks:desc"}, {"id": "metagpt/actions/research.py:CollectLinks:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/research.py:CollectLinks:name"}, {"id": "metagpt/actions/research.py:CollectLinks:rank_func"}, {"id": "{\"name\":\"rank_func\",\"type_\":\"Optional[Callable[[list[str]],None]]\",\"default_\":\"\",\"description\":\"rank_func : Optional[Callable[[list[str]], None]]\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/actions/research.py:CollectLinks:search_engine"}, {"id": "{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}"}, {"id": "metagpt/actions/research.py:CollectLinks:search_func"}, {"id": "{\"name\":\"search_func\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_func : Optional[Any]\",\"compositions\":[]}"}, {"id": "metagpt/actions/research.py:CollectLinks:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"decomposition_nums\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"decomposition_nums: int\",\"compositions\":[]},{\"name\":\"url_per_query\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"url_per_query: int\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\\\\|None\",\"default_\":\"\",\"description\":\"system_text: str \\\\| None\",\"compositions\":[\"str\\\\\"]}],\"return_args\":{\"type_\":\"dict[str,list[str]]\",\"description\":\"dict[str, list[str]]\",\"compositions\":[]},\"description\":\"run(topic: str, decomposition_nums: int, url_per_query: int, system_text: str \\\\| None): dict[str, list[str]]\",\"aggregations\":[\"str\\\\\"]}"}, {"id": "metagpt/actions/research.py:CollectLinks:validate_engine_and_run_func"}, {"id": "{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}"}, {"id": "?:SearchEngine"}, {"id": "?:str\\"}, {"id": "metagpt/learn/skill_loader.py"}, {"id": "metagpt/learn/skill_loader.py:Components"}, {"id": "{\"name\":\"Components\",\"package\":\"metagpt/learn/skill_loader.py:Components\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/research.py:ConductResearch"}, {"id": "{\"name\":\"ConductResearch\",\"package\":\"metagpt/actions/research.py:ConductResearch\",\"attributes\":{},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str, content: str, system_text: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/research.py:ConductResearch:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str, content: str, system_text: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/config2.py:Config"}, {"id": "{\"name\":\"Config\",\"package\":\"metagpt/config2.py:Config\",\"attributes\":{\"azure_tts_region\":{\"name\":\"azure_tts_region\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"azure_tts_region : str\",\"compositions\":[]},\"azure_tts_subscription_key\":{\"name\":\"azure_tts_subscription_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"azure_tts_subscription_key : str\",\"compositions\":[]},\"browser\":{\"name\":\"browser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"browser\",\"compositions\":[]},\"code_review_k_times\":{\"name\":\"code_review_k_times\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code_review_k_times : int\",\"compositions\":[]},\"enable_longterm_memory\":{\"name\":\"enable_longterm_memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"enable_longterm_memory : bool\",\"compositions\":[]},\"iflytek_api_key\":{\"name\":\"iflytek_api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_api_key : str\",\"compositions\":[]},\"iflytek_api_secret\":{\"name\":\"iflytek_api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_api_secret : str\",\"compositions\":[]},\"iflytek_app_id\":{\"name\":\"iflytek_app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_app_id : str\",\"compositions\":[]},\"inc\":{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"max_auto_summarize_code\":{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]},\"mermaid\":{\"name\":\"mermaid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mermaid\",\"compositions\":[]},\"metagpt_tti_url\":{\"name\":\"metagpt_tti_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"metagpt_tti_url : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"Literal['json','markdown','raw']\",\"default_\":\"\",\"description\":\"prompt_schema : Literal['json', 'markdown', 'raw']\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]},\"redis\":{\"name\":\"redis\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"redis : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]},\"redis_key\":{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key : str\",\"compositions\":[]},\"repair_llm_output\":{\"name\":\"repair_llm_output\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"repair_llm_output : bool\",\"compositions\":[]},\"reqa_file\":{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},\"s3\":{\"name\":\"s3\",\"type_\":\"Optional[S3Config]\",\"default_\":\"\",\"description\":\"s3 : Optional[S3Config]\",\"compositions\":[\"S3Config\"]},\"search\":{\"name\":\"search\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search\",\"compositions\":[]},\"workspace\":{\"name\":\"workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workspace\",\"compositions\":[]}},\"methods\":{\"default\":{\"name\":\"default\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"default()\",\"aggregations\":[]},\"from_home\":{\"name\":\"from_home\",\"args\":[{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_home(path)\",\"aggregations\":[]},\"get_azure_llm\":{\"name\":\"get_azure_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_azure_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]},\"get_openai_llm\":{\"name\":\"get_openai_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_openai_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]},\"update_via_cli\":{\"name\":\"update_via_cli\",\"args\":[{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},{\"name\":\"inc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"inc\",\"compositions\":[]},{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code)\",\"aggregations\":[]}},\"compositions\":[\"RedisConfig\",\"S3Config\"],\"aggregations\":[\"LLMConfig\"]}"}, {"id": "metagpt/config2.py:Config:azure_tts_region"}, {"id": "{\"name\":\"azure_tts_region\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"azure_tts_region : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:azure_tts_subscription_key"}, {"id": "{\"name\":\"azure_tts_subscription_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"azure_tts_subscription_key : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:browser"}, {"id": "{\"name\":\"browser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"browser\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:code_review_k_times"}, {"id": "{\"name\":\"code_review_k_times\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code_review_k_times : int\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:enable_longterm_memory"}, {"id": "{\"name\":\"enable_longterm_memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"enable_longterm_memory : bool\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:iflytek_api_key"}, {"id": "{\"name\":\"iflytek_api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_api_key : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:iflytek_api_secret"}, {"id": "{\"name\":\"iflytek_api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_api_secret : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:iflytek_app_id"}, {"id": "{\"name\":\"iflytek_app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_app_id : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:inc"}, {"id": "metagpt/config2.py:Config:language"}, {"id": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:llm"}, {"id": "metagpt/config2.py:Config:max_auto_summarize_code"}, {"id": "{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:mermaid"}, {"id": "{\"name\":\"mermaid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mermaid\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:metagpt_tti_url"}, {"id": "{\"name\":\"metagpt_tti_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"metagpt_tti_url : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:project_name"}, {"id": "metagpt/config2.py:Config:project_path"}, {"id": "metagpt/config2.py:Config:prompt_schema"}, {"id": "{\"name\":\"prompt_schema\",\"type_\":\"Literal['json','markdown','raw']\",\"default_\":\"\",\"description\":\"prompt_schema : Literal['json', 'markdown', 'raw']\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:proxy"}, {"id": "{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:redis"}, {"id": "{\"name\":\"redis\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"redis : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}"}, {"id": "metagpt/config2.py:Config:redis_key"}, {"id": "{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:repair_llm_output"}, {"id": "{\"name\":\"repair_llm_output\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"repair_llm_output : bool\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:reqa_file"}, {"id": "{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:s3"}, {"id": "{\"name\":\"s3\",\"type_\":\"Optional[S3Config]\",\"default_\":\"\",\"description\":\"s3 : Optional[S3Config]\",\"compositions\":[\"S3Config\"]}"}, {"id": "metagpt/config2.py:Config:search"}, {"id": "{\"name\":\"search\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:workspace"}, {"id": "{\"name\":\"workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workspace\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:default"}, {"id": "{\"name\":\"default\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"default()\",\"aggregations\":[]}"}, {"id": "metagpt/config2.py:Config:from_home"}, {"id": "{\"name\":\"from_home\",\"args\":[{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_home(path)\",\"aggregations\":[]}"}, {"id": "metagpt/config2.py:Config:get_azure_llm"}, {"id": "{\"name\":\"get_azure_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_azure_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]}"}, {"id": "metagpt/config2.py:Config:get_openai_llm"}, {"id": "{\"name\":\"get_openai_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_openai_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]}"}, {"id": "metagpt/config2.py:Config:update_via_cli"}, {"id": "{\"name\":\"update_via_cli\",\"args\":[{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},{\"name\":\"inc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"inc\",\"compositions\":[]},{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code)\",\"aggregations\":[]}"}, {"id": "?:RedisConfig"}, {"id": "?:S3Config"}, {"id": "?:LLMConfig"}, {"id": "metagpt/tools/openai_text_to_embedding.py"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config"}, {"id": "{\"name\":\"Config\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config\",\"attributes\":{\"alias\":{\"name\":\"alias\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"alias : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config:alias"}, {"id": "{\"name\":\"alias\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"alias : dict\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:Config"}, {"id": "{\"name\":\"Config\",\"package\":\"metagpt/memory/brain_memory.py:BrainMemory:Config\",\"attributes\":{\"arbitrary_types_allowed\":{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:Config:arbitrary_types_allowed"}, {"id": "{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:Config"}, {"id": "{\"name\":\"Config\",\"package\":\"metagpt/strategy/tot.py:TreeofThought:Config\",\"attributes\":{\"arbitrary_types_allowed\":{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:Config:arbitrary_types_allowed"}, {"id": "metagpt/context.py:Context"}, {"id": "{\"name\":\"Context\",\"package\":\"metagpt/context.py:Context\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"Optional[GitRepository]\",\"default_\":\"\",\"description\":\"git_repo : Optional[GitRepository]\",\"compositions\":[\"GitRepository\"]},\"kwargs\":{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"Optional[ProjectRepo]\",\"default_\":\"\",\"description\":\"repo : Optional[ProjectRepo]\",\"compositions\":[\"ProjectRepo\"]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"src_workspace : Optional[Path]\",\"compositions\":[\"Path\"]}},\"methods\":{\"llm\":{\"name\":\"llm\",\"args\":[],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm(): BaseLLM\",\"aggregations\":[\"BaseLLM\"]},\"llm_with_cost_manager_from_llm_config\":{\"name\":\"llm_with_cost_manager_from_llm_config\",\"args\":[{\"name\":\"llm_config\",\"type_\":\"LLMConfig\",\"default_\":\"\",\"description\":\"llm_config: LLMConfig\",\"compositions\":[\"LLMConfig\"]}],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm_with_cost_manager_from_llm_config(llm_config: LLMConfig): BaseLLM\",\"aggregations\":[\"LLMConfig\",\"BaseLLM\"]},\"new_environ\":{\"name\":\"new_environ\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_environ()\",\"aggregations\":[]}},\"compositions\":[\"GitRepository\",\"ProjectRepo\",\"Path\"],\"aggregations\":[\"BaseLLM\",\"LLMConfig\"]}"}, {"id": "metagpt/context.py:Context:config"}, {"id": "metagpt/context.py:Context:cost_manager"}, {"id": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"id": "metagpt/context.py:Context:git_repo"}, {"id": "{\"name\":\"git_repo\",\"type_\":\"Optional[GitRepository]\",\"default_\":\"\",\"description\":\"git_repo : Optional[GitRepository]\",\"compositions\":[\"GitRepository\"]}"}, {"id": "metagpt/context.py:Context:kwargs"}, {"id": "{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}"}, {"id": "metagpt/context.py:Context:model_config"}, {"id": "metagpt/context.py:Context:repo"}, {"id": "{\"name\":\"repo\",\"type_\":\"Optional[ProjectRepo]\",\"default_\":\"\",\"description\":\"repo : Optional[ProjectRepo]\",\"compositions\":[\"ProjectRepo\"]}"}, {"id": "metagpt/context.py:Context:src_workspace"}, {"id": "{\"name\":\"src_workspace\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"src_workspace : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/context.py:Context:llm"}, {"id": "{\"name\":\"llm\",\"args\":[],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm(): BaseLLM\",\"aggregations\":[\"BaseLLM\"]}"}, {"id": "metagpt/context.py:Context:llm_with_cost_manager_from_llm_config"}, {"id": "{\"name\":\"llm_with_cost_manager_from_llm_config\",\"args\":[{\"name\":\"llm_config\",\"type_\":\"LLMConfig\",\"default_\":\"\",\"description\":\"llm_config: LLMConfig\",\"compositions\":[\"LLMConfig\"]}],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm_with_cost_manager_from_llm_config(llm_config: LLMConfig): BaseLLM\",\"aggregations\":[\"LLMConfig\",\"BaseLLM\"]}"}, {"id": "metagpt/context.py:Context:new_environ"}, {"id": "{\"name\":\"new_environ\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_environ()\",\"aggregations\":[]}"}, {"id": "?:GitRepository"}, {"id": "?:ProjectRepo"}, {"id": "metagpt/context_mixin.py"}, {"id": "metagpt/context_mixin.py:ContextMixin"}, {"id": "{\"name\":\"ContextMixin\",\"package\":\"metagpt/context_mixin.py:ContextMixin\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"private_config\":{\"name\":\"private_config\",\"type_\":\"Optional[Config]\",\"default_\":\"\",\"description\":\"private_config : Optional[Config]\",\"compositions\":[\"Config\"]},\"private_context\":{\"name\":\"private_context\",\"type_\":\"Optional[Context]\",\"default_\":\"\",\"description\":\"private_context : Optional[Context]\",\"compositions\":[\"Context\"]},\"private_llm\":{\"name\":\"private_llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"private_llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}},\"methods\":{\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(k, v, override)\",\"aggregations\":[]},\"set_config\":{\"name\":\"set_config\",\"args\":[{\"name\":\"config\",\"type_\":\"Config\",\"default_\":\"\",\"description\":\"config: Config\",\"compositions\":[\"Config\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_config(config: Config, override)\",\"aggregations\":[\"Config\"]},\"set_context\":{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context: Context, override)\",\"aggregations\":[\"Context\"]},\"set_llm\":{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"BaseLLM\",\"default_\":\"\",\"description\":\"llm: BaseLLM\",\"compositions\":[\"BaseLLM\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm: BaseLLM, override)\",\"aggregations\":[\"BaseLLM\"]},\"validate_context_mixin_extra\":{\"name\":\"validate_context_mixin_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_context_mixin_extra()\",\"aggregations\":[]}},\"compositions\":[\"Config\",\"Context\",\"BaseLLM\"],\"aggregations\":[]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:config"}, {"id": "metagpt/context_mixin.py:ContextMixin:context"}, {"id": "metagpt/context_mixin.py:ContextMixin:llm"}, {"id": "metagpt/context_mixin.py:ContextMixin:model_config"}, {"id": "metagpt/context_mixin.py:ContextMixin:private_config"}, {"id": "{\"name\":\"private_config\",\"type_\":\"Optional[Config]\",\"default_\":\"\",\"description\":\"private_config : Optional[Config]\",\"compositions\":[\"Config\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:private_context"}, {"id": "{\"name\":\"private_context\",\"type_\":\"Optional[Context]\",\"default_\":\"\",\"description\":\"private_context : Optional[Context]\",\"compositions\":[\"Context\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:private_llm"}, {"id": "{\"name\":\"private_llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"private_llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:set"}, {"id": "{\"name\":\"set\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(k, v, override)\",\"aggregations\":[]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:set_config"}, {"id": "{\"name\":\"set_config\",\"args\":[{\"name\":\"config\",\"type_\":\"Config\",\"default_\":\"\",\"description\":\"config: Config\",\"compositions\":[\"Config\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_config(config: Config, override)\",\"aggregations\":[\"Config\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:set_context"}, {"id": "{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context: Context, override)\",\"aggregations\":[\"Context\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:set_llm"}, {"id": "{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"BaseLLM\",\"default_\":\"\",\"description\":\"llm: BaseLLM\",\"compositions\":[\"BaseLLM\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm: BaseLLM, override)\",\"aggregations\":[\"BaseLLM\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:validate_context_mixin_extra"}, {"id": "{\"name\":\"validate_context_mixin_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_context_mixin_extra()\",\"aggregations\":[]}"}, {"id": "?:Config"}, {"id": "?:Context"}, {"id": "metagpt/utils/cost_manager.py"}, {"id": "metagpt/utils/cost_manager.py:CostManager"}, {"id": "{\"name\":\"CostManager\",\"package\":\"metagpt/utils/cost_manager.py:CostManager\",\"attributes\":{\"max_budget\":{\"name\":\"max_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"max_budget : float\",\"compositions\":[]},\"total_budget\":{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]},\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]},\"get_total_completion_tokens\":{\"name\":\"get_total_completion_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_completion_tokens()\",\"aggregations\":[]},\"get_total_cost\":{\"name\":\"get_total_cost\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_cost()\",\"aggregations\":[]},\"get_total_prompt_tokens\":{\"name\":\"get_total_prompt_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_prompt_tokens()\",\"aggregations\":[]},\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:max_budget"}, {"id": "{\"name\":\"max_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"max_budget : float\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:total_budget"}, {"id": "{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:total_completion_tokens"}, {"id": "{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:total_cost"}, {"id": "{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:total_prompt_tokens"}, {"id": "{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:get_costs"}, {"id": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:get_total_completion_tokens"}, {"id": "{\"name\":\"get_total_completion_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_completion_tokens()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:get_total_cost"}, {"id": "{\"name\":\"get_total_cost\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_cost()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:get_total_prompt_tokens"}, {"id": "{\"name\":\"get_total_prompt_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_prompt_tokens()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:update_cost"}, {"id": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}"}, {"id": "?:Costs"}, {"id": "metagpt/utils/cost_manager.py:Costs"}, {"id": "{\"name\":\"Costs\",\"package\":\"metagpt/utils/cost_manager.py:Costs\",\"attributes\":{\"total_budget\":{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]},\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:Costs:total_budget"}, {"id": "metagpt/utils/cost_manager.py:Costs:total_completion_tokens"}, {"id": "metagpt/utils/cost_manager.py:Costs:total_cost"}, {"id": "metagpt/utils/cost_manager.py:Costs:total_prompt_tokens"}, {"id": "metagpt/utils/custom_decoder.py"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder"}, {"id": "{\"name\":\"CustomDecoder\",\"package\":\"metagpt/utils/custom_decoder.py:CustomDecoder\",\"attributes\":{\"parse_object\":{\"name\":\"parse_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_object\",\"compositions\":[]},\"parse_string\":{\"name\":\"parse_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_string\",\"compositions\":[]},\"scan_once\":{\"name\":\"scan_once\",\"type_\":\"\",\"default_\":\"\",\"description\":\"scan_once\",\"compositions\":[]}},\"methods\":{\"decode\":{\"name\":\"decode\",\"args\":[{\"name\":\"s\",\"type_\":\"\",\"default_\":\"\",\"description\":\"s\",\"compositions\":[]},{\"name\":\"_w\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_w\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"decode(s, _w)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_object"}, {"id": "{\"name\":\"parse_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_object\",\"compositions\":[]}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_string"}, {"id": "{\"name\":\"parse_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_string\",\"compositions\":[]}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:scan_once"}, {"id": "{\"name\":\"scan_once\",\"type_\":\"\",\"default_\":\"\",\"description\":\"scan_once\",\"compositions\":[]}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:decode"}, {"id": "{\"name\":\"decode\",\"args\":[{\"name\":\"s\",\"type_\":\"\",\"default_\":\"\",\"description\":\"s\",\"compositions\":[]},{\"name\":\"_w\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_w\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"decode(s, _w)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/customer_service.py"}, {"id": "metagpt/roles/customer_service.py:CustomerService"}, {"id": "{\"name\":\"CustomerService\",\"package\":\"metagpt/roles/customer_service.py:CustomerService\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}},\"methods\":{},\"compositions\":[\"BaseStore\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/customer_service.py:CustomerService:desc"}, {"id": "metagpt/roles/customer_service.py:CustomerService:name"}, {"id": "metagpt/roles/customer_service.py:CustomerService:profile"}, {"id": "metagpt/roles/customer_service.py:CustomerService:store"}, {"id": "{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}"}, {"id": "?:BaseStore"}, {"id": "metagpt/tools/search_engine_ddg.py"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper"}, {"id": "{\"name\":\"DDGAPIWrapper\",\"package\":\"metagpt/tools/search_engine_ddg.py:DDGAPIWrapper\",\"attributes\":{\"ddgs\":{\"name\":\"ddgs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ddgs\",\"compositions\":[]},\"executor\":{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]},\"loop\":{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True], focus: list[str] \\\\| None): str\",\"aggregations\":[\"\\\\\"]}},\"compositions\":[\"futures.Executor\",\"asyncio.AbstractEventLoop\"],\"aggregations\":[\"\\\\\"]}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:ddgs"}, {"id": "{\"name\":\"ddgs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ddgs\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:executor"}, {"id": "{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:loop"}, {"id": "{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:model_config"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:proxy"}, {"id": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True], focus: list[str] \\\\| None): str\",\"aggregations\":[\"\\\\\"]}"}, {"id": "?:futures.Executor"}, {"id": "?:asyncio.AbstractEventLoop"}, {"id": "?:\\"}, {"id": "metagpt/strategy/tot.py:DFSSolver"}, {"id": "{\"name\":\"DFSSolver\",\"package\":\"metagpt/strategy/tot.py:DFSSolver\",\"attributes\":{\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]},{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt, root)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:DFSSolver:thought_tree"}, {"id": "metagpt/strategy/tot.py:DFSSolver:solve"}, {"id": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]},{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt, root)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py"}, {"id": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"id": "{\"name\":\"DataPreprocessTool\",\"package\":\"metagpt/tools/libs/data_preprocess.py:DataPreprocessTool\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:features"}, {"id": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:model"}, {"id": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:fit"}, {"id": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:transform"}, {"id": "metagpt/tools/search_engine_meilisearch.py"}, {"id": "metagpt/tools/search_engine_meilisearch.py:DataSource"}, {"id": "{\"name\":\"DataSource\",\"package\":\"metagpt/tools/search_engine_meilisearch.py:DataSource\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:DataSource:name"}, {"id": "metagpt/tools/search_engine_meilisearch.py:DataSource:url"}, {"id": "{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/debug_error.py"}, {"id": "metagpt/actions/debug_error.py:DebugError"}, {"id": "{\"name\":\"DebugError\",\"package\":\"metagpt/actions/debug_error.py:DebugError\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/debug_error.py:DebugError:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"id": "metagpt/actions/debug_error.py:DebugError:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/dependency_file.py"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile"}, {"id": "{\"name\":\"DependencyFile\",\"package\":\"metagpt/utils/dependency_file.py:DependencyFile\",\"attributes\":{\"exists\":{\"name\":\"exists\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exists\",\"compositions\":[]}},\"methods\":{\"delete_file\":{\"name\":\"delete_file\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_file()\",\"aggregations\":[]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(filename: Path \\\\| str, persist)\",\"aggregations\":[\"Path\\\\\"]},\"load\":{\"name\":\"load\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load()\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]},\"update\":{\"name\":\"update\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"dependencies\",\"type_\":\"Set[Path\\\\|str]\",\"default_\":\"\",\"description\":\"dependencies: Set[Path \\\\| str]\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update(filename: Path \\\\| str, dependencies: Set[Path \\\\| str], persist)\",\"aggregations\":[\"Path\\\\\"]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:exists"}, {"id": "{\"name\":\"exists\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exists\",\"compositions\":[]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:delete_file"}, {"id": "{\"name\":\"delete_file\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_file()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(filename: Path \\\\| str, persist)\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:load"}, {"id": "{\"name\":\"load\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:save"}, {"id": "{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:update"}, {"id": "{\"name\":\"update\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"dependencies\",\"type_\":\"Set[Path\\\\|str]\",\"default_\":\"\",\"description\":\"dependencies: Set[Path \\\\| str]\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update(filename: Path \\\\| str, dependencies: Set[Path \\\\| str], persist)\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "?:Path\\"}, {"id": "metagpt/actions/design_api_review.py"}, {"id": "metagpt/actions/design_api_review.py:DesignReview"}, {"id": "{\"name\":\"DesignReview\",\"package\":\"metagpt/actions/design_api_review.py:DesignReview\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},{\"name\":\"api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_design\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd, api_design)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/design_api_review.py:DesignReview:i_context"}, {"id": "metagpt/actions/design_api_review.py:DesignReview:name"}, {"id": "metagpt/actions/design_api_review.py:DesignReview:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},{\"name\":\"api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_design\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd, api_design)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository"}, {"id": "{\"name\":\"DiGraphRepository\",\"package\":\"metagpt/utils/di_graph_repository.py:DiGraphRepository\",\"attributes\":{\"pathname\":{\"name\":\"pathname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pathname\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]},\"root\":{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]},\"insert\":{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]},\"json\":{\"name\":\"json\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"json(): str\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(pathname: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"load_from\":{\"name\":\"load_from\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"GraphRepository\",\"description\":\"GraphRepository\",\"compositions\":[\"GraphRepository\"]},\"description\":\"load_from(pathname: str \\\\| Path): GraphRepository\",\"aggregations\":[\"str\\\\\",\"GraphRepository\",\"Path\"]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"select\":{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\",\"GraphRepository\",\"SPO\"]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname"}, {"id": "{\"name\":\"pathname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pathname\",\"compositions\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root"}, {"id": "{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:insert"}, {"id": "{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:json"}, {"id": "{\"name\":\"json\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"json(): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load"}, {"id": "{\"name\":\"load\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(pathname: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load_from"}, {"id": "{\"name\":\"load_from\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"GraphRepository\",\"description\":\"GraphRepository\",\"compositions\":[\"GraphRepository\"]},\"description\":\"load_from(pathname: str \\\\| Path): GraphRepository\",\"aggregations\":[\"str\\\\\",\"GraphRepository\",\"Path\"]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:save"}, {"id": "{\"name\":\"save\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:select"}, {"id": "{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}"}, {"id": "?:GraphRepository"}, {"id": "?:SPO"}, {"id": "metagpt/utils/project_repo.py"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories"}, {"id": "{\"name\":\"DocFileRepositories\",\"package\":\"metagpt/utils/project_repo.py:DocFileRepositories\",\"attributes\":{\"class_view\":{\"name\":\"class_view\",\"type_\":\"\",\"default_\":\"\",\"description\":\"class_view\",\"compositions\":[]},\"code_plan_and_change\":{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]},\"code_summary\":{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]},\"graph_repo\":{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},\"system_design\":{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]},\"task\":{\"name\":\"task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:class_view"}, {"id": "{\"name\":\"class_view\",\"type_\":\"\",\"default_\":\"\",\"description\":\"class_view\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:code_plan_and_change"}, {"id": "{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:code_summary"}, {"id": "{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:graph_repo"}, {"id": "{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:prd"}, {"id": "{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:system_design"}, {"id": "{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:task"}, {"id": "{\"name\":\"task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task\",\"compositions\":[]}"}, {"id": "metagpt/utils/pycst.py"}, {"id": "metagpt/utils/pycst.py:DocstringCollector"}, {"id": "{\"name\":\"DocstringCollector\",\"package\":\"metagpt/utils/pycst.py:DocstringCollector\",\"attributes\":{\"docstrings\":{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]},\"stack\":{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}},\"methods\":{\"leave_ClassDef\":{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_ClassDef(node: cst.ClassDef): None\",\"aggregations\":[\"cst.ClassDef\"]},\"leave_FunctionDef\":{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_FunctionDef(node: cst.FunctionDef): None\",\"aggregations\":[\"cst.FunctionDef\"]},\"leave_Module\":{\"name\":\"leave_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_Module(node: cst.Module): None\",\"aggregations\":[\"cst.Module\"]},\"visit_ClassDef\":{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"bool\\\\\",\"cst.ClassDef\"]},\"visit_FunctionDef\":{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]},\"visit_Module\":{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}},\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"],\"aggregations\":[\"cst.ClassDef\",\"cst.FunctionDef\",\"cst.Module\",\"bool\\\\\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:docstrings"}, {"id": "{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:stack"}, {"id": "{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:leave_ClassDef"}, {"id": "{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_ClassDef(node: cst.ClassDef): None\",\"aggregations\":[\"cst.ClassDef\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:leave_FunctionDef"}, {"id": "{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_FunctionDef(node: cst.FunctionDef): None\",\"aggregations\":[\"cst.FunctionDef\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:leave_Module"}, {"id": "{\"name\":\"leave_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_Module(node: cst.Module): None\",\"aggregations\":[\"cst.Module\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:visit_ClassDef"}, {"id": "{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"bool\\\\\",\"cst.ClassDef\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:visit_FunctionDef"}, {"id": "{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:visit_Module"}, {"id": "{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}"}, {"id": "?:..."}, {"id": "?:cst.SimpleStatementLine"}, {"id": "?:cst.ClassDef"}, {"id": "?:cst.FunctionDef"}, {"id": "?:cst.Module"}, {"id": "?:bool\\"}, {"id": "metagpt/utils/parse_docstring.py"}, {"id": "metagpt/utils/parse_docstring.py:DocstringParser"}, {"id": "{\"name\":\"DocstringParser\",\"package\":\"metagpt/utils/parse_docstring.py:DocstringParser\",\"attributes\":{\"docstring\":{\"name\":\"docstring\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"docstring : str\",\"compositions\":[]}},\"methods\":{\"check_and_parse_default_value\":{\"name\":\"check_and_parse_default_value\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_default_value(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]},\"check_and_parse_enum\":{\"name\":\"check_and_parse_enum\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_enum(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]},\"check_and_parse_optional\":{\"name\":\"check_and_parse_optional\",\"args\":[{\"name\":\"param_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_optional(param_type: str): Tuple[bool, str]\",\"aggregations\":[]},\"parse_desc\":{\"name\":\"parse_desc\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_desc(): str\",\"aggregations\":[]},\"parse_params\":{\"name\":\"parse_params\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str,str]]\",\"description\":\"list[Tuple[str, str, str]]\",\"compositions\":[]},\"description\":\"parse_params(): list[Tuple[str, str, str]]\",\"aggregations\":[]},\"parse_returns\":{\"name\":\"parse_returns\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str]]\",\"description\":\"list[Tuple[str, str]]\",\"compositions\":[]},\"description\":\"parse_returns(): list[Tuple[str, str]]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:DocstringParser:docstring"}, {"id": "{\"name\":\"docstring\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"docstring : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_default_value"}, {"id": "{\"name\":\"check_and_parse_default_value\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_default_value(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_enum"}, {"id": "{\"name\":\"check_and_parse_enum\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_enum(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_optional"}, {"id": "{\"name\":\"check_and_parse_optional\",\"args\":[{\"name\":\"param_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_optional(param_type: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:DocstringParser:parse_desc"}, {"id": "{\"name\":\"parse_desc\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_desc(): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:DocstringParser:parse_params"}, {"id": "{\"name\":\"parse_params\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str,str]]\",\"description\":\"list[Tuple[str, str, str]]\",\"compositions\":[]},\"description\":\"parse_params(): list[Tuple[str, str, str]]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:DocstringParser:parse_returns"}, {"id": "{\"name\":\"parse_returns\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str]]\",\"description\":\"list[Tuple[str, str]]\",\"compositions\":[]},\"description\":\"parse_returns(): list[Tuple[str, str]]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer"}, {"id": "{\"name\":\"DocstringTransformer\",\"package\":\"metagpt/utils/pycst.py:DocstringTransformer\",\"attributes\":{\"docstrings\":{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]},\"stack\":{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}},\"methods\":{\"leave_ClassDef\":{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"original_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"updated_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_ClassDef(original_node: cst.ClassDef, updated_node: cst.ClassDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.ClassDef\"]},\"leave_FunctionDef\":{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"original_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"updated_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_FunctionDef(original_node: cst.FunctionDef, updated_node: cst.FunctionDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.FunctionDef\"]},\"leave_Module\":{\"name\":\"leave_Module\",\"args\":[{\"name\":\"original_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"original_node: Module\",\"compositions\":[\"Module\"]},{\"name\":\"updated_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"updated_node: Module\",\"compositions\":[\"Module\"]}],\"return_args\":{\"type_\":\"Module\",\"description\":\"Module\",\"compositions\":[\"Module\"]},\"description\":\"leave_Module(original_node: Module, updated_node: Module): Module\",\"aggregations\":[\"Module\"]},\"visit_ClassDef\":{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"bool\\\\\",\"cst.ClassDef\"]},\"visit_FunctionDef\":{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]},\"visit_Module\":{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}},\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"],\"aggregations\":[\"cst.CSTNode\",\"cst.ClassDef\",\"cst.FunctionDef\",\"Module\",\"bool\\\\\",\"cst.Module\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:docstrings"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:stack"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:leave_ClassDef"}, {"id": "{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"original_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"updated_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_ClassDef(original_node: cst.ClassDef, updated_node: cst.ClassDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.ClassDef\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:leave_FunctionDef"}, {"id": "{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"original_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"updated_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_FunctionDef(original_node: cst.FunctionDef, updated_node: cst.FunctionDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.FunctionDef\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:leave_Module"}, {"id": "{\"name\":\"leave_Module\",\"args\":[{\"name\":\"original_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"original_node: Module\",\"compositions\":[\"Module\"]},{\"name\":\"updated_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"updated_node: Module\",\"compositions\":[\"Module\"]}],\"return_args\":{\"type_\":\"Module\",\"description\":\"Module\",\"compositions\":[\"Module\"]},\"description\":\"leave_Module(original_node: Module, updated_node: Module): Module\",\"aggregations\":[\"Module\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:visit_ClassDef"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:visit_FunctionDef"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:visit_Module"}, {"id": "?:cst.CSTNode"}, {"id": "?:Module"}, {"id": "metagpt/document.py"}, {"id": "metagpt/document.py:Document"}, {"id": "{\"name\":\"Document\",\"package\":\"metagpt/document.py:Document\",\"attributes\":{\"author\":{\"name\":\"author\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"author : str\",\"compositions\":[]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]},\"reviews\":{\"name\":\"reviews\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"reviews : list\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}},\"methods\":{\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]},\"from_text\":{\"name\":\"from_text\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_text(text: str, path: Optional[Path])\",\"aggregations\":[\"Path\"]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"to_path\":{\"name\":\"to_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path(path: Optional[Path])\",\"aggregations\":[\"Path\"]}},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"id": "metagpt/document.py:Document:author"}, {"id": "{\"name\":\"author\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"author : str\",\"compositions\":[]}"}, {"id": "metagpt/document.py:Document:content"}, {"id": "metagpt/document.py:Document:name"}, {"id": "metagpt/document.py:Document:path"}, {"id": "{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/document.py:Document:reviews"}, {"id": "{\"name\":\"reviews\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"reviews : list\",\"compositions\":[]}"}, {"id": "metagpt/document.py:Document:status"}, {"id": "{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}"}, {"id": "metagpt/document.py:Document:from_path"}, {"id": "{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/document.py:Document:from_text"}, {"id": "{\"name\":\"from_text\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_text(text: str, path: Optional[Path])\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/document.py:Document:persist"}, {"id": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"id": "metagpt/document.py:Document:to_path"}, {"id": "{\"name\":\"to_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path(path: Optional[Path])\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/schema.py:Document"}, {"id": "{\"name\":\"Document\",\"package\":\"metagpt/schema.py:Document\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"root_path\":{\"name\":\"root_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"root_path : str\",\"compositions\":[]},\"root_relative_path\":{\"name\":\"root_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_relative_path\",\"compositions\":[]}},\"methods\":{\"get_meta\":{\"name\":\"get_meta\",\"args\":[],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"get_meta(): Document\",\"aggregations\":[\"Document\"]}},\"compositions\":[],\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/schema.py:Document:content"}, {"id": "metagpt/schema.py:Document:filename"}, {"id": "metagpt/schema.py:Document:root_path"}, {"id": "{\"name\":\"root_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"root_path : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Document:root_relative_path"}, {"id": "{\"name\":\"root_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_relative_path\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Document:get_meta"}, {"id": "{\"name\":\"get_meta\",\"args\":[],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"get_meta(): Document\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/document.py:DocumentStatus"}, {"id": "{\"name\":\"DocumentStatus\",\"package\":\"metagpt/document.py:DocumentStatus\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document.py:DocumentStatus:name"}, {"id": "metagpt/schema.py:Documents"}, {"id": "{\"name\":\"Documents\",\"package\":\"metagpt/schema.py:Documents\",\"attributes\":{\"docs\":{\"name\":\"docs\",\"type_\":\"Dict[str,Document]\",\"default_\":\"\",\"description\":\"docs : Dict[str, Document]\",\"compositions\":[\"Document\"]}},\"methods\":{\"from_iterable\":{\"name\":\"from_iterable\",\"args\":[{\"name\":\"documents\",\"type_\":\"Iterable[Document]\",\"default_\":\"\",\"description\":\"documents: Iterable[Document]\",\"compositions\":[\"Document\",\"Iterable\"]}],\"return_args\":{\"type_\":\"Documents\",\"description\":\"Documents\",\"compositions\":[\"Documents\"]},\"description\":\"from_iterable(documents: Iterable[Document]): Documents\",\"aggregations\":[\"Document\",\"Documents\",\"Iterable\"]},\"to_action_output\":{\"name\":\"to_action_output\",\"args\":[],\"return_args\":{\"type_\":\"'ActionOutput'\",\"description\":\"'ActionOutput'\",\"compositions\":[\"ActionOutput\"]},\"description\":\"to_action_output(): 'ActionOutput'\",\"aggregations\":[\"ActionOutput\"]}},\"compositions\":[\"Document\"],\"aggregations\":[\"Documents\",\"Iterable\",\"ActionOutput\"]}"}, {"id": "metagpt/schema.py:Documents:docs"}, {"id": "{\"name\":\"docs\",\"type_\":\"Dict[str,Document]\",\"default_\":\"\",\"description\":\"docs : Dict[str, Document]\",\"compositions\":[\"Document\"]}"}, {"id": "metagpt/schema.py:Documents:from_iterable"}, {"id": "{\"name\":\"from_iterable\",\"args\":[{\"name\":\"documents\",\"type_\":\"Iterable[Document]\",\"default_\":\"\",\"description\":\"documents: Iterable[Document]\",\"compositions\":[\"Document\",\"Iterable\"]}],\"return_args\":{\"type_\":\"Documents\",\"description\":\"Documents\",\"compositions\":[\"Documents\"]},\"description\":\"from_iterable(documents: Iterable[Document]): Documents\",\"aggregations\":[\"Document\",\"Documents\",\"Iterable\"]}"}, {"id": "metagpt/schema.py:Documents:to_action_output"}, {"id": "{\"name\":\"to_action_output\",\"args\":[],\"return_args\":{\"type_\":\"'ActionOutput'\",\"description\":\"'ActionOutput'\",\"compositions\":[\"ActionOutput\"]},\"description\":\"to_action_output(): 'ActionOutput'\",\"aggregations\":[\"ActionOutput\"]}"}, {"id": "?:Documents"}, {"id": "?:Iterable"}, {"id": "?:ActionOutput"}, {"id": "metagpt/repo_parser.py:DotClassAttribute"}, {"id": "{\"name\":\"DotClassAttribute\",\"package\":\"metagpt/repo_parser.py:DotClassAttribute\",\"attributes\":{\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"default_\":{\"name\":\"default_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_ : str\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"type_\":{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassAttribute'\",\"description\":\"'DotClassAttribute'\",\"compositions\":[\"DotClassAttribute\"]},\"description\":\"parse(v: str): 'DotClassAttribute'\",\"aggregations\":[\"DotClassAttribute\"]},\"parse_compositions\":{\"name\":\"parse_compositions\",\"args\":[{\"name\":\"types_part\",\"type_\":\"\",\"default_\":\"\",\"description\":\"types_part\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_compositions(types_part): List[str]\",\"aggregations\":[]},\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"DotClassAttribute\"]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:compositions"}, {"id": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:default_"}, {"id": "{\"name\":\"default_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_ : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:description"}, {"id": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:name"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:type_"}, {"id": "{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:parse"}, {"id": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassAttribute'\",\"description\":\"'DotClassAttribute'\",\"compositions\":[\"DotClassAttribute\"]},\"description\":\"parse(v: str): 'DotClassAttribute'\",\"aggregations\":[\"DotClassAttribute\"]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:parse_compositions"}, {"id": "{\"name\":\"parse_compositions\",\"args\":[{\"name\":\"types_part\",\"type_\":\"\",\"default_\":\"\",\"description\":\"types_part\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_compositions(types_part): List[str]\",\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:sort"}, {"id": "{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}"}, {"id": "?:DotClassAttribute"}, {"id": "metagpt/repo_parser.py:DotClassInfo"}, {"id": "{\"name\":\"DotClassInfo\",\"package\":\"metagpt/repo_parser.py:DotClassInfo\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"attributes\":{\"name\":\"attributes\",\"type_\":\"Dict[str,DotClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : Dict[str, DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]},\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"methods\":{\"name\":\"methods\",\"type_\":\"Dict[str,DotClassMethod]\",\"default_\":\"\",\"description\":\"methods : Dict[str, DotClassMethod]\",\"compositions\":[\"DotClassMethod\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"package\":{\"name\":\"package\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"package : Optional[str]\",\"compositions\":[]}},\"methods\":{\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[\"DotClassAttribute\",\"DotClassMethod\"],\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:aggregations"}, {"id": "{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:attributes"}, {"id": "{\"name\":\"attributes\",\"type_\":\"Dict[str,DotClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : Dict[str, DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:compositions"}, {"id": "metagpt/repo_parser.py:DotClassInfo:methods"}, {"id": "{\"name\":\"methods\",\"type_\":\"Dict[str,DotClassMethod]\",\"default_\":\"\",\"description\":\"methods : Dict[str, DotClassMethod]\",\"compositions\":[\"DotClassMethod\"]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:name"}, {"id": "metagpt/repo_parser.py:DotClassInfo:package"}, {"id": "{\"name\":\"package\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"package : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:sort"}, {"id": "?:DotClassMethod"}, {"id": "metagpt/repo_parser.py:DotClassMethod"}, {"id": "{\"name\":\"DotClassMethod\",\"package\":\"metagpt/repo_parser.py:DotClassMethod\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"args\":{\"name\":\"args\",\"type_\":\"List[DotClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"return_args\":{\"name\":\"return_args\",\"type_\":\"Optional[DotReturn]\",\"default_\":\"\",\"description\":\"return_args : Optional[DotReturn]\",\"compositions\":[\"DotReturn\"]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassMethod'\",\"description\":\"'DotClassMethod'\",\"compositions\":[\"DotClassMethod\"]},\"description\":\"parse(v: str): 'DotClassMethod'\",\"aggregations\":[\"DotClassMethod\"]}},\"compositions\":[\"DotClassAttribute\",\"DotReturn\"],\"aggregations\":[\"DotClassMethod\"]}"}, {"id": "metagpt/repo_parser.py:DotClassMethod:aggregations"}, {"id": "metagpt/repo_parser.py:DotClassMethod:args"}, {"id": "{\"name\":\"args\",\"type_\":\"List[DotClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]}"}, {"id": "metagpt/repo_parser.py:DotClassMethod:description"}, {"id": "metagpt/repo_parser.py:DotClassMethod:name"}, {"id": "metagpt/repo_parser.py:DotClassMethod:return_args"}, {"id": "{\"name\":\"return_args\",\"type_\":\"Optional[DotReturn]\",\"default_\":\"\",\"description\":\"return_args : Optional[DotReturn]\",\"compositions\":[\"DotReturn\"]}"}, {"id": "metagpt/repo_parser.py:DotClassMethod:parse"}, {"id": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassMethod'\",\"description\":\"'DotClassMethod'\",\"compositions\":[\"DotClassMethod\"]},\"description\":\"parse(v: str): 'DotClassMethod'\",\"aggregations\":[\"DotClassMethod\"]}"}, {"id": "?:DotReturn"}, {"id": "metagpt/repo_parser.py:DotClassRelationship"}, {"id": "{\"name\":\"DotClassRelationship\",\"package\":\"metagpt/repo_parser.py:DotClassRelationship\",\"attributes\":{\"dest\":{\"name\":\"dest\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dest : str\",\"compositions\":[]},\"label\":{\"name\":\"label\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"label : Optional[str]\",\"compositions\":[]},\"relationship\":{\"name\":\"relationship\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"relationship : str\",\"compositions\":[]},\"src\":{\"name\":\"src\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"src : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassRelationship:dest"}, {"id": "{\"name\":\"dest\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dest : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassRelationship:label"}, {"id": "{\"name\":\"label\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"label : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassRelationship:relationship"}, {"id": "{\"name\":\"relationship\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"relationship : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassRelationship:src"}, {"id": "{\"name\":\"src\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"src : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotReturn"}, {"id": "{\"name\":\"DotReturn\",\"package\":\"metagpt/repo_parser.py:DotReturn\",\"attributes\":{\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"type_\":{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotReturn'\\\\|None\",\"description\":\"'DotReturn' \\\\| None\",\"compositions\":[\"DotReturn\\\\\"]},\"description\":\"parse(v: str): 'DotReturn' \\\\| None\",\"aggregations\":[\"DotReturn\\\\\"]},\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"DotReturn\\\\\"]}"}, {"id": "metagpt/repo_parser.py:DotReturn:compositions"}, {"id": "metagpt/repo_parser.py:DotReturn:description"}, {"id": "metagpt/repo_parser.py:DotReturn:type_"}, {"id": "metagpt/repo_parser.py:DotReturn:parse"}, {"id": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotReturn'\\\\|None\",\"description\":\"'DotReturn' \\\\| None\",\"compositions\":[\"DotReturn\\\\\"]},\"description\":\"parse(v: str): 'DotReturn' \\\\| None\",\"aggregations\":[\"DotReturn\\\\\"]}"}, {"id": "metagpt/repo_parser.py:DotReturn:sort"}, {"id": "?:DotReturn\\"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Embedding"}, {"id": "{\"name\":\"Embedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:Embedding\",\"attributes\":{\"embedding\":{\"name\":\"embedding\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"embedding : List[float]\",\"compositions\":[]},\"index\":{\"name\":\"index\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"index : int\",\"compositions\":[]},\"object\":{\"name\":\"object\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Embedding:embedding"}, {"id": "{\"name\":\"embedding\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"embedding : List[float]\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Embedding:index"}, {"id": "{\"name\":\"index\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"index : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Embedding:object"}, {"id": "{\"name\":\"object\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py"}, {"id": "metagpt/roles/engineer.py:Engineer"}, {"id": "{\"name\":\"Engineer\",\"package\":\"metagpt/roles/engineer.py:Engineer\",\"attributes\":{\"action_description\":{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]},\"code_todos\":{\"name\":\"code_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"code_todos : list\",\"compositions\":[]},\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"n_borg\":{\"name\":\"n_borg\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_borg : int\",\"compositions\":[]},\"n_summarize\":{\"name\":\"n_summarize\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_summarize : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"next_todo_action\":{\"name\":\"next_todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"next_todo_action : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]},\"summarize_todos\":{\"name\":\"summarize_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"summarize_todos : list\",\"compositions\":[]},\"use_code_review\":{\"name\":\"use_code_review\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_code_review : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:action_description"}, {"id": "{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:code_todos"}, {"id": "{\"name\":\"code_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"code_todos : list\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:constraints"}, {"id": "metagpt/roles/engineer.py:Engineer:goal"}, {"id": "metagpt/roles/engineer.py:Engineer:n_borg"}, {"id": "{\"name\":\"n_borg\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_borg : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:n_summarize"}, {"id": "{\"name\":\"n_summarize\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_summarize : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:name"}, {"id": "metagpt/roles/engineer.py:Engineer:next_todo_action"}, {"id": "{\"name\":\"next_todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"next_todo_action : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:profile"}, {"id": "metagpt/roles/engineer.py:Engineer:src_workspace"}, {"id": "{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:summarize_todos"}, {"id": "{\"name\":\"summarize_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"summarize_todos : list\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:use_code_review"}, {"id": "{\"name\":\"use_code_review\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_code_review : bool\",\"compositions\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:EnronTemplate"}, {"id": "{\"name\":\"EnronTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:EnronTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"subj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen(subj)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:EnronTemplate:gen"}, {"id": "{\"name\":\"gen\",\"args\":[{\"name\":\"subj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen(subj)\",\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Entity"}, {"id": "{\"name\":\"Entity\",\"package\":\"metagpt/learn/skill_loader.py:Entity\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"name : Optional[str]\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"List[Skill]\",\"default_\":\"\",\"description\":\"skills : List[Skill]\",\"compositions\":[\"Skill\"]}},\"methods\":{},\"compositions\":[\"Skill\"],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Entity:name"}, {"id": "{\"name\":\"name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"name : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Entity:skills"}, {"id": "{\"name\":\"skills\",\"type_\":\"List[Skill]\",\"default_\":\"\",\"description\":\"skills : List[Skill]\",\"compositions\":[\"Skill\"]}"}, {"id": "?:Skill"}, {"id": "metagpt/environment/api/env_api.py"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIAbstract"}, {"id": "{\"name\":\"EnvAPIAbstract\",\"package\":\"metagpt/environment/api/env_api.py:EnvAPIAbstract\",\"attributes\":{\"api_name\":{\"name\":\"api_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_name : str\",\"compositions\":[]},\"args\":{\"name\":\"args\",\"type_\":\"set\",\"default_\":\"\",\"description\":\"args : set\",\"compositions\":[]},\"kwargs\":{\"name\":\"kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"kwargs : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIAbstract:api_name"}, {"id": "{\"name\":\"api_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_name : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIAbstract:args"}, {"id": "{\"name\":\"args\",\"type_\":\"set\",\"default_\":\"\",\"description\":\"args : set\",\"compositions\":[]}"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIAbstract:kwargs"}, {"id": "{\"name\":\"kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"kwargs : dict\",\"compositions\":[]}"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIRegistry"}, {"id": "{\"name\":\"EnvAPIRegistry\",\"package\":\"metagpt/environment/api/env_api.py:EnvAPIRegistry\",\"attributes\":{\"registry\":{\"name\":\"registry\",\"type_\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"default_\":\"\",\"description\":\"registry : dict[str, dict[str, Union[dict, Any, str]]]\",\"compositions\":[]}},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"api_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(api_name: str)\",\"aggregations\":[]},\"get_apis\":{\"name\":\"get_apis\",\"args\":[{\"name\":\"as_str\",\"type_\":\"\",\"default_\":\"\",\"description\":\"as_str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"description\":\"dict[str, dict[str, Union[dict, Any, str]]]\",\"compositions\":[]},\"description\":\"get_apis(as_str): dict[str, dict[str, Union[dict, Any, str]]]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIRegistry:registry"}, {"id": "{\"name\":\"registry\",\"type_\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"default_\":\"\",\"description\":\"registry : dict[str, dict[str, Union[dict, Any, str]]]\",\"compositions\":[]}"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIRegistry:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"api_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(api_name: str)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIRegistry:get_apis"}, {"id": "{\"name\":\"get_apis\",\"args\":[{\"name\":\"as_str\",\"type_\":\"\",\"default_\":\"\",\"description\":\"as_str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"description\":\"dict[str, dict[str, Union[dict, Any, str]]]\",\"compositions\":[]},\"description\":\"get_apis(as_str): dict[str, dict[str, Union[dict, Any, str]]]\",\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py"}, {"id": "metagpt/environment/base_env.py:EnvType"}, {"id": "{\"name\":\"EnvType\",\"package\":\"metagpt/environment/base_env.py:EnvType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py:EnvType:name"}, {"id": "metagpt/environment/base_env.py:Environment"}, {"id": "{\"name\":\"Environment\",\"package\":\"metagpt/environment/base_env.py:Environment\",\"attributes\":{\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history : str\",\"compositions\":[]},\"is_idle\":{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]},\"member_addrs\":{\"name\":\"member_addrs\",\"type_\":\"Dict[Role,Set]\",\"default_\":\"\",\"description\":\"member_addrs : Dict['Role', Set]\",\"compositions\":[\"Role\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"roles\":{\"name\":\"roles\",\"type_\":\"dict[str,SerializeAsAny[Role]]\",\"default_\":\"\",\"description\":\"roles : dict[str, SerializeAsAny['Role']]\",\"compositions\":[\"Role\",\"SerializeAsAny\"]}},\"methods\":{\"add_role\":{\"name\":\"add_role\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: 'Role'\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_role(role: 'Role')\",\"aggregations\":[\"Role\"]},\"add_roles\":{\"name\":\"add_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Role]\",\"default_\":\"\",\"description\":\"roles: Iterable['Role']\",\"compositions\":[\"Iterable\",\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_roles(roles: Iterable['Role'])\",\"aggregations\":[\"Role\",\"Iterable\"]},\"archive\":{\"name\":\"archive\",\"args\":[{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(auto_archive)\",\"aggregations\":[]},\"get_addresses\":{\"name\":\"get_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_addresses(obj)\",\"aggregations\":[]},\"get_role\":{\"name\":\"get_role\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'Role'\",\"description\":\"'Role'\",\"compositions\":[\"Role\"]},\"description\":\"get_role(name: str): 'Role'\",\"aggregations\":[\"Role\"]},\"get_roles\":{\"name\":\"get_roles\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,'Role']\",\"description\":\"dict[str, 'Role']\",\"compositions\":[\"Role\"]},\"description\":\"get_roles(): dict[str, 'Role']\",\"aggregations\":[\"Role\"]},\"init_roles\":{\"name\":\"init_roles\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_roles()\",\"aggregations\":[]},\"model_rebuild\":{\"name\":\"model_rebuild\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"model_rebuild()\",\"aggregations\":[]},\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"peekable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"peekable: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"publish_message(message: Message, peekable: bool): bool\",\"aggregations\":[\"Message\"]},\"role_names\":{\"name\":\"role_names\",\"args\":[],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"role_names(): list[str]\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]},\"set_addresses\":{\"name\":\"set_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]},{\"name\":\"addresses\",\"type_\":\"\",\"default_\":\"\",\"description\":\"addresses\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(obj, addresses)\",\"aggregations\":[]}},\"compositions\":[\"Role\",\"SerializeAsAny\"],\"aggregations\":[\"Iterable\",\"Message\"]}"}, {"id": "metagpt/environment/base_env.py:Environment:context"}, {"id": "metagpt/environment/base_env.py:Environment:desc"}, {"id": "metagpt/environment/base_env.py:Environment:history"}, {"id": "{\"name\":\"history\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/base_env.py:Environment:is_idle"}, {"id": "{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]}"}, {"id": "metagpt/environment/base_env.py:Environment:member_addrs"}, {"id": "{\"name\":\"member_addrs\",\"type_\":\"Dict[Role,Set]\",\"default_\":\"\",\"description\":\"member_addrs : Dict['Role', Set]\",\"compositions\":[\"Role\"]}"}, {"id": "metagpt/environment/base_env.py:Environment:model_config"}, {"id": "metagpt/environment/base_env.py:Environment:roles"}, {"id": "{\"name\":\"roles\",\"type_\":\"dict[str,SerializeAsAny[Role]]\",\"default_\":\"\",\"description\":\"roles : dict[str, SerializeAsAny['Role']]\",\"compositions\":[\"Role\",\"SerializeAsAny\"]}"}, {"id": "metagpt/environment/base_env.py:Environment:add_role"}, {"id": "{\"name\":\"add_role\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: 'Role'\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_role(role: 'Role')\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/environment/base_env.py:Environment:add_roles"}, {"id": "{\"name\":\"add_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Role]\",\"default_\":\"\",\"description\":\"roles: Iterable['Role']\",\"compositions\":[\"Iterable\",\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_roles(roles: Iterable['Role'])\",\"aggregations\":[\"Role\",\"Iterable\"]}"}, {"id": "metagpt/environment/base_env.py:Environment:archive"}, {"id": "{\"name\":\"archive\",\"args\":[{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(auto_archive)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py:Environment:get_addresses"}, {"id": "{\"name\":\"get_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_addresses(obj)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py:Environment:get_role"}, {"id": "{\"name\":\"get_role\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'Role'\",\"description\":\"'Role'\",\"compositions\":[\"Role\"]},\"description\":\"get_role(name: str): 'Role'\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/environment/base_env.py:Environment:get_roles"}, {"id": "{\"name\":\"get_roles\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,'Role']\",\"description\":\"dict[str, 'Role']\",\"compositions\":[\"Role\"]},\"description\":\"get_roles(): dict[str, 'Role']\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/environment/base_env.py:Environment:init_roles"}, {"id": "{\"name\":\"init_roles\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_roles()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py:Environment:model_rebuild"}, {"id": "{\"name\":\"model_rebuild\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"model_rebuild()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py:Environment:publish_message"}, {"id": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"peekable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"peekable: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"publish_message(message: Message, peekable: bool): bool\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/environment/base_env.py:Environment:role_names"}, {"id": "{\"name\":\"role_names\",\"args\":[],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"role_names(): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py:Environment:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py:Environment:set_addresses"}, {"id": "{\"name\":\"set_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]},{\"name\":\"addresses\",\"type_\":\"\",\"default_\":\"\",\"description\":\"addresses\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(obj, addresses)\",\"aggregations\":[]}"}, {"id": "?:Role"}, {"id": "?:SerializeAsAny"}, {"id": "metagpt/learn/skill_loader.py:Example"}, {"id": "{\"name\":\"Example\",\"package\":\"metagpt/learn/skill_loader.py:Example\",\"attributes\":{\"answer\":{\"name\":\"answer\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"answer : str\",\"compositions\":[]},\"ask\":{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Example:answer"}, {"id": "{\"name\":\"answer\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"answer : str\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Example:ask"}, {"id": "metagpt/actions/execute_task.py"}, {"id": "metagpt/actions/execute_task.py:ExecuteTask"}, {"id": "{\"name\":\"ExecuteTask\",\"package\":\"metagpt/actions/execute_task.py:ExecuteTask\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"i_context : list[Message]\",\"compositions\":[\"Message\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/execute_task.py:ExecuteTask:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"i_context : list[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/actions/execute_task.py:ExecuteTask:name"}, {"id": "metagpt/actions/execute_task.py:ExecuteTask:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py:ExtEnv"}, {"id": "{\"name\":\"ExtEnv\",\"package\":\"metagpt/environment/base_env.py:ExtEnv\",\"attributes\":{},\"methods\":{\"get_all_available_apis\":{\"name\":\"get_all_available_apis\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Any]\",\"description\":\"list[Any]\",\"compositions\":[]},\"description\":\"get_all_available_apis(mode: str): list[Any]\",\"aggregations\":[]},\"observe\":{\"name\":\"observe\",\"args\":[{\"name\":\"env_action\",\"type_\":\"Union[str,EnvAPIAbstract]\",\"default_\":\"\",\"description\":\"env_action: Union[str, EnvAPIAbstract]\",\"compositions\":[\"EnvAPIAbstract\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"observe(env_action: Union[str, EnvAPIAbstract])\",\"aggregations\":[\"EnvAPIAbstract\"]},\"step\":{\"name\":\"step\",\"args\":[{\"name\":\"env_action\",\"type_\":\"Union[str,Message,EnvAPIAbstract,list[EnvAPIAbstract]]\",\"default_\":\"\",\"description\":\"env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]]\",\"compositions\":[\"EnvAPIAbstract\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"step(env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]])\",\"aggregations\":[\"Message\",\"EnvAPIAbstract\"]}},\"compositions\":[],\"aggregations\":[\"EnvAPIAbstract\",\"Message\"]}"}, {"id": "metagpt/environment/base_env.py:ExtEnv:get_all_available_apis"}, {"id": "{\"name\":\"get_all_available_apis\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Any]\",\"description\":\"list[Any]\",\"compositions\":[]},\"description\":\"get_all_available_apis(mode: str): list[Any]\",\"aggregations\":[]}"}, {"id": "metagpt/environment/base_env.py:ExtEnv:observe"}, {"id": "{\"name\":\"observe\",\"args\":[{\"name\":\"env_action\",\"type_\":\"Union[str,EnvAPIAbstract]\",\"default_\":\"\",\"description\":\"env_action: Union[str, EnvAPIAbstract]\",\"compositions\":[\"EnvAPIAbstract\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"observe(env_action: Union[str, EnvAPIAbstract])\",\"aggregations\":[\"EnvAPIAbstract\"]}"}, {"id": "metagpt/environment/base_env.py:ExtEnv:step"}, {"id": "{\"name\":\"step\",\"args\":[{\"name\":\"env_action\",\"type_\":\"Union[str,Message,EnvAPIAbstract,list[EnvAPIAbstract]]\",\"default_\":\"\",\"description\":\"env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]]\",\"compositions\":[\"EnvAPIAbstract\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"step(env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]])\",\"aggregations\":[\"Message\",\"EnvAPIAbstract\"]}"}, {"id": "?:EnvAPIAbstract"}, {"id": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps"}, {"id": "{\"name\":\"ExtractTimeComps\",\"package\":\"metagpt/tools/libs/feature_engineering.py:ExtractTimeComps\",\"attributes\":{\"time_col\":{\"name\":\"time_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"time_col : str\",\"compositions\":[]},\"time_comps\":{\"name\":\"time_comps\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"time_comps : list\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:time_col"}, {"id": "{\"name\":\"time_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"time_col : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:time_comps"}, {"id": "{\"name\":\"time_comps\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"time_comps : list\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:fit"}, {"id": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:transform"}, {"id": "metagpt/document_store/faiss_store.py"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore"}, {"id": "{\"name\":\"FaissStore\",\"package\":\"metagpt/document_store/faiss_store.py:FaissStore\",\"attributes\":{\"content_col\":{\"name\":\"content_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content_col : str\",\"compositions\":[]},\"embedding\":{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]},\"meta_col\":{\"name\":\"meta_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"meta_col : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"texts\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"texts: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"add(texts: list[str]): list[str]\",\"aggregations\":[]},\"asearch\":{\"name\":\"asearch\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"asearch()\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete()\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"expand_cols\",\"type_\":\"\",\"default_\":\"\",\"description\":\"expand_cols\",\"compositions\":[]},{\"name\":\"sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, expand_cols, sep)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[\"OpenAIEmbeddings\"],\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:content_col"}, {"id": "{\"name\":\"content_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content_col : str\",\"compositions\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:embedding"}, {"id": "{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:meta_col"}, {"id": "{\"name\":\"meta_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"meta_col : str\",\"compositions\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:store"}, {"id": "{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"texts\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"texts: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"add(texts: list[str]): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:asearch"}, {"id": "{\"name\":\"asearch\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"asearch()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:delete"}, {"id": "{\"name\":\"delete\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:persist"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"expand_cols\",\"type_\":\"\",\"default_\":\"\",\"description\":\"expand_cols\",\"compositions\":[]},{\"name\":\"sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, expand_cols, sep)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:write"}, {"id": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"id": "?:OpenAIEmbeddings"}, {"id": "metagpt/utils/file.py"}, {"id": "metagpt/utils/file.py:File"}, {"id": "{\"name\":\"File\",\"package\":\"metagpt/utils/file.py:File\",\"attributes\":{\"CHUNK_SIZE\":{\"name\":\"CHUNK_SIZE\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"CHUNK_SIZE : int\",\"compositions\":[]}},\"methods\":{\"read\":{\"name\":\"read\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"chunk_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"chunk_size: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"read(file_path: Path, chunk_size: int): bytes\",\"aggregations\":[\"Path\",\"bytes\"]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"root_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"root_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"bytes\",\"default_\":\"\",\"description\":\"content: bytes\",\"compositions\":[\"bytes\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"write(root_path: Path, filename: str, content: bytes): Path\",\"aggregations\":[\"Path\",\"bytes\"]}},\"compositions\":[],\"aggregations\":[\"Path\",\"bytes\"]}"}, {"id": "metagpt/utils/file.py:File:CHUNK_SIZE"}, {"id": "{\"name\":\"CHUNK_SIZE\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"CHUNK_SIZE : int\",\"compositions\":[]}"}, {"id": "metagpt/utils/file.py:File:read"}, {"id": "{\"name\":\"read\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"chunk_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"chunk_size: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"read(file_path: Path, chunk_size: int): bytes\",\"aggregations\":[\"Path\",\"bytes\"]}"}, {"id": "metagpt/utils/file.py:File:write"}, {"id": "{\"name\":\"write\",\"args\":[{\"name\":\"root_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"root_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"bytes\",\"default_\":\"\",\"description\":\"content: bytes\",\"compositions\":[\"bytes\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"write(root_path: Path, filename: str, content: bytes): Path\",\"aggregations\":[\"Path\",\"bytes\"]}"}, {"id": "?:bytes"}, {"id": "metagpt/utils/file_repository.py"}, {"id": "metagpt/utils/file_repository.py:FileRepository"}, {"id": "{\"name\":\"FileRepository\",\"package\":\"metagpt/utils/file_repository.py:FileRepository\",\"attributes\":{\"all_files\":{\"name\":\"all_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_files\",\"compositions\":[]},\"changed_files\":{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]},\"root_path\":{\"name\":\"root_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_path\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(filename: Path \\\\| str)\",\"aggregations\":[\"Path\\\\\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Document\\\\|None\",\"description\":\"Document \\\\| None\",\"compositions\":[\"Document\\\\\"]},\"description\":\"get(filename: Path \\\\| str): Document \\\\| None\",\"aggregations\":[\"Path\\\\\",\"Document\\\\\"]},\"get_all\":{\"name\":\"get_all\",\"args\":[{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[Document]\",\"description\":\"List[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_all(filter_ignored): List[Document]\",\"aggregations\":[\"Document\"]},\"get_change_dir_files\":{\"name\":\"get_change_dir_files\",\"args\":[{\"name\":\"dir\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"dir: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_change_dir_files(dir: Path \\\\| str): List\",\"aggregations\":[\"Path\\\\\"]},\"get_changed_dependency\":{\"name\":\"get_changed_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_changed_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]},\"get_dependency\":{\"name\":\"get_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]},\"new_filename\":{\"name\":\"new_filename\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_filename()\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"save(filename: Path \\\\| str, content, dependencies: List[str]): Document\",\"aggregations\":[\"Document\",\"Path\\\\\"]},\"save_doc\":{\"name\":\"save_doc\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_doc(doc: Document, dependencies: List[str])\",\"aggregations\":[\"Document\"]},\"save_pdf\":{\"name\":\"save_pdf\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"with_suffix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"with_suffix: str\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_pdf(doc: Document, with_suffix: str, dependencies: List[str])\",\"aggregations\":[\"Document\"]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\",\"Document\\\\\",\"Document\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:all_files"}, {"id": "{\"name\":\"all_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_files\",\"compositions\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:changed_files"}, {"id": "{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:root_path"}, {"id": "{\"name\":\"root_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_path\",\"compositions\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:workdir"}, {"id": "{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(filename: Path \\\\| str)\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Document\\\\|None\",\"description\":\"Document \\\\| None\",\"compositions\":[\"Document\\\\\"]},\"description\":\"get(filename: Path \\\\| str): Document \\\\| None\",\"aggregations\":[\"Path\\\\\",\"Document\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get_all"}, {"id": "{\"name\":\"get_all\",\"args\":[{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[Document]\",\"description\":\"List[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_all(filter_ignored): List[Document]\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get_change_dir_files"}, {"id": "{\"name\":\"get_change_dir_files\",\"args\":[{\"name\":\"dir\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"dir: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_change_dir_files(dir: Path \\\\| str): List\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get_changed_dependency"}, {"id": "{\"name\":\"get_changed_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_changed_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get_dependency"}, {"id": "{\"name\":\"get_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:new_filename"}, {"id": "{\"name\":\"new_filename\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_filename()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:save"}, {"id": "{\"name\":\"save\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"save(filename: Path \\\\| str, content, dependencies: List[str]): Document\",\"aggregations\":[\"Document\",\"Path\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:save_doc"}, {"id": "{\"name\":\"save_doc\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_doc(doc: Document, dependencies: List[str])\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:save_pdf"}, {"id": "{\"name\":\"save_pdf\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"with_suffix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"with_suffix: str\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_pdf(doc: Document, with_suffix: str, dependencies: List[str])\",\"aggregations\":[\"Document\"]}"}, {"id": "?:Document\\"}, {"id": "metagpt/tools/libs/data_preprocess.py:FillMissingValue"}, {"id": "{\"name\":\"FillMissingValue\",\"package\":\"metagpt/tools/libs/data_preprocess.py:FillMissingValue\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"SimpleImputer\",\"default_\":\"\",\"description\":\"model : SimpleImputer\",\"compositions\":[\"SimpleImputer\"]}},\"methods\":{},\"compositions\":[\"SimpleImputer\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:features"}, {"id": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:model"}, {"id": "{\"name\":\"model\",\"type_\":\"SimpleImputer\",\"default_\":\"\",\"description\":\"model : SimpleImputer\",\"compositions\":[\"SimpleImputer\"]}"}, {"id": "?:SimpleImputer"}, {"id": "metagpt/provider/fireworks_api.py"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager"}, {"id": "{\"name\":\"FireworksCostManager\",\"package\":\"metagpt/provider/fireworks_api.py:FireworksCostManager\",\"attributes\":{\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_cost\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{\"model_grade_token_costs\":{\"name\":\"model_grade_token_costs\",\"args\":[{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,float]\",\"description\":\"dict[str, float]\",\"compositions\":[]},\"description\":\"model_grade_token_costs(model: str): dict[str, float]\",\"aggregations\":[]},\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens: int\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"completion_tokens: int\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens: int, completion_tokens: int, model: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_completion_tokens"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_cost"}, {"id": "{\"name\":\"total_cost\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_cost\",\"compositions\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_prompt_tokens"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:model_grade_token_costs"}, {"id": "{\"name\":\"model_grade_token_costs\",\"args\":[{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,float]\",\"description\":\"dict[str, float]\",\"compositions\":[]},\"description\":\"model_grade_token_costs(model: str): dict[str, float]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:update_cost"}, {"id": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens: int\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"completion_tokens: int\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens: int, completion_tokens: int, model: str)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM"}, {"id": "{\"name\":\"FireworksLLM\",\"package\":\"metagpt/provider/fireworks_api.py:FireworksLLM\",\"attributes\":{\"auto_max_tokens\":{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}},\"methods\":{\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:auto_max_tokens"}, {"id": "{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:acompletion_text"}, {"id": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:get_costs"}, {"id": "metagpt/actions/fix_bug.py"}, {"id": "metagpt/actions/fix_bug.py:FixBug"}, {"id": "{\"name\":\"FixBug\",\"package\":\"metagpt/actions/fix_bug.py:FixBug\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/fix_bug.py:FixBug:name"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator"}, {"id": "{\"name\":\"GPTPromptGenerator\",\"package\":\"metagpt/tools/prompt_writer.py:GPTPromptGenerator\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"example\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"example: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"style: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[list[str],str]\",\"description\":\"Union[list[str], str]\",\"compositions\":[]},\"description\":\"gen(example: str, style: str): Union[list[str], str]\",\"aggregations\":[]},\"gen_chatbot_style\":{\"name\":\"gen_chatbot_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_chatbot_style(example)\",\"aggregations\":[]},\"gen_instruction_style\":{\"name\":\"gen_instruction_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_instruction_style(example)\",\"aggregations\":[]},\"gen_query_style\":{\"name\":\"gen_query_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_query_style(example)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen"}, {"id": "{\"name\":\"gen\",\"args\":[{\"name\":\"example\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"example: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"style: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[list[str],str]\",\"description\":\"Union[list[str], str]\",\"compositions\":[]},\"description\":\"gen(example: str, style: str): Union[list[str], str]\",\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_chatbot_style"}, {"id": "{\"name\":\"gen_chatbot_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_chatbot_style(example)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_instruction_style"}, {"id": "{\"name\":\"gen_instruction_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_instruction_style(example)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_query_style"}, {"id": "{\"name\":\"gen_query_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_query_style(example)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator"}, {"id": "{\"name\":\"GPTvGenerator\",\"package\":\"metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"analyze_layout\":{\"name\":\"analyze_layout\",\"args\":[{\"name\":\"image_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"image_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"analyze_layout(image_path: Path): str\",\"aggregations\":[\"Path\"]},\"generate_webpages\":{\"name\":\"generate_webpages\",\"args\":[{\"name\":\"image_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"image_path: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_webpages(image_path: str): str\",\"aggregations\":[]},\"save_webpages\":{\"name\":\"save_webpages\",\"args\":[{\"name\":\"image_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"image_path: str\",\"compositions\":[]},{\"name\":\"webpages\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"webpages: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"save_webpages(image_path: str, webpages: str): Path\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:llm"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:analyze_layout"}, {"id": "{\"name\":\"analyze_layout\",\"args\":[{\"name\":\"image_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"image_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"analyze_layout(image_path: Path): str\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:generate_webpages"}, {"id": "{\"name\":\"generate_webpages\",\"args\":[{\"name\":\"image_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"image_path: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_webpages(image_path: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:save_webpages"}, {"id": "{\"name\":\"save_webpages\",\"args\":[{\"name\":\"image_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"image_path: str\",\"compositions\":[]},{\"name\":\"webpages\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"webpages: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"save_webpages(image_path: str, webpages: str): Path\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/provider/google_gemini_api.py"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel"}, {"id": "{\"name\":\"GeminiGenerativeModel\",\"package\":\"metagpt/provider/google_gemini_api.py:GeminiGenerativeModel\",\"attributes\":{},\"methods\":{\"count_tokens\":{\"name\":\"count_tokens\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]},\"count_tokens_async\":{\"name\":\"count_tokens_async\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens_async(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]}},\"compositions\":[],\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens"}, {"id": "{\"name\":\"count_tokens\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens_async"}, {"id": "{\"name\":\"count_tokens_async\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens_async(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]}"}, {"id": "?:glm.CountTokensResponse"}, {"id": "?:content_types.ContentsType"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM"}, {"id": "{\"name\":\"GeminiLLM\",\"package\":\"metagpt/provider/google_gemini_api.py:GeminiLLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"aget_usage\":{\"name\":\"aget_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aget_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]},\"completion\":{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'GenerateContentResponse'\",\"description\":\"'GenerateContentResponse'\",\"compositions\":[\"GenerateContentResponse\"]},\"description\":\"completion(messages: list[dict]): 'GenerateContentResponse'\",\"aggregations\":[\"GenerateContentResponse\"]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"GenerateContentResponse\",\"default_\":\"\",\"description\":\"resp: GenerateContentResponse\",\"compositions\":[\"GenerateContentResponse\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: GenerateContentResponse): str\",\"aggregations\":[\"GenerateContentResponse\"]},\"get_usage\":{\"name\":\"get_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"GenerateContentResponse\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:config"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:model"}, {"id": "{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:pricing_plan"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:use_system_prompt"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion"}, {"id": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion_text"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:aget_usage"}, {"id": "{\"name\":\"aget_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aget_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:completion"}, {"id": "{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'GenerateContentResponse'\",\"description\":\"'GenerateContentResponse'\",\"compositions\":[\"GenerateContentResponse\"]},\"description\":\"completion(messages: list[dict]): 'GenerateContentResponse'\",\"aggregations\":[\"GenerateContentResponse\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_choice_text"}, {"id": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"GenerateContentResponse\",\"default_\":\"\",\"description\":\"resp: GenerateContentResponse\",\"compositions\":[\"GenerateContentResponse\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: GenerateContentResponse): str\",\"aggregations\":[\"GenerateContentResponse\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_usage"}, {"id": "{\"name\":\"get_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}"}, {"id": "?:GenerateContentResponse"}, {"id": "metagpt/provider/general_api_requestor.py"}, {"id": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor"}, {"id": "{\"name\":\"GeneralAPIRequestor\",\"package\":\"metagpt/provider/general_api_requestor.py:GeneralAPIRequestor\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:GeneralSelection"}, {"id": "{\"name\":\"GeneralSelection\",\"package\":\"metagpt/tools/libs/feature_engineering.py:GeneralSelection\",\"attributes\":{\"feats\":{\"name\":\"feats\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"feats : list\",\"compositions\":[]},\"label_col\":{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:feats"}, {"id": "{\"name\":\"feats\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"feats : list\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:label_col"}, {"id": "{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:fit"}, {"id": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:transform"}, {"id": "metagpt/actions/generate_questions.py"}, {"id": "metagpt/actions/generate_questions.py:GenerateQuestions"}, {"id": "{\"name\":\"GenerateQuestions\",\"package\":\"metagpt/actions/generate_questions.py:GenerateQuestions\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionNode\",\"description\":\"ActionNode\",\"compositions\":[\"ActionNode\"]},\"description\":\"run(context): ActionNode\",\"aggregations\":[\"ActionNode\"]}},\"compositions\":[],\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/generate_questions.py:GenerateQuestions:name"}, {"id": "metagpt/actions/generate_questions.py:GenerateQuestions:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionNode\",\"description\":\"ActionNode\",\"compositions\":[\"ActionNode\"]},\"description\":\"run(context): ActionNode\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/invoice_ocr.py"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable"}, {"id": "{\"name\":\"GenerateTable\",\"package\":\"metagpt/actions/invoice_ocr.py:GenerateTable\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"ocr_results\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_results: list\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(ocr_results: list, filename: str): dict[str, str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable:i_context"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable:language"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable:name"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"ocr_results\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_results: list\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(ocr_results: list, filename: str): dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb"}, {"id": "{\"name\":\"GetMessageFromWeb\",\"package\":\"metagpt/provider/spark_api.py:GetMessageFromWeb\",\"attributes\":{\"domain\":{\"name\":\"domain\",\"type_\":\"\",\"default_\":\"\",\"description\":\"domain\",\"compositions\":[]},\"ret\":{\"name\":\"ret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ret : str\",\"compositions\":[]},\"spark_api_key\":{\"name\":\"spark_api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_key\",\"compositions\":[]},\"spark_api_secret\":{\"name\":\"spark_api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_secret\",\"compositions\":[]},\"spark_appid\":{\"name\":\"spark_appid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_appid\",\"compositions\":[]},\"spark_url\":{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]},\"text\":{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}},\"methods\":{\"gen_params\":{\"name\":\"gen_params\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_params()\",\"aggregations\":[]},\"on_close\":{\"name\":\"on_close\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"one\",\"type_\":\"\",\"default_\":\"\",\"description\":\"one\",\"compositions\":[]},{\"name\":\"two\",\"type_\":\"\",\"default_\":\"\",\"description\":\"two\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_close(ws, one, two)\",\"aggregations\":[]},\"on_error\":{\"name\":\"on_error\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"error\",\"type_\":\"\",\"default_\":\"\",\"description\":\"error\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_error(ws, error)\",\"aggregations\":[]},\"on_message\":{\"name\":\"on_message\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_message(ws, message)\",\"aggregations\":[]},\"on_open\":{\"name\":\"on_open\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_open(ws)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"send\":{\"name\":\"send\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"send(ws)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:domain"}, {"id": "{\"name\":\"domain\",\"type_\":\"\",\"default_\":\"\",\"description\":\"domain\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:ret"}, {"id": "{\"name\":\"ret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ret : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_key"}, {"id": "{\"name\":\"spark_api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_key\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_secret"}, {"id": "{\"name\":\"spark_api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_secret\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_appid"}, {"id": "{\"name\":\"spark_appid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_appid\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_url"}, {"id": "{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:text"}, {"id": "{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:gen_params"}, {"id": "{\"name\":\"gen_params\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_params()\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_close"}, {"id": "{\"name\":\"on_close\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"one\",\"type_\":\"\",\"default_\":\"\",\"description\":\"one\",\"compositions\":[]},{\"name\":\"two\",\"type_\":\"\",\"default_\":\"\",\"description\":\"two\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_close(ws, one, two)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_error"}, {"id": "{\"name\":\"on_error\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"error\",\"type_\":\"\",\"default_\":\"\",\"description\":\"error\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_error(ws, error)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_message"}, {"id": "{\"name\":\"on_message\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_message(ws, message)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_open"}, {"id": "{\"name\":\"on_open\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_open(ws)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:run"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:send"}, {"id": "{\"name\":\"send\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"send(ws)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository"}, {"id": "{\"name\":\"GitRepository\",\"package\":\"metagpt/utils/git_repository.py:GitRepository\",\"attributes\":{\"changed_files\":{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]},\"is_valid\":{\"name\":\"is_valid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_valid\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"add_change\":{\"name\":\"add_change\",\"args\":[{\"name\":\"files\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"files: Dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_change(files: Dict)\",\"aggregations\":[]},\"archive\":{\"name\":\"archive\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(comments)\",\"aggregations\":[]},\"commit\":{\"name\":\"commit\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"commit(comments)\",\"aggregations\":[]},\"delete_repository\":{\"name\":\"delete_repository\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_repository()\",\"aggregations\":[]},\"filter_gitignore\":{\"name\":\"filter_gitignore\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"filenames: List[str]\",\"compositions\":[]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"filter_gitignore(filenames: List[str], root_relative_path: Path \\\\| str): List[str]\",\"aggregations\":[\"Path\\\\\"]},\"get_dependency\":{\"name\":\"get_dependency\",\"args\":[],\"return_args\":{\"type_\":\"DependencyFile\",\"description\":\"DependencyFile\",\"compositions\":[\"DependencyFile\"]},\"description\":\"get_dependency(): DependencyFile\",\"aggregations\":[\"DependencyFile\"]},\"get_files\":{\"name\":\"get_files\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_files(relative_path: Path \\\\| str, root_relative_path: Path \\\\| str, filter_ignored): List\",\"aggregations\":[\"Path\\\\\"]},\"is_git_dir\":{\"name\":\"is_git_dir\",\"args\":[{\"name\":\"local_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"local_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_git_dir(local_path)\",\"aggregations\":[]},\"new_file_repository\":{\"name\":\"new_file_repository\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"FileRepository\",\"description\":\"FileRepository\",\"compositions\":[\"FileRepository\"]},\"description\":\"new_file_repository(relative_path: Path \\\\| str): FileRepository\",\"aggregations\":[\"FileRepository\",\"Path\\\\\"]},\"open\":{\"name\":\"open\",\"args\":[{\"name\":\"local_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"auto_init\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_init\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"open(local_path: Path, auto_init)\",\"aggregations\":[\"Path\"]},\"rename_root\":{\"name\":\"rename_root\",\"args\":[{\"name\":\"new_dir_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_dir_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rename_root(new_dir_name)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\",\"DependencyFile\",\"FileRepository\",\"Path\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:changed_files"}, {"id": "metagpt/utils/git_repository.py:GitRepository:is_valid"}, {"id": "{\"name\":\"is_valid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_valid\",\"compositions\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:status"}, {"id": "metagpt/utils/git_repository.py:GitRepository:workdir"}, {"id": "metagpt/utils/git_repository.py:GitRepository:add_change"}, {"id": "{\"name\":\"add_change\",\"args\":[{\"name\":\"files\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"files: Dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_change(files: Dict)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:archive"}, {"id": "{\"name\":\"archive\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(comments)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:commit"}, {"id": "{\"name\":\"commit\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"commit(comments)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:delete_repository"}, {"id": "{\"name\":\"delete_repository\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_repository()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:filter_gitignore"}, {"id": "{\"name\":\"filter_gitignore\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"filenames: List[str]\",\"compositions\":[]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"filter_gitignore(filenames: List[str], root_relative_path: Path \\\\| str): List[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:get_dependency"}, {"id": "{\"name\":\"get_dependency\",\"args\":[],\"return_args\":{\"type_\":\"DependencyFile\",\"description\":\"DependencyFile\",\"compositions\":[\"DependencyFile\"]},\"description\":\"get_dependency(): DependencyFile\",\"aggregations\":[\"DependencyFile\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:get_files"}, {"id": "{\"name\":\"get_files\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_files(relative_path: Path \\\\| str, root_relative_path: Path \\\\| str, filter_ignored): List\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:is_git_dir"}, {"id": "{\"name\":\"is_git_dir\",\"args\":[{\"name\":\"local_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"local_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_git_dir(local_path)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:new_file_repository"}, {"id": "{\"name\":\"new_file_repository\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"FileRepository\",\"description\":\"FileRepository\",\"compositions\":[\"FileRepository\"]},\"description\":\"new_file_repository(relative_path: Path \\\\| str): FileRepository\",\"aggregations\":[\"FileRepository\",\"Path\\\\\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:open"}, {"id": "{\"name\":\"open\",\"args\":[{\"name\":\"local_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"auto_init\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_init\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"open(local_path: Path, auto_init)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:rename_root"}, {"id": "{\"name\":\"rename_root\",\"args\":[{\"name\":\"new_dir_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_dir_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rename_root(new_dir_name)\",\"aggregations\":[]}"}, {"id": "?:DependencyFile"}, {"id": "?:FileRepository"}, {"id": "metagpt/tools/search_engine_googleapi.py"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper"}, {"id": "{\"name\":\"GoogleAPIWrapper\",\"package\":\"metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"cse_id\":{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]},\"executor\":{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]},\"google_api_client\":{\"name\":\"google_api_client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"google_api_client\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\\\\|list[dict]\",\"description\":\"str \\\\| list[dict]\",\"compositions\":[\"str\\\\\"]},\"description\":\"run(query: str, max_results: int, as_string: bool, focus: list[str] \\\\| None): str \\\\| list[dict]\",\"aggregations\":[\"str\\\\\",\"\\\\\"]},\"validate_google\":{\"name\":\"validate_google\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_google(values: dict): dict\",\"aggregations\":[]}},\"compositions\":[\"futures.Executor\",\"asyncio.AbstractEventLoop\"],\"aggregations\":[\"str\\\\\",\"\\\\\"]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:api_key"}, {"id": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:cse_id"}, {"id": "{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:executor"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client"}, {"id": "{\"name\":\"google_api_client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"google_api_client\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:loop"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:model_config"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:proxy"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\\\\|list[dict]\",\"description\":\"str \\\\| list[dict]\",\"compositions\":[\"str\\\\\"]},\"description\":\"run(query: str, max_results: int, as_string: bool, focus: list[str] \\\\| None): str \\\\| list[dict]\",\"aggregations\":[\"str\\\\\",\"\\\\\"]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:validate_google"}, {"id": "{\"name\":\"validate_google\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_google(values: dict): dict\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:GoogleDocstringParser"}, {"id": "{\"name\":\"GoogleDocstringParser\",\"package\":\"metagpt/utils/parse_docstring.py:GoogleDocstringParser\",\"attributes\":{\"docstring\":{\"name\":\"docstring\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"docstring : str\",\"compositions\":[]}},\"methods\":{\"check_and_parse_default_value\":{\"name\":\"check_and_parse_default_value\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_default_value(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]},\"check_and_parse_enum\":{\"name\":\"check_and_parse_enum\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_enum(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]},\"check_and_parse_optional\":{\"name\":\"check_and_parse_optional\",\"args\":[{\"name\":\"param_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_optional(param_type: str): Tuple[bool, str]\",\"aggregations\":[]},\"parse_desc\":{\"name\":\"parse_desc\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_desc(): str\",\"aggregations\":[]},\"parse_params\":{\"name\":\"parse_params\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str,str]]\",\"description\":\"list[Tuple[str, str, str]]\",\"compositions\":[]},\"description\":\"parse_params(): list[Tuple[str, str, str]]\",\"aggregations\":[]},\"parse_returns\":{\"name\":\"parse_returns\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str]]\",\"description\":\"list[Tuple[str, str]]\",\"compositions\":[]},\"description\":\"parse_returns(): list[Tuple[str, str]]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:docstring"}, {"id": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_default_value"}, {"id": "{\"name\":\"check_and_parse_default_value\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_default_value(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_enum"}, {"id": "{\"name\":\"check_and_parse_enum\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_enum(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_optional"}, {"id": "{\"name\":\"check_and_parse_optional\",\"args\":[{\"name\":\"param_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_optional(param_type: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_desc"}, {"id": "{\"name\":\"parse_desc\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_desc(): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_params"}, {"id": "{\"name\":\"parse_params\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str,str]]\",\"description\":\"list[Tuple[str, str, str]]\",\"compositions\":[]},\"description\":\"parse_params(): list[Tuple[str, str, str]]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_returns"}, {"id": "{\"name\":\"parse_returns\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str]]\",\"description\":\"list[Tuple[str, str]]\",\"compositions\":[]},\"description\":\"parse_returns(): list[Tuple[str, str]]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword"}, {"id": "{\"name\":\"GraphKeyword\",\"package\":\"metagpt/utils/graph_repository.py:GraphKeyword\",\"attributes\":{\"CLASS\":{\"name\":\"CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS : str\",\"compositions\":[]},\"CLASS_METHOD\":{\"name\":\"CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_METHOD : str\",\"compositions\":[]},\"CLASS_PROPERTY\":{\"name\":\"CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_PROPERTY : str\",\"compositions\":[]},\"FUNCTION\":{\"name\":\"FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FUNCTION : str\",\"compositions\":[]},\"GLOBAL_VARIABLE\":{\"name\":\"GLOBAL_VARIABLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"GLOBAL_VARIABLE : str\",\"compositions\":[]},\"HAS_CLASS\":{\"name\":\"HAS_CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS : str\",\"compositions\":[]},\"HAS_CLASS_METHOD\":{\"name\":\"HAS_CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_METHOD : str\",\"compositions\":[]},\"HAS_CLASS_PROPERTY\":{\"name\":\"HAS_CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_PROPERTY : str\",\"compositions\":[]},\"HAS_CLASS_USE_CASE\":{\"name\":\"HAS_CLASS_USE_CASE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_USE_CASE : str\",\"compositions\":[]},\"HAS_CLASS_VIEW\":{\"name\":\"HAS_CLASS_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_VIEW : str\",\"compositions\":[]},\"HAS_DETAIL\":{\"name\":\"HAS_DETAIL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_DETAIL : str\",\"compositions\":[]},\"HAS_FUNCTION\":{\"name\":\"HAS_FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_FUNCTION : str\",\"compositions\":[]},\"HAS_PAGE_INFO\":{\"name\":\"HAS_PAGE_INFO\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PAGE_INFO : str\",\"compositions\":[]},\"HAS_PARTICIPANT\":{\"name\":\"HAS_PARTICIPANT\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PARTICIPANT : str\",\"compositions\":[]},\"HAS_SEQUENCE_VIEW\":{\"name\":\"HAS_SEQUENCE_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW : str\",\"compositions\":[]},\"HAS_SEQUENCE_VIEW_VER\":{\"name\":\"HAS_SEQUENCE_VIEW_VER\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW_VER : str\",\"compositions\":[]},\"IS\":{\"name\":\"IS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS : str\",\"compositions\":[]},\"IS_AGGREGATE_OF\":{\"name\":\"IS_AGGREGATE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_AGGREGATE_OF : str\",\"compositions\":[]},\"IS_COMPOSITE_OF\":{\"name\":\"IS_COMPOSITE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_COMPOSITE_OF : str\",\"compositions\":[]},\"NULL\":{\"name\":\"NULL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"NULL : str\",\"compositions\":[]},\"OF\":{\"name\":\"OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"OF : str\",\"compositions\":[]},\"ON\":{\"name\":\"ON\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ON : str\",\"compositions\":[]},\"SOURCE_CODE\":{\"name\":\"SOURCE_CODE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"SOURCE_CODE : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS"}, {"id": "{\"name\":\"CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_METHOD"}, {"id": "{\"name\":\"CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_METHOD : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_PROPERTY"}, {"id": "{\"name\":\"CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_PROPERTY : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:FUNCTION"}, {"id": "{\"name\":\"FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FUNCTION : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:GLOBAL_VARIABLE"}, {"id": "{\"name\":\"GLOBAL_VARIABLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"GLOBAL_VARIABLE : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS"}, {"id": "{\"name\":\"HAS_CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_METHOD"}, {"id": "{\"name\":\"HAS_CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_METHOD : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_PROPERTY"}, {"id": "{\"name\":\"HAS_CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_PROPERTY : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_USE_CASE"}, {"id": "{\"name\":\"HAS_CLASS_USE_CASE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_USE_CASE : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_VIEW"}, {"id": "{\"name\":\"HAS_CLASS_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_VIEW : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_DETAIL"}, {"id": "{\"name\":\"HAS_DETAIL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_DETAIL : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_FUNCTION"}, {"id": "{\"name\":\"HAS_FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_FUNCTION : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PAGE_INFO"}, {"id": "{\"name\":\"HAS_PAGE_INFO\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PAGE_INFO : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PARTICIPANT"}, {"id": "{\"name\":\"HAS_PARTICIPANT\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PARTICIPANT : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW"}, {"id": "{\"name\":\"HAS_SEQUENCE_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW_VER"}, {"id": "{\"name\":\"HAS_SEQUENCE_VIEW_VER\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW_VER : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:IS"}, {"id": "{\"name\":\"IS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:IS_AGGREGATE_OF"}, {"id": "{\"name\":\"IS_AGGREGATE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_AGGREGATE_OF : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:IS_COMPOSITE_OF"}, {"id": "{\"name\":\"IS_COMPOSITE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_COMPOSITE_OF : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:NULL"}, {"id": "{\"name\":\"NULL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"NULL : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:OF"}, {"id": "{\"name\":\"OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"OF : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:ON"}, {"id": "{\"name\":\"ON\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ON : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:SOURCE_CODE"}, {"id": "{\"name\":\"SOURCE_CODE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"SOURCE_CODE : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository"}, {"id": "{\"name\":\"GraphRepository\",\"package\":\"metagpt/utils/graph_repository.py:GraphRepository\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]},\"insert\":{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]},\"rebuild_composition_relationship\":{\"name\":\"rebuild_composition_relationship\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_composition_relationship(graph_db: 'GraphRepository')\",\"aggregations\":[\"GraphRepository\"]},\"save\":{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]},\"select\":{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]},\"update_graph_db_with_class_relationship_views\":{\"name\":\"update_graph_db_with_class_relationship_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"relationship_views\",\"type_\":\"List[DotClassRelationship]\",\"default_\":\"\",\"description\":\"relationship_views: List[DotClassRelationship]\",\"compositions\":[\"DotClassRelationship\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_relationship_views(graph_db: 'GraphRepository', relationship_views: List[DotClassRelationship])\",\"aggregations\":[\"GraphRepository\",\"DotClassRelationship\"]},\"update_graph_db_with_class_views\":{\"name\":\"update_graph_db_with_class_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"class_views\",\"type_\":\"List[DotClassInfo]\",\"default_\":\"\",\"description\":\"class_views: List[DotClassInfo]\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_views(graph_db: 'GraphRepository', class_views: List[DotClassInfo])\",\"aggregations\":[\"GraphRepository\",\"DotClassInfo\"]},\"update_graph_db_with_file_info\":{\"name\":\"update_graph_db_with_file_info\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"file_info\",\"type_\":\"RepoFileInfo\",\"default_\":\"\",\"description\":\"file_info: RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_file_info(graph_db: 'GraphRepository', file_info: RepoFileInfo)\",\"aggregations\":[\"GraphRepository\",\"RepoFileInfo\"]}},\"compositions\":[],\"aggregations\":[\"GraphRepository\",\"SPO\",\"DotClassRelationship\",\"DotClassInfo\",\"RepoFileInfo\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:name"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:insert"}, {"id": "{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:rebuild_composition_relationship"}, {"id": "{\"name\":\"rebuild_composition_relationship\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_composition_relationship(graph_db: 'GraphRepository')\",\"aggregations\":[\"GraphRepository\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:save"}, {"id": "{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:select"}, {"id": "{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_relationship_views"}, {"id": "{\"name\":\"update_graph_db_with_class_relationship_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"relationship_views\",\"type_\":\"List[DotClassRelationship]\",\"default_\":\"\",\"description\":\"relationship_views: List[DotClassRelationship]\",\"compositions\":[\"DotClassRelationship\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_relationship_views(graph_db: 'GraphRepository', relationship_views: List[DotClassRelationship])\",\"aggregations\":[\"GraphRepository\",\"DotClassRelationship\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_views"}, {"id": "{\"name\":\"update_graph_db_with_class_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"class_views\",\"type_\":\"List[DotClassInfo]\",\"default_\":\"\",\"description\":\"class_views: List[DotClassInfo]\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_views(graph_db: 'GraphRepository', class_views: List[DotClassInfo])\",\"aggregations\":[\"GraphRepository\",\"DotClassInfo\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_file_info"}, {"id": "{\"name\":\"update_graph_db_with_file_info\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"file_info\",\"type_\":\"RepoFileInfo\",\"default_\":\"\",\"description\":\"file_info: RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_file_info(graph_db: 'GraphRepository', file_info: RepoFileInfo)\",\"aggregations\":[\"GraphRepository\",\"RepoFileInfo\"]}"}, {"id": "?:DotClassRelationship"}, {"id": "?:DotClassInfo"}, {"id": "?:RepoFileInfo"}, {"id": "metagpt/tools/libs/feature_engineering.py:GroupStat"}, {"id": "{\"name\":\"GroupStat\",\"package\":\"metagpt/tools/libs/feature_engineering.py:GroupStat\",\"attributes\":{\"agg_col\":{\"name\":\"agg_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"agg_col : str\",\"compositions\":[]},\"agg_funcs\":{\"name\":\"agg_funcs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"agg_funcs : list\",\"compositions\":[]},\"group_col\":{\"name\":\"group_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"group_col : str\",\"compositions\":[]},\"group_df\":{\"name\":\"group_df\",\"type_\":\"\",\"default_\":\"\",\"description\":\"group_df : NoneType\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:GroupStat:agg_col"}, {"id": "{\"name\":\"agg_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"agg_col : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:GroupStat:agg_funcs"}, {"id": "{\"name\":\"agg_funcs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"agg_funcs : list\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:GroupStat:group_col"}, {"id": "{\"name\":\"group_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"group_col : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:GroupStat:group_df"}, {"id": "{\"name\":\"group_df\",\"type_\":\"\",\"default_\":\"\",\"description\":\"group_df : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:GroupStat:fit"}, {"id": "metagpt/tools/libs/feature_engineering.py:GroupStat:transform"}, {"id": "metagpt/utils/human_interaction.py"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction"}, {"id": "{\"name\":\"HumanInteraction\",\"package\":\"metagpt/utils/human_interaction.py:HumanInteraction\",\"attributes\":{\"stop_list\":{\"name\":\"stop_list\",\"type_\":\"tuple\",\"default_\":\"\",\"description\":\"stop_list : tuple\",\"compositions\":[\"tuple\"]}},\"methods\":{\"check_input_type\":{\"name\":\"check_input_type\",\"args\":[{\"name\":\"input_str\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_str: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Tuple[bool,Any]\",\"description\":\"Tuple[bool, Any]\",\"compositions\":[]},\"description\":\"check_input_type(input_str: str, req_type: Type): Tuple[bool, Any]\",\"aggregations\":[\"Type\"]},\"input_num_until_valid\":{\"name\":\"input_num_until_valid\",\"args\":[{\"name\":\"num_max\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_max: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"input_num_until_valid(num_max: int): int\",\"aggregations\":[]},\"input_until_valid\":{\"name\":\"input_until_valid\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Any\",\"description\":\"Any\",\"compositions\":[]},\"description\":\"input_until_valid(prompt: str, req_type: Type): Any\",\"aggregations\":[\"Type\"]},\"interact_with_instruct_content\":{\"name\":\"interact_with_instruct_content\",\"args\":[{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content: BaseModel\",\"compositions\":[\"BaseModel\"]},{\"name\":\"mapping\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"mapping: dict\",\"compositions\":[]},{\"name\":\"interact_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"interact_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Any]\",\"description\":\"dict[str, Any]\",\"compositions\":[]},\"description\":\"interact_with_instruct_content(instruct_content: BaseModel, mapping: dict, interact_type: str): dict[str, Any]\",\"aggregations\":[\"BaseModel\"]},\"multilines_input\":{\"name\":\"multilines_input\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"multilines_input(prompt: str): str\",\"aggregations\":[]}},\"compositions\":[\"tuple\"],\"aggregations\":[\"Type\",\"BaseModel\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:stop_list"}, {"id": "{\"name\":\"stop_list\",\"type_\":\"tuple\",\"default_\":\"\",\"description\":\"stop_list : tuple\",\"compositions\":[\"tuple\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:check_input_type"}, {"id": "{\"name\":\"check_input_type\",\"args\":[{\"name\":\"input_str\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_str: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Tuple[bool,Any]\",\"description\":\"Tuple[bool, Any]\",\"compositions\":[]},\"description\":\"check_input_type(input_str: str, req_type: Type): Tuple[bool, Any]\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:input_num_until_valid"}, {"id": "{\"name\":\"input_num_until_valid\",\"args\":[{\"name\":\"num_max\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_max: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"input_num_until_valid(num_max: int): int\",\"aggregations\":[]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:input_until_valid"}, {"id": "{\"name\":\"input_until_valid\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Any\",\"description\":\"Any\",\"compositions\":[]},\"description\":\"input_until_valid(prompt: str, req_type: Type): Any\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:interact_with_instruct_content"}, {"id": "{\"name\":\"interact_with_instruct_content\",\"args\":[{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content: BaseModel\",\"compositions\":[\"BaseModel\"]},{\"name\":\"mapping\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"mapping: dict\",\"compositions\":[]},{\"name\":\"interact_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"interact_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Any]\",\"description\":\"dict[str, Any]\",\"compositions\":[]},\"description\":\"interact_with_instruct_content(instruct_content: BaseModel, mapping: dict, interact_type: str): dict[str, Any]\",\"aggregations\":[\"BaseModel\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:multilines_input"}, {"id": "{\"name\":\"multilines_input\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"multilines_input(prompt: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py"}, {"id": "metagpt/provider/human_provider.py:HumanProvider"}, {"id": "{\"name\":\"HumanProvider\",\"package\":\"metagpt/provider/human_provider.py:HumanProvider\",\"attributes\":{\"system_prompt\":{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"generator\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"generator: bool\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], generator: bool, timeout): str\",\"aggregations\":[]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"ask\":{\"name\":\"ask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(msg: str, timeout): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:system_prompt"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:aask"}, {"id": "{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"generator\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"generator: bool\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], generator: bool, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:acompletion"}, {"id": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:acompletion_text"}, {"id": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:ask"}, {"id": "{\"name\":\"ask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(msg: str, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS"}, {"id": "{\"name\":\"IFlyTekTTS\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTS\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_secret : str\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"app_id : str\",\"compositions\":[]}},\"methods\":{\"synthesize_speech\":{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output_file: str\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(text, output_file: str, voice)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_key"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_secret"}, {"id": "{\"name\":\"api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_secret : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:app_id"}, {"id": "{\"name\":\"app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"app_id : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:synthesize_speech"}, {"id": "{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output_file: str\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(text, output_file: str, voice)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse"}, {"id": "{\"name\":\"IFlyTekTTSResponse\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code : int\",\"compositions\":[]},\"data\":{\"name\":\"data\",\"type_\":\"Optional[AudioData]\",\"default_\":\"\",\"description\":\"data : Optional[AudioData]\",\"compositions\":[\"AudioData\"]},\"message\":{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]},\"sid\":{\"name\":\"sid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sid : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"AudioData\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:code"}, {"id": "{\"name\":\"code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:data"}, {"id": "{\"name\":\"data\",\"type_\":\"Optional[AudioData]\",\"default_\":\"\",\"description\":\"data : Optional[AudioData]\",\"compositions\":[\"AudioData\"]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:message"}, {"id": "{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:sid"}, {"id": "{\"name\":\"sid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sid : str\",\"compositions\":[]}"}, {"id": "?:AudioData"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus"}, {"id": "{\"name\":\"IFlyTekTTSStatus\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus:name"}, {"id": "metagpt/strategy/solver.py:IOSolver"}, {"id": "{\"name\":\"IOSolver\",\"package\":\"metagpt/strategy/solver.py:IOSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:IOSolver:solve"}, {"id": "metagpt/tools/metagpt_text_to_image.py"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult"}, {"id": "{\"name\":\"ImageResult\",\"package\":\"metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult\",\"attributes\":{\"images\":{\"name\":\"images\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"images : List\",\"compositions\":[]},\"parameters\":{\"name\":\"parameters\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"parameters : Dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:images"}, {"id": "{\"name\":\"images\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"images : List\",\"compositions\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:parameters"}, {"id": "{\"name\":\"parameters\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"parameters : Dict\",\"compositions\":[]}"}, {"id": "metagpt/document.py:IndexableDocument"}, {"id": "{\"name\":\"IndexableDocument\",\"package\":\"metagpt/document.py:IndexableDocument\",\"attributes\":{\"content_col\":{\"name\":\"content_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content_col : Optional[str]\",\"compositions\":[]},\"data\":{\"name\":\"data\",\"type_\":\"Union[pd.DataFrame,list]\",\"default_\":\"\",\"description\":\"data : Union[pd.DataFrame, list]\",\"compositions\":[\"pd.DataFrame\"]},\"meta_col\":{\"name\":\"meta_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"meta_col : Optional[str]\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"data_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"content_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content_col\",\"compositions\":[]},{\"name\":\"meta_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"meta_col\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(data_path: Path, content_col, meta_col)\",\"aggregations\":[\"Path\"]},\"get_docs_and_metadatas\":{\"name\":\"get_docs_and_metadatas\",\"args\":[{\"name\":\")\",\"type_\":\"(list\",\"default_\":\"\",\"description\":\"): (list\",\"compositions\":[]},{\"name\":\"list\",\"type_\":\"\",\"default_\":\"\",\"description\":\"list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_docs_and_metadatas(): (list, list)\",\"aggregations\":[]}},\"compositions\":[\"pd.DataFrame\"],\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/document.py:IndexableDocument:content_col"}, {"id": "{\"name\":\"content_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content_col : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document.py:IndexableDocument:data"}, {"id": "{\"name\":\"data\",\"type_\":\"Union[pd.DataFrame,list]\",\"default_\":\"\",\"description\":\"data : Union[pd.DataFrame, list]\",\"compositions\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/document.py:IndexableDocument:meta_col"}, {"id": "{\"name\":\"meta_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"meta_col : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document.py:IndexableDocument:model_config"}, {"id": "metagpt/document.py:IndexableDocument:from_path"}, {"id": "{\"name\":\"from_path\",\"args\":[{\"name\":\"data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"data_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"content_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content_col\",\"compositions\":[]},{\"name\":\"meta_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"meta_col\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(data_path: Path, content_col, meta_col)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/document.py:IndexableDocument:get_docs_and_metadatas"}, {"id": "{\"name\":\"get_docs_and_metadatas\",\"args\":[{\"name\":\")\",\"type_\":\"(list\",\"default_\":\"\",\"description\":\"): (list\",\"compositions\":[]},{\"name\":\"list\",\"type_\":\"\",\"default_\":\"\",\"description\":\"list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_docs_and_metadatas(): (list, list)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData"}, {"id": "{\"name\":\"InvoiceData\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoiceData\",\"attributes\":{\"invoice_data\":{\"name\":\"invoice_data\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"invoice_data : list[dict]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData:invoice_data"}, {"id": "{\"name\":\"invoice_data\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"invoice_data : list[dict]\",\"compositions\":[]}"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR"}, {"id": "{\"name\":\"InvoiceOCR\",\"package\":\"metagpt/actions/invoice_ocr.py:InvoiceOCR\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"run(file_path: Path): list\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:i_context"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:name"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"run(file_path: Path): list\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant"}, {"id": "{\"name\":\"InvoiceOCRAssistant\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"orc_data\":{\"name\":\"orc_data\",\"type_\":\"Optional[list]\",\"default_\":\"\",\"description\":\"orc_data : Optional[list]\",\"compositions\":[]},\"origin_query\":{\"name\":\"origin_query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"origin_query : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:constraints"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:filename"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:goal"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:language"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:name"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:orc_data"}, {"id": "{\"name\":\"orc_data\",\"type_\":\"Optional[list]\",\"default_\":\"\",\"description\":\"orc_data : Optional[list]\",\"compositions\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:origin_query"}, {"id": "{\"name\":\"origin_query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"origin_query : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:profile"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath"}, {"id": "{\"name\":\"InvoicePath\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoicePath\",\"attributes\":{\"file_path\":{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path : Path\",\"compositions\":[\"Path\"]}},\"methods\":{},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath:file_path"}, {"id": "{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path : Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder"}, {"id": "{\"name\":\"KFoldTargetMeanEncoder\",\"package\":\"metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder\",\"attributes\":{\"col\":{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]},\"encoder_dict\":{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]},\"label\":{\"name\":\"label\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label : str\",\"compositions\":[]},\"n_splits\":{\"name\":\"n_splits\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_splits : int\",\"compositions\":[]},\"random_state\":{\"name\":\"random_state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"random_state : int\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:col"}, {"id": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:encoder_dict"}, {"id": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:label"}, {"id": "{\"name\":\"label\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:n_splits"}, {"id": "{\"name\":\"n_splits\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_splits : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:random_state"}, {"id": "{\"name\":\"random_state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"random_state : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:fit"}, {"id": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:transform"}, {"id": "metagpt/configs/llm_config.py"}, {"id": "metagpt/configs/llm_config.py:LLMConfig"}, {"id": "{\"name\":\"LLMConfig\",\"package\":\"metagpt/configs/llm_config.py:LLMConfig\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_secret : Optional[str]\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]},\"api_version\":{\"name\":\"api_version\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_version : Optional[str]\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"app_id : Optional[str]\",\"compositions\":[]},\"base_url\":{\"name\":\"base_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"base_url : str\",\"compositions\":[]},\"best_of\":{\"name\":\"best_of\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"best_of : Optional[int]\",\"compositions\":[]},\"calc_usage\":{\"name\":\"calc_usage\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"calc_usage : bool\",\"compositions\":[]},\"domain\":{\"name\":\"domain\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"domain : Optional[str]\",\"compositions\":[]},\"frequency_penalty\":{\"name\":\"frequency_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"frequency_penalty : float\",\"compositions\":[]},\"logprobs\":{\"name\":\"logprobs\",\"type_\":\"Optional[bool]\",\"default_\":\"\",\"description\":\"logprobs : Optional[bool]\",\"compositions\":[]},\"max_token\":{\"name\":\"max_token\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_token : int\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]},\"n\":{\"name\":\"n\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"n : Optional[int]\",\"compositions\":[]},\"presence_penalty\":{\"name\":\"presence_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"presence_penalty : float\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"pricing_plan : Optional[str]\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]},\"repetition_penalty\":{\"name\":\"repetition_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"repetition_penalty : float\",\"compositions\":[]},\"stop\":{\"name\":\"stop\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"stop : Optional[str]\",\"compositions\":[]},\"stream\":{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream : bool\",\"compositions\":[]},\"temperature\":{\"name\":\"temperature\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"temperature : float\",\"compositions\":[]},\"timeout\":{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout : int\",\"compositions\":[]},\"top_k\":{\"name\":\"top_k\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"top_k : int\",\"compositions\":[]},\"top_logprobs\":{\"name\":\"top_logprobs\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"top_logprobs : Optional[int]\",\"compositions\":[]},\"top_p\":{\"name\":\"top_p\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"top_p : float\",\"compositions\":[]}},\"methods\":{\"check_llm_key\":{\"name\":\"check_llm_key\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_llm_key(v)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:api_key"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:api_secret"}, {"id": "{\"name\":\"api_secret\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_secret : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:api_type"}, {"id": "{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:api_version"}, {"id": "{\"name\":\"api_version\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_version : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:app_id"}, {"id": "{\"name\":\"app_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"app_id : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:base_url"}, {"id": "{\"name\":\"base_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"base_url : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:best_of"}, {"id": "{\"name\":\"best_of\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"best_of : Optional[int]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:calc_usage"}, {"id": "{\"name\":\"calc_usage\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"calc_usage : bool\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:domain"}, {"id": "{\"name\":\"domain\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"domain : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:frequency_penalty"}, {"id": "{\"name\":\"frequency_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"frequency_penalty : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:logprobs"}, {"id": "{\"name\":\"logprobs\",\"type_\":\"Optional[bool]\",\"default_\":\"\",\"description\":\"logprobs : Optional[bool]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:max_token"}, {"id": "{\"name\":\"max_token\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_token : int\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:model"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:n"}, {"id": "{\"name\":\"n\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"n : Optional[int]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:presence_penalty"}, {"id": "{\"name\":\"presence_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"presence_penalty : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:pricing_plan"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:proxy"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:repetition_penalty"}, {"id": "{\"name\":\"repetition_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"repetition_penalty : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:stop"}, {"id": "{\"name\":\"stop\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"stop : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:stream"}, {"id": "{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream : bool\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:temperature"}, {"id": "{\"name\":\"temperature\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"temperature : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:timeout"}, {"id": "{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout : int\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:top_k"}, {"id": "{\"name\":\"top_k\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"top_k : int\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:top_logprobs"}, {"id": "{\"name\":\"top_logprobs\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"top_logprobs : Optional[int]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:top_p"}, {"id": "{\"name\":\"top_p\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"top_p : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:check_llm_key"}, {"id": "{\"name\":\"check_llm_key\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_llm_key(v)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/llm_provider_registry.py"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry"}, {"id": "{\"name\":\"LLMProviderRegistry\",\"package\":\"metagpt/provider/llm_provider_registry.py:LLMProviderRegistry\",\"attributes\":{\"providers\":{\"name\":\"providers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"providers : dict\",\"compositions\":[]}},\"methods\":{\"get_provider\":{\"name\":\"get_provider\",\"args\":[{\"name\":\"enum\",\"type_\":\"LLMType\",\"default_\":\"\",\"description\":\"enum: LLMType\",\"compositions\":[\"LLMType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_provider(enum: LLMType)\",\"aggregations\":[\"LLMType\"]},\"register\":{\"name\":\"register\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"provider_cls\",\"type_\":\"\",\"default_\":\"\",\"description\":\"provider_cls\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register(key, provider_cls)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"LLMType\"]}"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:providers"}, {"id": "{\"name\":\"providers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"providers : dict\",\"compositions\":[]}"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:get_provider"}, {"id": "{\"name\":\"get_provider\",\"args\":[{\"name\":\"enum\",\"type_\":\"LLMType\",\"default_\":\"\",\"description\":\"enum: LLMType\",\"compositions\":[\"LLMType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_provider(enum: LLMType)\",\"aggregations\":[\"LLMType\"]}"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:register"}, {"id": "{\"name\":\"register\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"provider_cls\",\"type_\":\"\",\"default_\":\"\",\"description\":\"provider_cls\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register(key, provider_cls)\",\"aggregations\":[]}"}, {"id": "?:LLMType"}, {"id": "metagpt/configs/llm_config.py:LLMType"}, {"id": "{\"name\":\"LLMType\",\"package\":\"metagpt/configs/llm_config.py:LLMType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMType:name"}, {"id": "metagpt/tools/libs/data_preprocess.py:LabelEncode"}, {"id": "{\"name\":\"LabelEncode\",\"package\":\"metagpt/tools/libs/data_preprocess.py:LabelEncode\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"le_encoders\":{\"name\":\"le_encoders\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"le_encoders : list\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:LabelEncode:features"}, {"id": "metagpt/tools/libs/data_preprocess.py:LabelEncode:le_encoders"}, {"id": "{\"name\":\"le_encoders\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"le_encoders : list\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:LabelEncode:fit"}, {"id": "metagpt/tools/libs/data_preprocess.py:LabelEncode:transform"}, {"id": "metagpt/document_store/lancedb_store.py"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore"}, {"id": "{\"name\":\"LanceStore\",\"package\":\"metagpt/document_store/lancedb_store.py:LanceStore\",\"attributes\":{\"db\":{\"name\":\"db\",\"type_\":\"LanceDBConnection,RemoteDBConnection\",\"default_\":\"\",\"description\":\"db : LanceDBConnection, RemoteDBConnection\",\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\"]},\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"table\":{\"name\":\"table\",\"type_\":\"LanceTable,NoneType,RemoteTable\",\"default_\":\"\",\"description\":\"table : LanceTable, NoneType, RemoteTable\",\"compositions\":[\"LanceTable\",\"RemoteTable\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(data, metadata, _id)\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]},\"drop\":{\"name\":\"drop\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"drop(name)\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metric\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metric\",\"compositions\":[]},{\"name\":\"nprobes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"nprobes\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metric, nprobes)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(data, metadatas, ids)\",\"aggregations\":[]}},\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\",\"LanceTable\",\"RemoteTable\"],\"aggregations\":[]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:db"}, {"id": "{\"name\":\"db\",\"type_\":\"LanceDBConnection,RemoteDBConnection\",\"default_\":\"\",\"description\":\"db : LanceDBConnection, RemoteDBConnection\",\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\"]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:name"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:table"}, {"id": "{\"name\":\"table\",\"type_\":\"LanceTable,NoneType,RemoteTable\",\"default_\":\"\",\"description\":\"table : LanceTable, NoneType, RemoteTable\",\"compositions\":[\"LanceTable\",\"RemoteTable\"]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(data, metadata, _id)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:delete"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:drop"}, {"id": "{\"name\":\"drop\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"drop(name)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:persist"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metric\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metric\",\"compositions\":[]},{\"name\":\"nprobes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"nprobes\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metric, nprobes)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:write"}, {"id": "{\"name\":\"write\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(data, metadatas, ids)\",\"aggregations\":[]}"}, {"id": "?:LanceDBConnection"}, {"id": "?:RemoteDBConnection"}, {"id": "?:LanceTable"}, {"id": "?:RemoteTable"}, {"id": "metagpt/document_store/base_store.py:LocalStore"}, {"id": "{\"name\":\"LocalStore\",\"package\":\"metagpt/document_store/base_store.py:LocalStore\",\"attributes\":{\"cache_dir\":{\"name\":\"cache_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"cache_dir : Optional[Path]\",\"compositions\":[\"Path\"]},\"fname\":{\"name\":\"fname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"fname\",\"compositions\":[]},\"raw_data_path\":{\"name\":\"raw_data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"raw_data_path : Path\",\"compositions\":[\"Path\"]},\"store\":{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:cache_dir"}, {"id": "{\"name\":\"cache_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"cache_dir : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:fname"}, {"id": "{\"name\":\"fname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"fname\",\"compositions\":[]}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:raw_data_path"}, {"id": "{\"name\":\"raw_data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"raw_data_path : Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:store"}, {"id": "metagpt/memory/longterm_memory.py"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory"}, {"id": "{\"name\":\"LongTermMemory\",\"package\":\"metagpt/memory/longterm_memory.py:LongTermMemory\",\"attributes\":{\"memory_storage\":{\"name\":\"memory_storage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory_storage\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"msg_from_recover\":{\"name\":\"msg_from_recover\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"msg_from_recover : bool\",\"compositions\":[]},\"rc\":{\"name\":\"rc\",\"type_\":\"Optional[RoleContext]\",\"default_\":\"\",\"description\":\"rc : Optional[RoleContext]\",\"compositions\":[\"RoleContext\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]},\"clear\":{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]},\"find_news\":{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]},\"recover_memory\":{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]},{\"name\":\"rc\",\"type_\":\"RoleContext\",\"default_\":\"\",\"description\":\"rc: RoleContext\",\"compositions\":[\"RoleContext\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"recover_memory(role_id: str, rc: RoleContext)\",\"aggregations\":[\"RoleContext\"]}},\"compositions\":[\"RoleContext\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage"}, {"id": "{\"name\":\"memory_storage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory_storage\",\"compositions\":[]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:model_config"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:msg_from_recover"}, {"id": "{\"name\":\"msg_from_recover\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"msg_from_recover : bool\",\"compositions\":[]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:rc"}, {"id": "{\"name\":\"rc\",\"type_\":\"Optional[RoleContext]\",\"default_\":\"\",\"description\":\"rc : Optional[RoleContext]\",\"compositions\":[\"RoleContext\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:clear"}, {"id": "{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:find_news"}, {"id": "{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:recover_memory"}, {"id": "{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]},{\"name\":\"rc\",\"type_\":\"RoleContext\",\"default_\":\"\",\"description\":\"rc: RoleContext\",\"compositions\":[\"RoleContext\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"recover_memory(role_id: str, rc: RoleContext)\",\"aggregations\":[\"RoleContext\"]}"}, {"id": "?:RoleContext"}, {"id": "metagpt/strategy/tot.py:MCTSSolver"}, {"id": "{\"name\":\"MCTSSolver\",\"package\":\"metagpt/strategy/tot.py:MCTSSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:MCTSSolver:solve"}, {"id": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"id": "{\"name\":\"MLProcess\",\"package\":\"metagpt/tools/libs/data_preprocess.py:MLProcess\",\"attributes\":{},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"fit_transform\":{\"name\":\"fit_transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"fit_transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:MLProcess:fit"}, {"id": "metagpt/tools/libs/data_preprocess.py:MLProcess:fit_transform"}, {"id": "{\"name\":\"fit_transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"fit_transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:MLProcess:transform"}, {"id": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale"}, {"id": "{\"name\":\"MaxAbsScale\",\"package\":\"metagpt/tools/libs/data_preprocess.py:MaxAbsScale\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"MaxAbsScaler\",\"default_\":\"\",\"description\":\"model : MaxAbsScaler\",\"compositions\":[\"MaxAbsScaler\"]}},\"methods\":{},\"compositions\":[\"MaxAbsScaler\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:features"}, {"id": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:model"}, {"id": "{\"name\":\"model\",\"type_\":\"MaxAbsScaler\",\"default_\":\"\",\"description\":\"model : MaxAbsScaler\",\"compositions\":[\"MaxAbsScaler\"]}"}, {"id": "?:MaxAbsScaler"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine"}, {"id": "{\"name\":\"MeilisearchEngine\",\"package\":\"metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"Client\",\"default_\":\"\",\"description\":\"client : Client\",\"compositions\":[\"Client\"]}},\"methods\":{\"add_documents\":{\"name\":\"add_documents\",\"args\":[{\"name\":\"data_source\",\"type_\":\"DataSource\",\"default_\":\"\",\"description\":\"data_source: DataSource\",\"compositions\":[\"DataSource\"]},{\"name\":\"documents\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"documents: List[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_documents(data_source: DataSource, documents: List[dict])\",\"aggregations\":[\"DataSource\"]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query)\",\"aggregations\":[]},\"set_index\":{\"name\":\"set_index\",\"args\":[{\"name\":\"index\",\"type_\":\"\",\"default_\":\"\",\"description\":\"index\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_index(index)\",\"aggregations\":[]}},\"compositions\":[\"Client\"],\"aggregations\":[\"DataSource\"]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:client"}, {"id": "{\"name\":\"client\",\"type_\":\"Client\",\"default_\":\"\",\"description\":\"client : Client\",\"compositions\":[\"Client\"]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:add_documents"}, {"id": "{\"name\":\"add_documents\",\"args\":[{\"name\":\"data_source\",\"type_\":\"DataSource\",\"default_\":\"\",\"description\":\"data_source: DataSource\",\"compositions\":[\"DataSource\"]},{\"name\":\"documents\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"documents: List[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_documents(data_source: DataSource, documents: List[dict])\",\"aggregations\":[\"DataSource\"]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:set_index"}, {"id": "{\"name\":\"set_index\",\"args\":[{\"name\":\"index\",\"type_\":\"\",\"default_\":\"\",\"description\":\"index\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_index(index)\",\"aggregations\":[]}"}, {"id": "?:Client"}, {"id": "?:DataSource"}, {"id": "metagpt/memory/memory.py"}, {"id": "metagpt/memory/memory.py:Memory"}, {"id": "{\"name\":\"Memory\",\"package\":\"metagpt/memory/memory.py:Memory\",\"attributes\":{\"ignore_id\":{\"name\":\"ignore_id\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"ignore_id : bool\",\"compositions\":[]},\"index\":{\"name\":\"index\",\"type_\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_\":\"\",\"description\":\"index : DefaultDict[str, list[SerializeAsAny[Message]]]\",\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"]},\"storage\":{\"name\":\"storage\",\"type_\":\"list[SerializeAsAny[Message]]\",\"default_\":\"\",\"description\":\"storage : list[SerializeAsAny[Message]]\",\"compositions\":[\"Message\",\"SerializeAsAny\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]},\"add_batch\":{\"name\":\"add_batch\",\"args\":[{\"name\":\"messages\",\"type_\":\"Iterable[Message]\",\"default_\":\"\",\"description\":\"messages: Iterable[Message]\",\"compositions\":[\"Iterable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_batch(messages: Iterable[Message])\",\"aggregations\":[\"Message\",\"Iterable\"]},\"clear\":{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]},\"count\":{\"name\":\"count\",\"args\":[],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"count(): int\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]},\"delete_newest\":{\"name\":\"delete_newest\",\"args\":[],\"return_args\":{\"type_\":\"'Message'\",\"description\":\"'Message'\",\"compositions\":[\"Message\"]},\"description\":\"delete_newest(): 'Message'\",\"aggregations\":[\"Message\"]},\"find_news\":{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get(k): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_action\":{\"name\":\"get_by_action\",\"args\":[{\"name\":\"action\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_action(action): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_actions\":{\"name\":\"get_by_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"Set\",\"default_\":\"\",\"description\":\"actions: Set\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_actions(actions: Set): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_content\":{\"name\":\"get_by_content\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_content(content: str): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_role\":{\"name\":\"get_by_role\",\"args\":[{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_role(role: str): list[Message]\",\"aggregations\":[\"Message\"]},\"try_remember\":{\"name\":\"try_remember\",\"args\":[{\"name\":\"keyword\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"keyword: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"try_remember(keyword: str): list[Message]\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"],\"aggregations\":[\"Iterable\"]}"}, {"id": "metagpt/memory/memory.py:Memory:ignore_id"}, {"id": "{\"name\":\"ignore_id\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"ignore_id : bool\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory.py:Memory:index"}, {"id": "{\"name\":\"index\",\"type_\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_\":\"\",\"description\":\"index : DefaultDict[str, list[SerializeAsAny[Message]]]\",\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"]}"}, {"id": "metagpt/memory/memory.py:Memory:storage"}, {"id": "{\"name\":\"storage\",\"type_\":\"list[SerializeAsAny[Message]]\",\"default_\":\"\",\"description\":\"storage : list[SerializeAsAny[Message]]\",\"compositions\":[\"Message\",\"SerializeAsAny\"]}"}, {"id": "metagpt/memory/memory.py:Memory:add"}, {"id": "metagpt/memory/memory.py:Memory:add_batch"}, {"id": "{\"name\":\"add_batch\",\"args\":[{\"name\":\"messages\",\"type_\":\"Iterable[Message]\",\"default_\":\"\",\"description\":\"messages: Iterable[Message]\",\"compositions\":[\"Iterable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_batch(messages: Iterable[Message])\",\"aggregations\":[\"Message\",\"Iterable\"]}"}, {"id": "metagpt/memory/memory.py:Memory:clear"}, {"id": "metagpt/memory/memory.py:Memory:count"}, {"id": "{\"name\":\"count\",\"args\":[],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"count(): int\",\"aggregations\":[]}"}, {"id": "metagpt/memory/memory.py:Memory:delete"}, {"id": "metagpt/memory/memory.py:Memory:delete_newest"}, {"id": "{\"name\":\"delete_newest\",\"args\":[],\"return_args\":{\"type_\":\"'Message'\",\"description\":\"'Message'\",\"compositions\":[\"Message\"]},\"description\":\"delete_newest(): 'Message'\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:find_news"}, {"id": "metagpt/memory/memory.py:Memory:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get(k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:get_by_action"}, {"id": "{\"name\":\"get_by_action\",\"args\":[{\"name\":\"action\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_action(action): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:get_by_actions"}, {"id": "{\"name\":\"get_by_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"Set\",\"default_\":\"\",\"description\":\"actions: Set\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_actions(actions: Set): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:get_by_content"}, {"id": "{\"name\":\"get_by_content\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_content(content: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:get_by_role"}, {"id": "{\"name\":\"get_by_role\",\"args\":[{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_role(role: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:try_remember"}, {"id": "{\"name\":\"try_remember\",\"args\":[{\"name\":\"keyword\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"keyword: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"try_remember(keyword: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "?:DefaultDict"}, {"id": "metagpt/memory/memory_storage.py"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage"}, {"id": "{\"name\":\"MemoryStorage\",\"package\":\"metagpt/memory/memory_storage.py:MemoryStorage\",\"attributes\":{\"embedding\":{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]},\"is_initialized\":{\"name\":\"is_initialized\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_initialized\",\"compositions\":[]},\"mem_ttl\":{\"name\":\"mem_ttl\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mem_ttl : int\",\"compositions\":[]},\"role_id\":{\"name\":\"role_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"role_id : Optional[str]\",\"compositions\":[]},\"role_mem_path\":{\"name\":\"role_mem_path\",\"type_\":\"Optional[str],Path\",\"default_\":\"\",\"description\":\"role_mem_path : Optional[str], Path\",\"compositions\":[\"Path\"]},\"store\":{\"name\":\"store\",\"type_\":\"NoneType,Optional[FAISS]\",\"default_\":\"\",\"description\":\"store : NoneType, Optional[FAISS]\",\"compositions\":[\"FAISS\"]},\"threshold\":{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"add(message: Message): bool\",\"aggregations\":[\"Message\"]},\"clean\":{\"name\":\"clean\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clean()\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"recover_memory\":{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"recover_memory(role_id: str): list[Message]\",\"aggregations\":[\"Message\"]},\"search_dissimilar\":{\"name\":\"search_dissimilar\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"search_dissimilar(message: Message, k): list[Message]\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"OpenAIEmbeddings\",\"Path\",\"FAISS\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:embedding"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized"}, {"id": "{\"name\":\"is_initialized\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_initialized\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:mem_ttl"}, {"id": "{\"name\":\"mem_ttl\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mem_ttl : int\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:role_id"}, {"id": "{\"name\":\"role_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"role_id : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:role_mem_path"}, {"id": "{\"name\":\"role_mem_path\",\"type_\":\"Optional[str],Path\",\"default_\":\"\",\"description\":\"role_mem_path : Optional[str], Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:store"}, {"id": "{\"name\":\"store\",\"type_\":\"NoneType,Optional[FAISS]\",\"default_\":\"\",\"description\":\"store : NoneType, Optional[FAISS]\",\"compositions\":[\"FAISS\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:threshold"}, {"id": "{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"add(message: Message): bool\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:clean"}, {"id": "{\"name\":\"clean\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clean()\",\"aggregations\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:persist"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:recover_memory"}, {"id": "{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"recover_memory(role_id: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:search_dissimilar"}, {"id": "{\"name\":\"search_dissimilar\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"search_dissimilar(message: Message, k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "?:FAISS"}, {"id": "metagpt/configs/mermaid_config.py"}, {"id": "metagpt/configs/mermaid_config.py:MermaidConfig"}, {"id": "{\"name\":\"MermaidConfig\",\"package\":\"metagpt/configs/mermaid_config.py:MermaidConfig\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_\":\"\",\"description\":\"engine : Literal['nodejs', 'ink', 'playwright', 'pyppeteer']\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]},\"puppeteer_config\":{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]},\"pyppeteer_path\":{\"name\":\"pyppeteer_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"pyppeteer_path : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/mermaid_config.py:MermaidConfig:engine"}, {"id": "{\"name\":\"engine\",\"type_\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_\":\"\",\"description\":\"engine : Literal['nodejs', 'ink', 'playwright', 'pyppeteer']\",\"compositions\":[]}"}, {"id": "metagpt/configs/mermaid_config.py:MermaidConfig:path"}, {"id": "{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/mermaid_config.py:MermaidConfig:puppeteer_config"}, {"id": "{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/mermaid_config.py:MermaidConfig:pyppeteer_path"}, {"id": "{\"name\":\"pyppeteer_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"pyppeteer_path : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message"}, {"id": "{\"name\":\"Message\",\"package\":\"metagpt/schema.py:Message\",\"attributes\":{\"cause_by\":{\"name\":\"cause_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cause_by : str\",\"compositions\":[]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"id\":{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id : str\",\"compositions\":[]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"Optional[BaseModel]\",\"default_\":\"\",\"description\":\"instruct_content : Optional[BaseModel]\",\"compositions\":[\"BaseModel\"]},\"role\":{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]},\"send_to\":{\"name\":\"send_to\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"send_to : set[str]\",\"compositions\":[]},\"sent_from\":{\"name\":\"sent_from\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sent_from : str\",\"compositions\":[]}},\"methods\":{\"check_cause_by\":{\"name\":\"check_cause_by\",\"args\":[{\"name\":\"cause_by\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"cause_by: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_cause_by(cause_by: Any): str\",\"aggregations\":[]},\"check_id\":{\"name\":\"check_id\",\"args\":[{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_id(id: str): str\",\"aggregations\":[]},\"check_instruct_content\":{\"name\":\"check_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"ic: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"BaseModel\",\"description\":\"BaseModel\",\"compositions\":[\"BaseModel\"]},\"description\":\"check_instruct_content(ic: Any): BaseModel\",\"aggregations\":[\"BaseModel\"]},\"check_send_to\":{\"name\":\"check_send_to\",\"args\":[{\"name\":\"send_to\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"send_to: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"set\",\"description\":\"set\",\"compositions\":[]},\"description\":\"check_send_to(send_to: Any): set\",\"aggregations\":[]},\"check_sent_from\":{\"name\":\"check_sent_from\",\"args\":[{\"name\":\"sent_from\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"sent_from: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_sent_from(sent_from: Any): str\",\"aggregations\":[]},\"dump\":{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"val\",\"type_\":\"\",\"default_\":\"\",\"description\":\"val\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(val)\",\"aggregations\":[]},\"ser_instruct_content\":{\"name\":\"ser_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"ic: BaseModel\",\"compositions\":[\"BaseModel\"]}],\"return_args\":{\"type_\":\"Union[dict,None]\",\"description\":\"Union[dict, None]\",\"compositions\":[]},\"description\":\"ser_instruct_content(ic: BaseModel): Union[dict, None]\",\"aggregations\":[\"BaseModel\"]},\"to_dict\":{\"name\":\"to_dict\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"to_dict(): dict\",\"aggregations\":[]}},\"compositions\":[\"BaseModel\"],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:cause_by"}, {"id": "{\"name\":\"cause_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cause_by : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:content"}, {"id": "metagpt/schema.py:Message:id"}, {"id": "{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:instruct_content"}, {"id": "{\"name\":\"instruct_content\",\"type_\":\"Optional[BaseModel]\",\"default_\":\"\",\"description\":\"instruct_content : Optional[BaseModel]\",\"compositions\":[\"BaseModel\"]}"}, {"id": "metagpt/schema.py:Message:role"}, {"id": "{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:send_to"}, {"id": "{\"name\":\"send_to\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"send_to : set[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:sent_from"}, {"id": "{\"name\":\"sent_from\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sent_from : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:check_cause_by"}, {"id": "{\"name\":\"check_cause_by\",\"args\":[{\"name\":\"cause_by\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"cause_by: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_cause_by(cause_by: Any): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:check_id"}, {"id": "{\"name\":\"check_id\",\"args\":[{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_id(id: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:check_instruct_content"}, {"id": "{\"name\":\"check_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"ic: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"BaseModel\",\"description\":\"BaseModel\",\"compositions\":[\"BaseModel\"]},\"description\":\"check_instruct_content(ic: Any): BaseModel\",\"aggregations\":[\"BaseModel\"]}"}, {"id": "metagpt/schema.py:Message:check_send_to"}, {"id": "{\"name\":\"check_send_to\",\"args\":[{\"name\":\"send_to\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"send_to: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"set\",\"description\":\"set\",\"compositions\":[]},\"description\":\"check_send_to(send_to: Any): set\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:check_sent_from"}, {"id": "{\"name\":\"check_sent_from\",\"args\":[{\"name\":\"sent_from\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"sent_from: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_sent_from(sent_from: Any): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:dump"}, {"id": "{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:load"}, {"id": "{\"name\":\"load\",\"args\":[{\"name\":\"val\",\"type_\":\"\",\"default_\":\"\",\"description\":\"val\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(val)\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:ser_instruct_content"}, {"id": "{\"name\":\"ser_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"ic: BaseModel\",\"compositions\":[\"BaseModel\"]}],\"return_args\":{\"type_\":\"Union[dict,None]\",\"description\":\"Union[dict, None]\",\"compositions\":[]},\"description\":\"ser_instruct_content(ic: BaseModel): Union[dict, None]\",\"aggregations\":[\"BaseModel\"]}"}, {"id": "metagpt/schema.py:Message:to_dict"}, {"id": "{\"name\":\"to_dict\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"to_dict(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:MessageQueue"}, {"id": "{\"name\":\"MessageQueue\",\"package\":\"metagpt/schema.py:MessageQueue\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"dump\":{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]},\"empty\":{\"name\":\"empty\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"empty()\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'MessageQueue'\",\"description\":\"'MessageQueue'\",\"compositions\":[\"MessageQueue\"]},\"description\":\"load(data): 'MessageQueue'\",\"aggregations\":[\"MessageQueue\"]},\"pop\":{\"name\":\"pop\",\"args\":[],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"pop(): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]},\"pop_all\":{\"name\":\"pop_all\",\"args\":[],\"return_args\":{\"type_\":\"List[Message]\",\"description\":\"List[Message]\",\"compositions\":[\"Message\"]},\"description\":\"pop_all(): List[Message]\",\"aggregations\":[\"Message\"]},\"push\":{\"name\":\"push\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"push(msg: Message)\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"MessageQueue\",\"Message\\\\\",\"Message\"]}"}, {"id": "metagpt/schema.py:MessageQueue:model_config"}, {"id": "metagpt/schema.py:MessageQueue:dump"}, {"id": "metagpt/schema.py:MessageQueue:empty"}, {"id": "{\"name\":\"empty\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"empty()\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:MessageQueue:load"}, {"id": "{\"name\":\"load\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'MessageQueue'\",\"description\":\"'MessageQueue'\",\"compositions\":[\"MessageQueue\"]},\"description\":\"load(data): 'MessageQueue'\",\"aggregations\":[\"MessageQueue\"]}"}, {"id": "metagpt/schema.py:MessageQueue:pop"}, {"id": "{\"name\":\"pop\",\"args\":[],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"pop(): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]}"}, {"id": "metagpt/schema.py:MessageQueue:pop_all"}, {"id": "{\"name\":\"pop_all\",\"args\":[],\"return_args\":{\"type_\":\"List[Message]\",\"description\":\"List[Message]\",\"compositions\":[\"Message\"]},\"description\":\"pop_all(): List[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/schema.py:MessageQueue:push"}, {"id": "{\"name\":\"push\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"push(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "?:MessageQueue"}, {"id": "?:Message\\"}, {"id": "metagpt/roles/assistant.py:MessageType"}, {"id": "{\"name\":\"MessageType\",\"package\":\"metagpt/roles/assistant.py:MessageType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:MessageType:name"}, {"id": "metagpt/provider/metagpt_api.py"}, {"id": "metagpt/provider/metagpt_api.py:MetaGPTLLM"}, {"id": "{\"name\":\"MetaGPTLLM\",\"package\":\"metagpt/provider/metagpt_api.py:MetaGPTLLM\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image"}, {"id": "{\"name\":\"MetaGPTText2Image\",\"package\":\"metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image\",\"attributes\":{\"model_url\":{\"name\":\"model_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_url\",\"compositions\":[]}},\"methods\":{\"text_2_image\":{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:model_url"}, {"id": "{\"name\":\"model_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_url\",\"compositions\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image"}, {"id": "{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot_schema.py"}, {"id": "metagpt/strategy/tot_schema.py:MethodSelect"}, {"id": "{\"name\":\"MethodSelect\",\"package\":\"metagpt/strategy/tot_schema.py:MethodSelect\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:MethodSelect:name"}, {"id": "metagpt/tools/libs/data_preprocess.py:MinMaxScale"}, {"id": "{\"name\":\"MinMaxScale\",\"package\":\"metagpt/tools/libs/data_preprocess.py:MinMaxScale\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"MinMaxScaler\",\"default_\":\"\",\"description\":\"model : MinMaxScaler\",\"compositions\":[\"MinMaxScaler\"]}},\"methods\":{},\"compositions\":[\"MinMaxScaler\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:features"}, {"id": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:model"}, {"id": "{\"name\":\"model\",\"type_\":\"MinMaxScaler\",\"default_\":\"\",\"description\":\"model : MinMaxScaler\",\"compositions\":[\"MinMaxScaler\"]}"}, {"id": "?:MinMaxScaler"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv"}, {"id": "{\"name\":\"MincraftEnv\",\"package\":\"metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv\",\"attributes\":{\"chest_memory\":{\"name\":\"chest_memory\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"chest_memory : dict[str, Any]\",\"compositions\":[]},\"chest_observation\":{\"name\":\"chest_observation\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chest_observation : str\",\"compositions\":[]},\"code\":{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]},\"completed_tasks\":{\"name\":\"completed_tasks\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"completed_tasks : list[str]\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]},\"critique\":{\"name\":\"critique\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"critique : str\",\"compositions\":[]},\"current_task\":{\"name\":\"current_task\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_task : str\",\"compositions\":[]},\"event\":{\"name\":\"event\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"event : dict[str, Any]\",\"compositions\":[]},\"event_summary\":{\"name\":\"event_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"event_summary : str\",\"compositions\":[]},\"failed_tasks\":{\"name\":\"failed_tasks\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"failed_tasks : list[str]\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"program_code\":{\"name\":\"program_code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_code : str\",\"compositions\":[]},\"program_name\":{\"name\":\"program_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_name : str\",\"compositions\":[]},\"programs\":{\"name\":\"programs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"programs\",\"compositions\":[]},\"progress\":{\"name\":\"progress\",\"type_\":\"\",\"default_\":\"\",\"description\":\"progress\",\"compositions\":[]},\"qa_cache\":{\"name\":\"qa_cache\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"qa_cache : dict[str, str]\",\"compositions\":[]},\"qa_cache_questions_vectordb\":{\"name\":\"qa_cache_questions_vectordb\",\"type_\":\"\",\"default_\":\"\",\"description\":\"qa_cache_questions_vectordb\",\"compositions\":[]},\"retrieve_skills\":{\"name\":\"retrieve_skills\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"retrieve_skills : list[str]\",\"compositions\":[]},\"runtime_status\":{\"name\":\"runtime_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"runtime_status : bool\",\"compositions\":[]},\"skill_desp\":{\"name\":\"skill_desp\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_desp : str\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"skills : dict\",\"compositions\":[]},\"task_execution_time\":{\"name\":\"task_execution_time\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"task_execution_time : float\",\"compositions\":[]},\"vectordb\":{\"name\":\"vectordb\",\"type_\":\"\",\"default_\":\"\",\"description\":\"vectordb\",\"compositions\":[]}},\"methods\":{\"append_skill\":{\"name\":\"append_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"skill: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"append_skill(skill: dict)\",\"aggregations\":[]},\"on_event_execute\":{\"name\":\"on_event_execute\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_event_execute()\",\"aggregations\":[]},\"on_event_retrieve\":{\"name\":\"on_event_retrieve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_event_retrieve()\",\"aggregations\":[]},\"register_roles\":{\"name\":\"register_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Minecraft]\",\"default_\":\"\",\"description\":\"roles: Iterable['Minecraft']\",\"compositions\":[\"Iterable\",\"Minecraft\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register_roles(roles: Iterable['Minecraft'])\",\"aggregations\":[\"Minecraft\",\"Iterable\"]},\"reset_block_info\":{\"name\":\"reset_block_info\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset_block_info()\",\"aggregations\":[]},\"save_sorted_tasks\":{\"name\":\"save_sorted_tasks\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_sorted_tasks()\",\"aggregations\":[]},\"set_mc_port\":{\"name\":\"set_mc_port\",\"args\":[{\"name\":\"mc_port\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mc_port\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_port(mc_port)\",\"aggregations\":[]},\"set_mc_resume\":{\"name\":\"set_mc_resume\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_resume()\",\"aggregations\":[]},\"summarize_chatlog\":{\"name\":\"summarize_chatlog\",\"args\":[{\"name\":\"events\",\"type_\":\"\",\"default_\":\"\",\"description\":\"events\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_chatlog(events)\",\"aggregations\":[]},\"update_chest_memory\":{\"name\":\"update_chest_memory\",\"args\":[{\"name\":\"events\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"events: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_chest_memory(events: dict)\",\"aggregations\":[]},\"update_chest_observation\":{\"name\":\"update_chest_observation\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_chest_observation()\",\"aggregations\":[]},\"update_code\":{\"name\":\"update_code\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_code(code: str)\",\"aggregations\":[]},\"update_context\":{\"name\":\"update_context\",\"args\":[{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_context(context: str)\",\"aggregations\":[]},\"update_critique\":{\"name\":\"update_critique\",\"args\":[{\"name\":\"critique\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"critique: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_critique(critique: str)\",\"aggregations\":[]},\"update_event\":{\"name\":\"update_event\",\"args\":[{\"name\":\"event\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"event: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_event(event: dict)\",\"aggregations\":[]},\"update_exploration_progress\":{\"name\":\"update_exploration_progress\",\"args\":[{\"name\":\"success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"success: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_exploration_progress(success: bool)\",\"aggregations\":[]},\"update_program_code\":{\"name\":\"update_program_code\",\"args\":[{\"name\":\"program_code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_code: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_program_code(program_code: str)\",\"aggregations\":[]},\"update_program_name\":{\"name\":\"update_program_name\",\"args\":[{\"name\":\"program_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_program_name(program_name: str)\",\"aggregations\":[]},\"update_qa_cache\":{\"name\":\"update_qa_cache\",\"args\":[{\"name\":\"qa_cache\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"qa_cache: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_qa_cache(qa_cache: dict)\",\"aggregations\":[]},\"update_retrieve_skills\":{\"name\":\"update_retrieve_skills\",\"args\":[{\"name\":\"retrieve_skills\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"retrieve_skills: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_retrieve_skills(retrieve_skills: list)\",\"aggregations\":[]},\"update_skill_desp\":{\"name\":\"update_skill_desp\",\"args\":[{\"name\":\"skill_desp\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_desp: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_skill_desp(skill_desp: str)\",\"aggregations\":[]},\"update_task\":{\"name\":\"update_task\",\"args\":[{\"name\":\"task\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_task(task: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Minecraft\",\"Iterable\"]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:chest_memory"}, {"id": "{\"name\":\"chest_memory\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"chest_memory : dict[str, Any]\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:chest_observation"}, {"id": "{\"name\":\"chest_observation\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chest_observation : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:code"}, {"id": "{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:completed_tasks"}, {"id": "{\"name\":\"completed_tasks\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"completed_tasks : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:context"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:critique"}, {"id": "{\"name\":\"critique\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"critique : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:current_task"}, {"id": "{\"name\":\"current_task\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_task : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:event"}, {"id": "{\"name\":\"event\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"event : dict[str, Any]\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:event_summary"}, {"id": "{\"name\":\"event_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"event_summary : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:failed_tasks"}, {"id": "{\"name\":\"failed_tasks\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"failed_tasks : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:model_config"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:program_code"}, {"id": "{\"name\":\"program_code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_code : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:program_name"}, {"id": "{\"name\":\"program_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_name : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:programs"}, {"id": "{\"name\":\"programs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"programs\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:progress"}, {"id": "{\"name\":\"progress\",\"type_\":\"\",\"default_\":\"\",\"description\":\"progress\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:qa_cache"}, {"id": "{\"name\":\"qa_cache\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"qa_cache : dict[str, str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:qa_cache_questions_vectordb"}, {"id": "{\"name\":\"qa_cache_questions_vectordb\",\"type_\":\"\",\"default_\":\"\",\"description\":\"qa_cache_questions_vectordb\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:retrieve_skills"}, {"id": "{\"name\":\"retrieve_skills\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"retrieve_skills : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:runtime_status"}, {"id": "{\"name\":\"runtime_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"runtime_status : bool\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:skill_desp"}, {"id": "{\"name\":\"skill_desp\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_desp : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:skills"}, {"id": "{\"name\":\"skills\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"skills : dict\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:task_execution_time"}, {"id": "{\"name\":\"task_execution_time\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"task_execution_time : float\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:vectordb"}, {"id": "{\"name\":\"vectordb\",\"type_\":\"\",\"default_\":\"\",\"description\":\"vectordb\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:append_skill"}, {"id": "{\"name\":\"append_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"skill: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"append_skill(skill: dict)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:on_event_execute"}, {"id": "{\"name\":\"on_event_execute\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_event_execute()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:on_event_retrieve"}, {"id": "{\"name\":\"on_event_retrieve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_event_retrieve()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:register_roles"}, {"id": "{\"name\":\"register_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Minecraft]\",\"default_\":\"\",\"description\":\"roles: Iterable['Minecraft']\",\"compositions\":[\"Iterable\",\"Minecraft\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register_roles(roles: Iterable['Minecraft'])\",\"aggregations\":[\"Minecraft\",\"Iterable\"]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:reset_block_info"}, {"id": "{\"name\":\"reset_block_info\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset_block_info()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:save_sorted_tasks"}, {"id": "{\"name\":\"save_sorted_tasks\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_sorted_tasks()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:set_mc_port"}, {"id": "{\"name\":\"set_mc_port\",\"args\":[{\"name\":\"mc_port\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mc_port\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_port(mc_port)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:set_mc_resume"}, {"id": "{\"name\":\"set_mc_resume\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_resume()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:summarize_chatlog"}, {"id": "{\"name\":\"summarize_chatlog\",\"args\":[{\"name\":\"events\",\"type_\":\"\",\"default_\":\"\",\"description\":\"events\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_chatlog(events)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_chest_memory"}, {"id": "{\"name\":\"update_chest_memory\",\"args\":[{\"name\":\"events\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"events: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_chest_memory(events: dict)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_chest_observation"}, {"id": "{\"name\":\"update_chest_observation\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_chest_observation()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_code"}, {"id": "{\"name\":\"update_code\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_code(code: str)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_context"}, {"id": "{\"name\":\"update_context\",\"args\":[{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_context(context: str)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_critique"}, {"id": "{\"name\":\"update_critique\",\"args\":[{\"name\":\"critique\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"critique: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_critique(critique: str)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_event"}, {"id": "{\"name\":\"update_event\",\"args\":[{\"name\":\"event\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"event: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_event(event: dict)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_exploration_progress"}, {"id": "{\"name\":\"update_exploration_progress\",\"args\":[{\"name\":\"success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"success: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_exploration_progress(success: bool)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_program_code"}, {"id": "{\"name\":\"update_program_code\",\"args\":[{\"name\":\"program_code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_code: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_program_code(program_code: str)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_program_name"}, {"id": "{\"name\":\"update_program_name\",\"args\":[{\"name\":\"program_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_program_name(program_name: str)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_qa_cache"}, {"id": "{\"name\":\"update_qa_cache\",\"args\":[{\"name\":\"qa_cache\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"qa_cache: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_qa_cache(qa_cache: dict)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_retrieve_skills"}, {"id": "{\"name\":\"update_retrieve_skills\",\"args\":[{\"name\":\"retrieve_skills\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"retrieve_skills: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_retrieve_skills(retrieve_skills: list)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_skill_desp"}, {"id": "{\"name\":\"update_skill_desp\",\"args\":[{\"name\":\"skill_desp\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_desp: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_skill_desp(skill_desp: str)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_task"}, {"id": "{\"name\":\"update_task\",\"args\":[{\"name\":\"task\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_task(task: str)\",\"aggregations\":[]}"}, {"id": "?:Minecraft"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv"}, {"id": "{\"name\":\"MincraftExtEnv\",\"package\":\"metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv\",\"attributes\":{\"connected\":{\"name\":\"connected\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"connected : bool\",\"compositions\":[]},\"has_reset\":{\"name\":\"has_reset\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"has_reset : bool\",\"compositions\":[]},\"mc_port\":{\"name\":\"mc_port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"mc_port : Optional[int]\",\"compositions\":[]},\"mineflayer\":{\"name\":\"mineflayer\",\"type_\":\"Optional[SubprocessMonitor]\",\"default_\":\"\",\"description\":\"mineflayer : Optional[SubprocessMonitor]\",\"compositions\":[\"SubprocessMonitor\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"request_timeout\":{\"name\":\"request_timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"request_timeout : int\",\"compositions\":[]},\"reset_options\":{\"name\":\"reset_options\",\"type_\":\"Optional[dict]\",\"default_\":\"\",\"description\":\"reset_options : Optional[dict]\",\"compositions\":[]},\"server\":{\"name\":\"server\",\"type_\":\"\",\"default_\":\"\",\"description\":\"server\",\"compositions\":[]},\"server_host\":{\"name\":\"server_host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"server_host : str\",\"compositions\":[]},\"server_paused\":{\"name\":\"server_paused\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"server_paused : bool\",\"compositions\":[]},\"server_port\":{\"name\":\"server_port\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"server_port : str\",\"compositions\":[]},\"warm_up\":{\"name\":\"warm_up\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"warm_up : dict\",\"compositions\":[]}},\"methods\":{\"check_process\":{\"name\":\"check_process\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"check_process(): dict\",\"aggregations\":[]},\"close\":{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"close(): bool\",\"aggregations\":[]},\"pause\":{\"name\":\"pause\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"pause(): bool\",\"aggregations\":[]},\"reset\":{\"name\":\"reset\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"reset(): dict\",\"aggregations\":[]},\"set_mc_port\":{\"name\":\"set_mc_port\",\"args\":[{\"name\":\"mc_port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mc_port: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_port(mc_port: int)\",\"aggregations\":[]},\"step\":{\"name\":\"step\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"programs\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"programs: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"step(code: str, programs: str): dict\",\"aggregations\":[]},\"unpause\":{\"name\":\"unpause\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"unpause(): bool\",\"aggregations\":[]}},\"compositions\":[\"SubprocessMonitor\"],\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:connected"}, {"id": "{\"name\":\"connected\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"connected : bool\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:has_reset"}, {"id": "{\"name\":\"has_reset\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"has_reset : bool\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:mc_port"}, {"id": "{\"name\":\"mc_port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"mc_port : Optional[int]\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:mineflayer"}, {"id": "{\"name\":\"mineflayer\",\"type_\":\"Optional[SubprocessMonitor]\",\"default_\":\"\",\"description\":\"mineflayer : Optional[SubprocessMonitor]\",\"compositions\":[\"SubprocessMonitor\"]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:model_config"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:request_timeout"}, {"id": "{\"name\":\"request_timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"request_timeout : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:reset_options"}, {"id": "{\"name\":\"reset_options\",\"type_\":\"Optional[dict]\",\"default_\":\"\",\"description\":\"reset_options : Optional[dict]\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server"}, {"id": "{\"name\":\"server\",\"type_\":\"\",\"default_\":\"\",\"description\":\"server\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_host"}, {"id": "{\"name\":\"server_host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"server_host : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_paused"}, {"id": "{\"name\":\"server_paused\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"server_paused : bool\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_port"}, {"id": "{\"name\":\"server_port\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"server_port : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:warm_up"}, {"id": "{\"name\":\"warm_up\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"warm_up : dict\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:check_process"}, {"id": "{\"name\":\"check_process\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"check_process(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:close"}, {"id": "{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"close(): bool\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:pause"}, {"id": "{\"name\":\"pause\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"pause(): bool\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:reset"}, {"id": "{\"name\":\"reset\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"reset(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:set_mc_port"}, {"id": "{\"name\":\"set_mc_port\",\"args\":[{\"name\":\"mc_port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mc_port: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_port(mc_port: int)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:step"}, {"id": "{\"name\":\"step\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"programs\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"programs: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"step(code: str, programs: str): dict\",\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:unpause"}, {"id": "{\"name\":\"unpause\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"unpause(): bool\",\"aggregations\":[]}"}, {"id": "?:SubprocessMonitor"}, {"id": "metagpt/tools/moderation.py"}, {"id": "metagpt/tools/moderation.py:Moderation"}, {"id": "{\"name\":\"Moderation\",\"package\":\"metagpt/tools/moderation.py:Moderation\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"amoderation\":{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]},\"amoderation_with_categories\":{\"name\":\"amoderation_with_categories\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation_with_categories(content: Union[str, list[str]])\",\"aggregations\":[]},\"handle_moderation_results\":{\"name\":\"handle_moderation_results\",\"args\":[{\"name\":\"results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"results\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"handle_moderation_results(results)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/moderation.py:Moderation:llm"}, {"id": "metagpt/tools/moderation.py:Moderation:amoderation"}, {"id": "{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"id": "metagpt/tools/moderation.py:Moderation:amoderation_with_categories"}, {"id": "{\"name\":\"amoderation_with_categories\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation_with_categories(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"id": "metagpt/tools/moderation.py:Moderation:handle_moderation_results"}, {"id": "{\"name\":\"handle_moderation_results\",\"args\":[{\"name\":\"results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"results\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"handle_moderation_results(results)\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:NaiveSolver"}, {"id": "{\"name\":\"NaiveSolver\",\"package\":\"metagpt/strategy/solver.py:NaiveSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:NaiveSolver:solve"}, {"id": "{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:NoMoneyException"}, {"id": "{\"name\":\"NoMoneyException\",\"package\":\"metagpt/utils/common.py:NoMoneyException\",\"attributes\":{\"amount\":{\"name\":\"amount\",\"type_\":\"\",\"default_\":\"\",\"description\":\"amount\",\"compositions\":[]},\"message\":{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:NoMoneyException:amount"}, {"id": "{\"name\":\"amount\",\"type_\":\"\",\"default_\":\"\",\"description\":\"amount\",\"compositions\":[]}"}, {"id": "metagpt/utils/common.py:NoMoneyException:message"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:OCRResults"}, {"id": "{\"name\":\"OCRResults\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:OCRResults\",\"attributes\":{\"ocr_result\":{\"name\":\"ocr_result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ocr_result : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:OCRResults:ocr_result"}, {"id": "{\"name\":\"ocr_result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ocr_result : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/ollama_api.py"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"id": "{\"name\":\"OllamaLLM\",\"package\":\"metagpt/provider/ollama_api.py:OllamaLLM\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"http_method\":{\"name\":\"http_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"http_method : str\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]},\"suffix_url\":{\"name\":\"suffix_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"suffix_url : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: dict): str\",\"aggregations\":[]},\"get_usage\":{\"name\":\"get_usage\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(resp: dict): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:client"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:config"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:cost_manager"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:http_method"}, {"id": "{\"name\":\"http_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"http_method : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:model"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:pricing_plan"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:suffix_url"}, {"id": "{\"name\":\"suffix_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"suffix_url : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:use_system_prompt"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion_text"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:get_choice_text"}, {"id": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: dict): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:get_usage"}, {"id": "{\"name\":\"get_usage\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(resp: dict): dict\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:OneHotEncode"}, {"id": "{\"name\":\"OneHotEncode\",\"package\":\"metagpt/tools/libs/data_preprocess.py:OneHotEncode\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"OneHotEncoder\",\"default_\":\"\",\"description\":\"model : OneHotEncoder\",\"compositions\":[\"OneHotEncoder\"]}},\"methods\":{\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[\"OneHotEncoder\"],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:features"}, {"id": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:model"}, {"id": "{\"name\":\"model\",\"type_\":\"OneHotEncoder\",\"default_\":\"\",\"description\":\"model : OneHotEncoder\",\"compositions\":[\"OneHotEncoder\"]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:transform"}, {"id": "?:OneHotEncoder"}, {"id": "metagpt/provider/openai_api.py"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM"}, {"id": "{\"name\":\"OpenAILLM\",\"package\":\"metagpt/provider/openai_api.py:OpenAILLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"AsyncOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncOpenAI\",\"compositions\":[\"AsyncOpenAI\"]},\"auto_max_tokens\":{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}},\"methods\":{\"aask_code\":{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: list[dict]): dict\",\"aggregations\":[]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ChatCompletion\",\"description\":\"ChatCompletion\",\"compositions\":[\"ChatCompletion\"]},\"description\":\"acompletion(messages: list[dict], timeout): ChatCompletion\",\"aggregations\":[\"ChatCompletion\"]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"amoderation\":{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]},\"aspeech_to_text\":{\"name\":\"aspeech_to_text\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"aspeech_to_text()\",\"aggregations\":[]},\"atext_to_speech\":{\"name\":\"atext_to_speech\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"atext_to_speech()\",\"aggregations\":[]},\"gen_image\":{\"name\":\"gen_image\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"size\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"size: str\",\"compositions\":[]},{\"name\":\"quality\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"quality: str\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]},{\"name\":\"resp_format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list['Image']\",\"description\":\"list['Image']\",\"compositions\":[\"Image\"]},\"description\":\"gen_image(prompt: str, size: str, quality: str, model: str, resp_format: str): list['Image']\",\"aggregations\":[\"Image\"]},\"get_choice_function_arguments\":{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: ChatCompletion): dict\",\"aggregations\":[\"ChatCompletion\"]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: ChatCompletion): str\",\"aggregations\":[\"ChatCompletion\"]},\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[\"AsyncOpenAI\",\"CostManager\"],\"aggregations\":[\"ChatCompletion\",\"Image\",\"Costs\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:aclient"}, {"id": "{\"name\":\"aclient\",\"type_\":\"AsyncOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncOpenAI\",\"compositions\":[\"AsyncOpenAI\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:auto_max_tokens"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:config"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:cost_manager"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:model"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:pricing_plan"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:aask_code"}, {"id": "{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: list[dict]): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:acompletion"}, {"id": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ChatCompletion\",\"description\":\"ChatCompletion\",\"compositions\":[\"ChatCompletion\"]},\"description\":\"acompletion(messages: list[dict], timeout): ChatCompletion\",\"aggregations\":[\"ChatCompletion\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:acompletion_text"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:amoderation"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:aspeech_to_text"}, {"id": "{\"name\":\"aspeech_to_text\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"aspeech_to_text()\",\"aggregations\":[]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:atext_to_speech"}, {"id": "{\"name\":\"atext_to_speech\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"atext_to_speech()\",\"aggregations\":[]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:gen_image"}, {"id": "{\"name\":\"gen_image\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"size\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"size: str\",\"compositions\":[]},{\"name\":\"quality\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"quality: str\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]},{\"name\":\"resp_format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list['Image']\",\"description\":\"list['Image']\",\"compositions\":[\"Image\"]},\"description\":\"gen_image(prompt: str, size: str, quality: str, model: str, resp_format: str): list['Image']\",\"aggregations\":[\"Image\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_function_arguments"}, {"id": "{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: ChatCompletion): dict\",\"aggregations\":[\"ChatCompletion\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_text"}, {"id": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: ChatCompletion): str\",\"aggregations\":[\"ChatCompletion\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:get_costs"}, {"id": "?:ChatCompletion"}, {"id": "?:Image"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse"}, {"id": "{\"name\":\"OpenAIResponse\",\"package\":\"metagpt/provider/general_api_base.py:OpenAIResponse\",\"attributes\":{\"data\":{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},\"operation_location\":{\"name\":\"operation_location\",\"type_\":\"\",\"default_\":\"\",\"description\":\"operation_location\",\"compositions\":[]},\"organization\":{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization\",\"compositions\":[]},\"request_id\":{\"name\":\"request_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"request_id\",\"compositions\":[]},\"response_ms\":{\"name\":\"response_ms\",\"type_\":\"\",\"default_\":\"\",\"description\":\"response_ms\",\"compositions\":[]},\"retry_after\":{\"name\":\"retry_after\",\"type_\":\"\",\"default_\":\"\",\"description\":\"retry_after\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:data"}, {"id": "{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location"}, {"id": "{\"name\":\"operation_location\",\"type_\":\"\",\"default_\":\"\",\"description\":\"operation_location\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:organization"}, {"id": "{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id"}, {"id": "{\"name\":\"request_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"request_id\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms"}, {"id": "{\"name\":\"response_ms\",\"type_\":\"\",\"default_\":\"\",\"description\":\"response_ms\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after"}, {"id": "{\"name\":\"retry_after\",\"type_\":\"\",\"default_\":\"\",\"description\":\"retry_after\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding"}, {"id": "{\"name\":\"OpenAIText2Embedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}},\"methods\":{\"text_2_embedding\":{\"name\":\"text_2_embedding\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_embedding(text, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:api_key"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:proxy"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:text_2_embedding"}, {"id": "{\"name\":\"text_2_embedding\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_embedding(text, model)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_image.py"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image"}, {"id": "{\"name\":\"OpenAIText2Image\",\"package\":\"metagpt/tools/openai_text_to_image.py:OpenAIText2Image\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"get_image_data\":{\"name\":\"get_image_data\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_image_data(url)\",\"aggregations\":[]},\"text_2_image\":{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:get_image_data"}, {"id": "{\"name\":\"get_image_data\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_image_data(url)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:text_2_image"}, {"id": "metagpt/provider/open_llm_api.py"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM"}, {"id": "{\"name\":\"OpenLLM\",\"package\":\"metagpt/provider/open_llm_api.py:OpenLLM\",\"attributes\":{\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}},\"methods\":{\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:cost_manager"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:get_costs"}, {"id": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode"}, {"id": "{\"name\":\"OrdinalEncode\",\"package\":\"metagpt/tools/libs/data_preprocess.py:OrdinalEncode\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"OrdinalEncoder\",\"default_\":\"\",\"description\":\"model : OrdinalEncoder\",\"compositions\":[\"OrdinalEncoder\"]}},\"methods\":{},\"compositions\":[\"OrdinalEncoder\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:features"}, {"id": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:model"}, {"id": "{\"name\":\"model\",\"type_\":\"OrdinalEncoder\",\"default_\":\"\",\"description\":\"model : OrdinalEncoder\",\"compositions\":[\"OrdinalEncoder\"]}"}, {"id": "?:OrdinalEncoder"}, {"id": "metagpt/utils/common.py:OutputParser"}, {"id": "{\"name\":\"OutputParser\",\"package\":\"metagpt/utils/common.py:OutputParser\",\"attributes\":{},\"methods\":{\"extract_content\":{\"name\":\"extract_content\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_content(text, tag)\",\"aggregations\":[]},\"extract_struct\":{\"name\":\"extract_struct\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"data_type\",\"type_\":\"Union[type(list),type(dict)]\",\"default_\":\"\",\"description\":\"data_type: Union[type(list), type(dict)]\",\"compositions\":[\"type\"]}],\"return_args\":{\"type_\":\"Union[list,dict]\",\"description\":\"Union[list, dict]\",\"compositions\":[]},\"description\":\"extract_struct(text: str, data_type: Union[type(list), type(dict)]): Union[list, dict]\",\"aggregations\":[\"type\"]},\"parse_blocks\":{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]},\"parse_code\":{\"name\":\"parse_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(text: str, lang: str): str\",\"aggregations\":[]},\"parse_data\":{\"name\":\"parse_data\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data(data)\",\"aggregations\":[]},\"parse_data_with_mapping\":{\"name\":\"parse_data_with_mapping\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mapping\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data_with_mapping(data, mapping)\",\"aggregations\":[]},\"parse_file_list\":{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(text: str): list[str]\",\"aggregations\":[]},\"parse_python_code\":{\"name\":\"parse_python_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_python_code(text: str): str\",\"aggregations\":[]},\"parse_str\":{\"name\":\"parse_str\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(text: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"type\"]}"}, {"id": "metagpt/utils/common.py:OutputParser:extract_content"}, {"id": "{\"name\":\"extract_content\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_content(text, tag)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:extract_struct"}, {"id": "{\"name\":\"extract_struct\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"data_type\",\"type_\":\"Union[type(list),type(dict)]\",\"default_\":\"\",\"description\":\"data_type: Union[type(list), type(dict)]\",\"compositions\":[\"type\"]}],\"return_args\":{\"type_\":\"Union[list,dict]\",\"description\":\"Union[list, dict]\",\"compositions\":[]},\"description\":\"extract_struct(text: str, data_type: Union[type(list), type(dict)]): Union[list, dict]\",\"aggregations\":[\"type\"]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_blocks"}, {"id": "metagpt/utils/common.py:OutputParser:parse_code"}, {"id": "{\"name\":\"parse_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(text: str, lang: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_data"}, {"id": "{\"name\":\"parse_data\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data(data)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_data_with_mapping"}, {"id": "{\"name\":\"parse_data_with_mapping\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mapping\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data_with_mapping(data, mapping)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_file_list"}, {"id": "{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(text: str): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_python_code"}, {"id": "{\"name\":\"parse_python_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_python_code(text: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_str"}, {"id": "{\"name\":\"parse_str\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(text: str)\",\"aggregations\":[]}"}, {"id": "?:type"}, {"id": "metagpt/learn/skill_loader.py:Parameter"}, {"id": "{\"name\":\"Parameter\",\"package\":\"metagpt/learn/skill_loader.py:Parameter\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]},\"type\":{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Parameter:description"}, {"id": "{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Parameter:type"}, {"id": "{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Plan"}, {"id": "{\"name\":\"Plan\",\"package\":\"metagpt/schema.py:Plan\",\"attributes\":{\"context\":{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]},\"current_task\":{\"name\":\"current_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task\",\"compositions\":[]},\"current_task_id\":{\"name\":\"current_task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_task_id : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"task_map\":{\"name\":\"task_map\",\"type_\":\"dict[str,Task]\",\"default_\":\"\",\"description\":\"task_map : dict[str, Task]\",\"compositions\":[\"Task\"]},\"tasks\":{\"name\":\"tasks\",\"type_\":\"list[Task]\",\"default_\":\"\",\"description\":\"tasks : list[Task]\",\"compositions\":[\"Task\"]}},\"methods\":{\"add_tasks\":{\"name\":\"add_tasks\",\"args\":[{\"name\":\"tasks\",\"type_\":\"list[Task]\",\"default_\":\"\",\"description\":\"tasks: list[Task]\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_tasks(tasks: list[Task])\",\"aggregations\":[\"Task\"]},\"append_task\":{\"name\":\"append_task\",\"args\":[{\"name\":\"new_task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"new_task: Task\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"append_task(new_task: Task)\",\"aggregations\":[\"Task\"]},\"finish_current_task\":{\"name\":\"finish_current_task\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"finish_current_task()\",\"aggregations\":[]},\"get_finished_tasks\":{\"name\":\"get_finished_tasks\",\"args\":[],\"return_args\":{\"type_\":\"list[Task]\",\"description\":\"list[Task]\",\"compositions\":[\"Task\"]},\"description\":\"get_finished_tasks(): list[Task]\",\"aggregations\":[\"Task\"]},\"has_task_id\":{\"name\":\"has_task_id\",\"args\":[{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"has_task_id(task_id: str): bool\",\"aggregations\":[]},\"replace_task\":{\"name\":\"replace_task\",\"args\":[{\"name\":\"new_task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"new_task: Task\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"replace_task(new_task: Task)\",\"aggregations\":[\"Task\"]},\"reset_task\":{\"name\":\"reset_task\",\"args\":[{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset_task(task_id: str)\",\"aggregations\":[]}},\"compositions\":[\"Task\"],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Plan:context"}, {"id": "metagpt/schema.py:Plan:current_task"}, {"id": "{\"name\":\"current_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Plan:current_task_id"}, {"id": "{\"name\":\"current_task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_task_id : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Plan:goal"}, {"id": "metagpt/schema.py:Plan:task_map"}, {"id": "{\"name\":\"task_map\",\"type_\":\"dict[str,Task]\",\"default_\":\"\",\"description\":\"task_map : dict[str, Task]\",\"compositions\":[\"Task\"]}"}, {"id": "metagpt/schema.py:Plan:tasks"}, {"id": "{\"name\":\"tasks\",\"type_\":\"list[Task]\",\"default_\":\"\",\"description\":\"tasks : list[Task]\",\"compositions\":[\"Task\"]}"}, {"id": "metagpt/schema.py:Plan:add_tasks"}, {"id": "{\"name\":\"add_tasks\",\"args\":[{\"name\":\"tasks\",\"type_\":\"list[Task]\",\"default_\":\"\",\"description\":\"tasks: list[Task]\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_tasks(tasks: list[Task])\",\"aggregations\":[\"Task\"]}"}, {"id": "metagpt/schema.py:Plan:append_task"}, {"id": "{\"name\":\"append_task\",\"args\":[{\"name\":\"new_task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"new_task: Task\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"append_task(new_task: Task)\",\"aggregations\":[\"Task\"]}"}, {"id": "metagpt/schema.py:Plan:finish_current_task"}, {"id": "{\"name\":\"finish_current_task\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"finish_current_task()\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Plan:get_finished_tasks"}, {"id": "{\"name\":\"get_finished_tasks\",\"args\":[],\"return_args\":{\"type_\":\"list[Task]\",\"description\":\"list[Task]\",\"compositions\":[\"Task\"]},\"description\":\"get_finished_tasks(): list[Task]\",\"aggregations\":[\"Task\"]}"}, {"id": "metagpt/schema.py:Plan:has_task_id"}, {"id": "{\"name\":\"has_task_id\",\"args\":[{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"has_task_id(task_id: str): bool\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Plan:replace_task"}, {"id": "{\"name\":\"replace_task\",\"args\":[{\"name\":\"new_task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"new_task: Task\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"replace_task(new_task: Task)\",\"aggregations\":[\"Task\"]}"}, {"id": "metagpt/schema.py:Plan:reset_task"}, {"id": "{\"name\":\"reset_task\",\"args\":[{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset_task(task_id: str)\",\"aggregations\":[]}"}, {"id": "?:Task"}, {"id": "metagpt/strategy/planner.py"}, {"id": "metagpt/strategy/planner.py:Planner"}, {"id": "{\"name\":\"Planner\",\"package\":\"metagpt/strategy/planner.py:Planner\",\"attributes\":{\"auto_run\":{\"name\":\"auto_run\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_run : bool\",\"compositions\":[]},\"current_task\":{\"name\":\"current_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task\",\"compositions\":[]},\"current_task_id\":{\"name\":\"current_task_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task_id\",\"compositions\":[]},\"plan\":{\"name\":\"plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"plan\",\"compositions\":[]},\"use_tools\":{\"name\":\"use_tools\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_tools : bool\",\"compositions\":[]},\"working_memory\":{\"name\":\"working_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_memory\",\"compositions\":[]}},\"methods\":{\"ask_review\":{\"name\":\"ask_review\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]},{\"name\":\"auto_run\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_run: bool\",\"compositions\":[]},{\"name\":\"trigger\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"trigger: str\",\"compositions\":[]},{\"name\":\"review_context_len\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"review_context_len: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_review(task_result: TaskResult, auto_run: bool, trigger: str, review_context_len: int)\",\"aggregations\":[\"TaskResult\"]},\"confirm_task\":{\"name\":\"confirm_task\",\"args\":[{\"name\":\"task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"task: Task\",\"compositions\":[\"Task\"]},{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]},{\"name\":\"review\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"review: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"confirm_task(task: Task, task_result: TaskResult, review: str)\",\"aggregations\":[\"TaskResult\",\"Task\"]},\"get_useful_memories\":{\"name\":\"get_useful_memories\",\"args\":[{\"name\":\"task_exclude_field\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task_exclude_field\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_useful_memories(task_exclude_field): list[Message]\",\"aggregations\":[\"Message\"]},\"process_task_result\":{\"name\":\"process_task_result\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"process_task_result(task_result: TaskResult)\",\"aggregations\":[\"TaskResult\"]},\"update_plan\":{\"name\":\"update_plan\",\"args\":[{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal: str\",\"compositions\":[]},{\"name\":\"max_tasks\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_tasks: int\",\"compositions\":[]},{\"name\":\"max_retries\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_retries: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_plan(goal: str, max_tasks: int, max_retries: int)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"TaskResult\",\"Task\",\"Message\"]}"}, {"id": "metagpt/strategy/planner.py:Planner:auto_run"}, {"id": "{\"name\":\"auto_run\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_run : bool\",\"compositions\":[]}"}, {"id": "metagpt/strategy/planner.py:Planner:current_task"}, {"id": "metagpt/strategy/planner.py:Planner:current_task_id"}, {"id": "{\"name\":\"current_task_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task_id\",\"compositions\":[]}"}, {"id": "metagpt/strategy/planner.py:Planner:plan"}, {"id": "{\"name\":\"plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"plan\",\"compositions\":[]}"}, {"id": "metagpt/strategy/planner.py:Planner:use_tools"}, {"id": "{\"name\":\"use_tools\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_tools : bool\",\"compositions\":[]}"}, {"id": "metagpt/strategy/planner.py:Planner:working_memory"}, {"id": "{\"name\":\"working_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_memory\",\"compositions\":[]}"}, {"id": "metagpt/strategy/planner.py:Planner:ask_review"}, {"id": "{\"name\":\"ask_review\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]},{\"name\":\"auto_run\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_run: bool\",\"compositions\":[]},{\"name\":\"trigger\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"trigger: str\",\"compositions\":[]},{\"name\":\"review_context_len\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"review_context_len: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_review(task_result: TaskResult, auto_run: bool, trigger: str, review_context_len: int)\",\"aggregations\":[\"TaskResult\"]}"}, {"id": "metagpt/strategy/planner.py:Planner:confirm_task"}, {"id": "{\"name\":\"confirm_task\",\"args\":[{\"name\":\"task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"task: Task\",\"compositions\":[\"Task\"]},{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]},{\"name\":\"review\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"review: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"confirm_task(task: Task, task_result: TaskResult, review: str)\",\"aggregations\":[\"TaskResult\",\"Task\"]}"}, {"id": "metagpt/strategy/planner.py:Planner:get_useful_memories"}, {"id": "{\"name\":\"get_useful_memories\",\"args\":[{\"name\":\"task_exclude_field\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task_exclude_field\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_useful_memories(task_exclude_field): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/strategy/planner.py:Planner:process_task_result"}, {"id": "{\"name\":\"process_task_result\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"process_task_result(task_result: TaskResult)\",\"aggregations\":[\"TaskResult\"]}"}, {"id": "metagpt/strategy/planner.py:Planner:update_plan"}, {"id": "{\"name\":\"update_plan\",\"args\":[{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal: str\",\"compositions\":[]},{\"name\":\"max_tasks\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_tasks: int\",\"compositions\":[]},{\"name\":\"max_retries\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_retries: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_plan(goal: str, max_tasks: int, max_retries: int)\",\"aggregations\":[]}"}, {"id": "?:TaskResult"}, {"id": "metagpt/tools/web_browser_engine_playwright.py"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper"}, {"id": "{\"name\":\"PlaywrightWrapper\",\"package\":\"metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit']\",\"compositions\":[]},\"context_kwargs\":{\"name\":\"context_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"context_kwargs : dict\",\"compositions\":[]},\"launch_kwargs\":{\"name\":\"launch_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"launch_kwargs : dict\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}},\"compositions\":[],\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:browser_type"}, {"id": "{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit']\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:context_kwargs"}, {"id": "{\"name\":\"context_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"context_kwargs : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:launch_kwargs"}, {"id": "{\"name\":\"launch_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"launch_kwargs : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:proxy"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}"}, {"id": "?:WebPage"}, {"id": "?:WebPage\\"}, {"id": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion"}, {"id": "{\"name\":\"PolynomialExpansion\",\"package\":\"metagpt/tools/libs/feature_engineering.py:PolynomialExpansion\",\"attributes\":{\"cols\":{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]},\"degree\":{\"name\":\"degree\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"degree : int\",\"compositions\":[]},\"label_col\":{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]},\"poly\":{\"name\":\"poly\",\"type_\":\"PolynomialFeatures\",\"default_\":\"\",\"description\":\"poly : PolynomialFeatures\",\"compositions\":[\"PolynomialFeatures\"]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[\"PolynomialFeatures\"],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:cols"}, {"id": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:degree"}, {"id": "{\"name\":\"degree\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"degree : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:label_col"}, {"id": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:poly"}, {"id": "{\"name\":\"poly\",\"type_\":\"PolynomialFeatures\",\"default_\":\"\",\"description\":\"poly : PolynomialFeatures\",\"compositions\":[\"PolynomialFeatures\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:fit"}, {"id": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:transform"}, {"id": "?:PolynomialFeatures"}, {"id": "metagpt/actions/prepare_documents.py"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments"}, {"id": "{\"name\":\"PrepareDocuments\",\"package\":\"metagpt/actions/prepare_documents.py:PrepareDocuments\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:config"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:i_context"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:name"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/prepare_interview.py"}, {"id": "metagpt/actions/prepare_interview.py:PrepareInterview"}, {"id": "{\"name\":\"PrepareInterview\",\"package\":\"metagpt/actions/prepare_interview.py:PrepareInterview\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/prepare_interview.py:PrepareInterview:name"}, {"id": "metagpt/actions/prepare_interview.py:PrepareInterview:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/product_manager.py"}, {"id": "metagpt/roles/product_manager.py:ProductManager"}, {"id": "{\"name\":\"ProductManager\",\"package\":\"metagpt/roles/product_manager.py:ProductManager\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"todo_action\":{\"name\":\"todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"todo_action : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/product_manager.py:ProductManager:constraints"}, {"id": "metagpt/roles/product_manager.py:ProductManager:goal"}, {"id": "metagpt/roles/product_manager.py:ProductManager:name"}, {"id": "metagpt/roles/product_manager.py:ProductManager:profile"}, {"id": "metagpt/roles/product_manager.py:ProductManager:todo_action"}, {"id": "{\"name\":\"todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"todo_action : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/project_manager.py"}, {"id": "metagpt/roles/project_manager.py:ProjectManager"}, {"id": "{\"name\":\"ProjectManager\",\"package\":\"metagpt/roles/project_manager.py:ProjectManager\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:constraints"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:goal"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:name"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:profile"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo"}, {"id": "{\"name\":\"ProjectRepo\",\"package\":\"metagpt/utils/project_repo.py:ProjectRepo\",\"attributes\":{\"docs\":{\"name\":\"docs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"docs\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]},\"requirement\":{\"name\":\"requirement\",\"type_\":\"\",\"default_\":\"\",\"description\":\"requirement\",\"compositions\":[]},\"resources\":{\"name\":\"resources\",\"type_\":\"\",\"default_\":\"\",\"description\":\"resources\",\"compositions\":[]},\"src_relative_path\":{\"name\":\"src_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_relative_path\",\"compositions\":[]},\"srcs\":{\"name\":\"srcs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"srcs\",\"compositions\":[]},\"test_outputs\":{\"name\":\"test_outputs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"test_outputs\",\"compositions\":[]},\"tests\":{\"name\":\"tests\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tests\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"code_files_exists\":{\"name\":\"code_files_exists\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"code_files_exists(): bool\",\"aggregations\":[]},\"with_src_path\":{\"name\":\"with_src_path\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"ProjectRepo\",\"description\":\"ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},\"description\":\"with_src_path(path: str \\\\| Path): ProjectRepo\",\"aggregations\":[\"str\\\\\",\"Path\",\"ProjectRepo\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\",\"ProjectRepo\"]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:docs"}, {"id": "{\"name\":\"docs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"docs\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:git_repo"}, {"id": "{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:requirement"}, {"id": "{\"name\":\"requirement\",\"type_\":\"\",\"default_\":\"\",\"description\":\"requirement\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:resources"}, {"id": "{\"name\":\"resources\",\"type_\":\"\",\"default_\":\"\",\"description\":\"resources\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path"}, {"id": "{\"name\":\"src_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_relative_path\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:srcs"}, {"id": "{\"name\":\"srcs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"srcs\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs"}, {"id": "{\"name\":\"test_outputs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"test_outputs\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:tests"}, {"id": "{\"name\":\"tests\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tests\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:workdir"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:code_files_exists"}, {"id": "{\"name\":\"code_files_exists\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"code_files_exists(): bool\",\"aggregations\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:with_src_path"}, {"id": "{\"name\":\"with_src_path\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"ProjectRepo\",\"description\":\"ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},\"description\":\"with_src_path(path: str \\\\| Path): ProjectRepo\",\"aggregations\":[\"str\\\\\",\"Path\",\"ProjectRepo\"]}"}, {"id": "metagpt/roles/prompt.py"}, {"id": "metagpt/roles/prompt.py:PromptString"}, {"id": "{\"name\":\"PromptString\",\"package\":\"metagpt/roles/prompt.py:PromptString\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/prompt.py:PromptString:name"}, {"id": "metagpt/roles/qa_engineer.py"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer"}, {"id": "{\"name\":\"QaEngineer\",\"package\":\"metagpt/roles/qa_engineer.py:QaEngineer\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"test_round\":{\"name\":\"test_round\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round : int\",\"compositions\":[]},\"test_round_allowed\":{\"name\":\"test_round_allowed\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round_allowed : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:constraints"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:goal"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:name"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:profile"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:test_round"}, {"id": "{\"name\":\"test_round\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:test_round_allowed"}, {"id": "{\"name\":\"test_round_allowed\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round_allowed : int\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection"}, {"id": "{\"name\":\"QdrantConnection\",\"package\":\"metagpt/document_store/qdrant_store.py:QdrantConnection\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"host : Optional[str]\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"memory : bool\",\"compositions\":[]},\"port\":{\"name\":\"port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"port : Optional[int]\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"url : Optional[str]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:api_key"}, {"id": "{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:host"}, {"id": "{\"name\":\"host\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"host : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:memory"}, {"id": "{\"name\":\"memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"memory : bool\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:port"}, {"id": "{\"name\":\"port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"port : Optional[int]\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:url"}, {"id": "{\"name\":\"url\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"url : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore"}, {"id": "{\"name\":\"QdrantStore\",\"package\":\"metagpt/document_store/qdrant_store.py:QdrantStore\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"QdrantClient\",\"default_\":\"\",\"description\":\"client : QdrantClient\",\"compositions\":[\"QdrantClient\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"points\",\"type_\":\"List[PointStruct]\",\"default_\":\"\",\"description\":\"points: List[PointStruct]\",\"compositions\":[\"PointStruct\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(collection_name: str, points: List[PointStruct])\",\"aggregations\":[\"PointStruct\"]},\"create_collection\":{\"name\":\"create_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"vectors_config\",\"type_\":\"VectorParams\",\"default_\":\"\",\"description\":\"vectors_config: VectorParams\",\"compositions\":[\"VectorParams\"]},{\"name\":\"force_recreate\",\"type_\":\"\",\"default_\":\"\",\"description\":\"force_recreate\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_collection(collection_name: str, vectors_config: VectorParams, force_recreate)\",\"aggregations\":[\"VectorParams\"]},\"delete_collection\":{\"name\":\"delete_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_collection(collection_name: str, timeout)\",\"aggregations\":[]},\"has_collection\":{\"name\":\"has_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"has_collection(collection_name: str)\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"query\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"query: List[float]\",\"compositions\":[]},{\"name\":\"query_filter\",\"type_\":\"Filter\",\"default_\":\"\",\"description\":\"query_filter: Filter\",\"compositions\":[\"Filter\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"return_vector\",\"type_\":\"\",\"default_\":\"\",\"description\":\"return_vector\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(collection_name: str, query: List[float], query_filter: Filter, k, return_vector)\",\"aggregations\":[\"Filter\"]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[\"QdrantClient\"],\"aggregations\":[\"PointStruct\",\"VectorParams\",\"Filter\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:client"}, {"id": "{\"name\":\"client\",\"type_\":\"QdrantClient\",\"default_\":\"\",\"description\":\"client : QdrantClient\",\"compositions\":[\"QdrantClient\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"points\",\"type_\":\"List[PointStruct]\",\"default_\":\"\",\"description\":\"points: List[PointStruct]\",\"compositions\":[\"PointStruct\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(collection_name: str, points: List[PointStruct])\",\"aggregations\":[\"PointStruct\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:create_collection"}, {"id": "{\"name\":\"create_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"vectors_config\",\"type_\":\"VectorParams\",\"default_\":\"\",\"description\":\"vectors_config: VectorParams\",\"compositions\":[\"VectorParams\"]},{\"name\":\"force_recreate\",\"type_\":\"\",\"default_\":\"\",\"description\":\"force_recreate\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_collection(collection_name: str, vectors_config: VectorParams, force_recreate)\",\"aggregations\":[\"VectorParams\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:delete_collection"}, {"id": "{\"name\":\"delete_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_collection(collection_name: str, timeout)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:has_collection"}, {"id": "{\"name\":\"has_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"has_collection(collection_name: str)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"query\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"query: List[float]\",\"compositions\":[]},{\"name\":\"query_filter\",\"type_\":\"Filter\",\"default_\":\"\",\"description\":\"query_filter: Filter\",\"compositions\":[\"Filter\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"return_vector\",\"type_\":\"\",\"default_\":\"\",\"description\":\"return_vector\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(collection_name: str, query: List[float], query_filter: Filter, k, return_vector)\",\"aggregations\":[\"Filter\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:write"}, {"id": "?:QdrantClient"}, {"id": "?:PointStruct"}, {"id": "?:VectorParams"}, {"id": "?:Filter"}, {"id": "metagpt/strategy/solver.py:ReActSolver"}, {"id": "{\"name\":\"ReActSolver\",\"package\":\"metagpt/strategy/solver.py:ReActSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:ReActSolver:solve"}, {"id": "metagpt/environment/api/env_api.py:ReadAPIRegistry"}, {"id": "{\"name\":\"ReadAPIRegistry\",\"package\":\"metagpt/environment/api/env_api.py:ReadAPIRegistry\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_class_view.py"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView"}, {"id": "{\"name\":\"RebuildClassView\",\"package\":\"metagpt/actions/rebuild_class_view.py:RebuildClassView\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}},\"compositions\":[\"GraphRepository\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:graph_db"}, {"id": "{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView"}, {"id": "{\"name\":\"RebuildSequenceView\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}},\"methods\":{\"parse_participant\":{\"name\":\"parse_participant\",\"args\":[{\"name\":\"mermaid_sequence_diagram\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_sequence_diagram: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_participant(mermaid_sequence_diagram: str): List[str]\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}},\"compositions\":[\"GraphRepository\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:graph_db"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:parse_participant"}, {"id": "{\"name\":\"parse_participant\",\"args\":[{\"name\":\"mermaid_sequence_diagram\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_sequence_diagram: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_participant(mermaid_sequence_diagram: str): List[str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:run"}, {"id": "metagpt/utils/redis.py"}, {"id": "metagpt/utils/redis.py:Redis"}, {"id": "{\"name\":\"Redis\",\"package\":\"metagpt/utils/redis.py:Redis\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"config : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}},\"methods\":{\"close\":{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"close()\",\"aggregations\":[]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\\\\|None\",\"description\":\"bytes \\\\| None\",\"compositions\":[\"bytes\\\\\"]},\"description\":\"get(key: str): bytes \\\\| None\",\"aggregations\":[\"bytes\\\\\"]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]},{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key: str, data: str, timeout_sec: int)\",\"aggregations\":[]}},\"compositions\":[\"RedisConfig\"],\"aggregations\":[\"bytes\\\\\"]}"}, {"id": "metagpt/utils/redis.py:Redis:config"}, {"id": "{\"name\":\"config\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"config : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}"}, {"id": "metagpt/utils/redis.py:Redis:close"}, {"id": "{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"close()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/redis.py:Redis:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\\\\|None\",\"description\":\"bytes \\\\| None\",\"compositions\":[\"bytes\\\\\"]},\"description\":\"get(key: str): bytes \\\\| None\",\"aggregations\":[\"bytes\\\\\"]}"}, {"id": "metagpt/utils/redis.py:Redis:set"}, {"id": "{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]},{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key: str, data: str, timeout_sec: int)\",\"aggregations\":[]}"}, {"id": "?:bytes\\"}, {"id": "metagpt/configs/redis_config.py"}, {"id": "metagpt/configs/redis_config.py:RedisConfig"}, {"id": "{\"name\":\"RedisConfig\",\"package\":\"metagpt/configs/redis_config.py:RedisConfig\",\"attributes\":{\"db\":{\"name\":\"db\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"db : str\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"host : str\",\"compositions\":[]},\"password\":{\"name\":\"password\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"password : str\",\"compositions\":[]},\"port\":{\"name\":\"port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"port : int\",\"compositions\":[]},\"username\":{\"name\":\"username\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"username : str\",\"compositions\":[]}},\"methods\":{\"to_kwargs\":{\"name\":\"to_kwargs\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_kwargs()\",\"aggregations\":[]},\"to_url\":{\"name\":\"to_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:db"}, {"id": "{\"name\":\"db\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"db : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:host"}, {"id": "{\"name\":\"host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"host : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:password"}, {"id": "{\"name\":\"password\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"password : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:port"}, {"id": "{\"name\":\"port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"port : int\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:username"}, {"id": "{\"name\":\"username\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"username : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:to_kwargs"}, {"id": "{\"name\":\"to_kwargs\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_kwargs()\",\"aggregations\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:to_url"}, {"id": "{\"name\":\"to_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_url()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/repair_llm_raw_output.py"}, {"id": "metagpt/utils/repair_llm_raw_output.py:RepairType"}, {"id": "{\"name\":\"RepairType\",\"package\":\"metagpt/utils/repair_llm_raw_output.py:RepairType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:RepairType:name"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:ReplyData"}, {"id": "{\"name\":\"ReplyData\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:ReplyData\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:ReplyData:content"}, {"id": "metagpt/actions/invoice_ocr.py:ReplyQuestion"}, {"id": "{\"name\":\"ReplyQuestion\",\"package\":\"metagpt/actions/invoice_ocr.py:ReplyQuestion\",\"attributes\":{\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"ocr_result\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_result: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, ocr_result: list): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/invoice_ocr.py:ReplyQuestion:language"}, {"id": "metagpt/actions/invoice_ocr.py:ReplyQuestion:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"ocr_result\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_result: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, ocr_result: list): str\",\"aggregations\":[]}"}, {"id": "metagpt/document.py:Repo"}, {"id": "{\"name\":\"Repo\",\"package\":\"metagpt/document.py:Repo\",\"attributes\":{\"assets\":{\"name\":\"assets\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"assets : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"codes\":{\"name\":\"codes\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"codes : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"docs\":{\"name\":\"docs\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"docs : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}},\"methods\":{\"eda\":{\"name\":\"eda\",\"args\":[],\"return_args\":{\"type_\":\"RepoMetadata\",\"description\":\"RepoMetadata\",\"compositions\":[\"RepoMetadata\"]},\"description\":\"eda(): RepoMetadata\",\"aggregations\":[\"RepoMetadata\"]},\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[Document]\",\"description\":\"Optional[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get(filename: str): Optional[Document]\",\"aggregations\":[\"Document\"]},\"get_text_documents\":{\"name\":\"get_text_documents\",\"args\":[],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_text_documents(): list[Document]\",\"aggregations\":[\"Document\"]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(filename: str, content: str)\",\"aggregations\":[]},\"to_path\":{\"name\":\"to_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path()\",\"aggregations\":[]}},\"compositions\":[\"Document\",\"Path\"],\"aggregations\":[\"RepoMetadata\"]}"}, {"id": "metagpt/document.py:Repo:assets"}, {"id": "{\"name\":\"assets\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"assets : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"id": "metagpt/document.py:Repo:codes"}, {"id": "{\"name\":\"codes\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"codes : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"id": "metagpt/document.py:Repo:docs"}, {"id": "{\"name\":\"docs\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"docs : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"id": "metagpt/document.py:Repo:name"}, {"id": "metagpt/document.py:Repo:path"}, {"id": "metagpt/document.py:Repo:eda"}, {"id": "{\"name\":\"eda\",\"args\":[],\"return_args\":{\"type_\":\"RepoMetadata\",\"description\":\"RepoMetadata\",\"compositions\":[\"RepoMetadata\"]},\"description\":\"eda(): RepoMetadata\",\"aggregations\":[\"RepoMetadata\"]}"}, {"id": "metagpt/document.py:Repo:from_path"}, {"id": "metagpt/document.py:Repo:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[Document]\",\"description\":\"Optional[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get(filename: str): Optional[Document]\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/document.py:Repo:get_text_documents"}, {"id": "{\"name\":\"get_text_documents\",\"args\":[],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_text_documents(): list[Document]\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/document.py:Repo:set"}, {"id": "{\"name\":\"set\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(filename: str, content: str)\",\"aggregations\":[]}"}, {"id": "metagpt/document.py:Repo:to_path"}, {"id": "{\"name\":\"to_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path()\",\"aggregations\":[]}"}, {"id": "?:RepoMetadata"}, {"id": "metagpt/repo_parser.py:RepoFileInfo"}, {"id": "{\"name\":\"RepoFileInfo\",\"package\":\"metagpt/repo_parser.py:RepoFileInfo\",\"attributes\":{\"classes\":{\"name\":\"classes\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"classes : List\",\"compositions\":[]},\"file\":{\"name\":\"file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file : str\",\"compositions\":[]},\"functions\":{\"name\":\"functions\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"functions : List\",\"compositions\":[]},\"globals\":{\"name\":\"globals\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"globals : List\",\"compositions\":[]},\"page_info\":{\"name\":\"page_info\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"page_info : List\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:classes"}, {"id": "{\"name\":\"classes\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"classes : List\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:file"}, {"id": "{\"name\":\"file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:functions"}, {"id": "{\"name\":\"functions\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"functions : List\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:globals"}, {"id": "{\"name\":\"globals\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"globals : List\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:page_info"}, {"id": "{\"name\":\"page_info\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"page_info : List\",\"compositions\":[]}"}, {"id": "metagpt/document.py:RepoMetadata"}, {"id": "{\"name\":\"RepoMetadata\",\"package\":\"metagpt/document.py:RepoMetadata\",\"attributes\":{\"n_chars\":{\"name\":\"n_chars\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_chars : int\",\"compositions\":[]},\"n_docs\":{\"name\":\"n_docs\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_docs : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"symbols\":{\"name\":\"symbols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"symbols : list\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document.py:RepoMetadata:n_chars"}, {"id": "{\"name\":\"n_chars\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_chars : int\",\"compositions\":[]}"}, {"id": "metagpt/document.py:RepoMetadata:n_docs"}, {"id": "{\"name\":\"n_docs\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_docs : int\",\"compositions\":[]}"}, {"id": "metagpt/document.py:RepoMetadata:name"}, {"id": "metagpt/document.py:RepoMetadata:symbols"}, {"id": "{\"name\":\"symbols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"symbols : list\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoParser"}, {"id": "{\"name\":\"RepoParser\",\"package\":\"metagpt/repo_parser.py:RepoParser\",\"attributes\":{\"base_directory\":{\"name\":\"base_directory\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"base_directory : Path\",\"compositions\":[\"Path\"]}},\"methods\":{\"extract_class_and_function_info\":{\"name\":\"extract_class_and_function_info\",\"args\":[{\"name\":\"tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tree\",\"compositions\":[]},{\"name\":\"file_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"file_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"RepoFileInfo\",\"description\":\"RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"extract_class_and_function_info(tree, file_path): RepoFileInfo\",\"aggregations\":[\"RepoFileInfo\"]},\"generate_dataframe_structure\":{\"name\":\"generate_dataframe_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"output_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_dataframe_structure(output_path: Path)\",\"aggregations\":[\"Path\"]},\"generate_json_structure\":{\"name\":\"generate_json_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"output_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_json_structure(output_path: Path)\",\"aggregations\":[\"Path\"]},\"generate_structure\":{\"name\":\"generate_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"output_path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"generate_structure(output_path: str \\\\| Path, mode): Path\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"generate_symbols\":{\"name\":\"generate_symbols\",\"args\":[],\"return_args\":{\"type_\":\"List[RepoFileInfo]\",\"description\":\"List[RepoFileInfo]\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"generate_symbols(): List[RepoFileInfo]\",\"aggregations\":[\"RepoFileInfo\"]},\"node_to_str\":{\"name\":\"node_to_str\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeBlockInfo\\\\|None\",\"description\":\"CodeBlockInfo \\\\| None\",\"compositions\":[\"CodeBlockInfo\\\\\"]},\"description\":\"node_to_str(node): CodeBlockInfo \\\\| None\",\"aggregations\":[\"CodeBlockInfo\\\\\"]},\"rebuild_class_views\":{\"name\":\"rebuild_class_views\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_class_views(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[\"Path\"],\"aggregations\":[\"RepoFileInfo\",\"str\\\\\",\"CodeBlockInfo\\\\\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:base_directory"}, {"id": "{\"name\":\"base_directory\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"base_directory : Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:extract_class_and_function_info"}, {"id": "{\"name\":\"extract_class_and_function_info\",\"args\":[{\"name\":\"tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tree\",\"compositions\":[]},{\"name\":\"file_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"file_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"RepoFileInfo\",\"description\":\"RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"extract_class_and_function_info(tree, file_path): RepoFileInfo\",\"aggregations\":[\"RepoFileInfo\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:generate_dataframe_structure"}, {"id": "{\"name\":\"generate_dataframe_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"output_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_dataframe_structure(output_path: Path)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:generate_json_structure"}, {"id": "{\"name\":\"generate_json_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"output_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_json_structure(output_path: Path)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:generate_structure"}, {"id": "{\"name\":\"generate_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"output_path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"generate_structure(output_path: str \\\\| Path, mode): Path\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:generate_symbols"}, {"id": "{\"name\":\"generate_symbols\",\"args\":[],\"return_args\":{\"type_\":\"List[RepoFileInfo]\",\"description\":\"List[RepoFileInfo]\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"generate_symbols(): List[RepoFileInfo]\",\"aggregations\":[\"RepoFileInfo\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:node_to_str"}, {"id": "{\"name\":\"node_to_str\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeBlockInfo\\\\|None\",\"description\":\"CodeBlockInfo \\\\| None\",\"compositions\":[\"CodeBlockInfo\\\\\"]},\"description\":\"node_to_str(node): CodeBlockInfo \\\\| None\",\"aggregations\":[\"CodeBlockInfo\\\\\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:rebuild_class_views"}, {"id": "{\"name\":\"rebuild_class_views\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_class_views(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "?:CodeBlockInfo\\"}, {"id": "metagpt/roles/researcher.py"}, {"id": "metagpt/roles/researcher.py:Report"}, {"id": "{\"name\":\"Report\",\"package\":\"metagpt/roles/researcher.py:Report\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"links\":{\"name\":\"links\",\"type_\":\"Optional[dict[str,list[str]]]\",\"default_\":\"\",\"description\":\"links : Optional[dict[str, list[str]]]\",\"compositions\":[]},\"summaries\":{\"name\":\"summaries\",\"type_\":\"Optional[list[tuple[str,str]]]\",\"default_\":\"\",\"description\":\"summaries : Optional[list[tuple[str, str]]]\",\"compositions\":[\"tuple\"]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"tuple\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/researcher.py:Report:content"}, {"id": "metagpt/roles/researcher.py:Report:links"}, {"id": "{\"name\":\"links\",\"type_\":\"Optional[dict[str,list[str]]]\",\"default_\":\"\",\"description\":\"links : Optional[dict[str, list[str]]]\",\"compositions\":[]}"}, {"id": "metagpt/roles/researcher.py:Report:summaries"}, {"id": "{\"name\":\"summaries\",\"type_\":\"Optional[list[tuple[str,str]]]\",\"default_\":\"\",\"description\":\"summaries : Optional[list[tuple[str, str]]]\",\"compositions\":[\"tuple\"]}"}, {"id": "metagpt/roles/researcher.py:Report:topic"}, {"id": "{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/researcher.py:Researcher"}, {"id": "{\"name\":\"Researcher\",\"package\":\"metagpt/roles/researcher.py:Researcher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]},\"research_system_text\":{\"name\":\"research_system_text\",\"args\":[{\"name\":\"topic\",\"type_\":\"\",\"default_\":\"\",\"description\":\"topic\",\"compositions\":[]},{\"name\":\"current_task\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"current_task: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"research_system_text(topic, current_task: Action): str\",\"aggregations\":[\"Action\"]},\"write_report\":{\"name\":\"write_report\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_report(topic: str, content: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Message\",\"Action\"]}"}, {"id": "metagpt/roles/researcher.py:Researcher:constraints"}, {"id": "metagpt/roles/researcher.py:Researcher:goal"}, {"id": "metagpt/roles/researcher.py:Researcher:language"}, {"id": "metagpt/roles/researcher.py:Researcher:name"}, {"id": "metagpt/roles/researcher.py:Researcher:profile"}, {"id": "metagpt/roles/researcher.py:Researcher:react"}, {"id": "{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/researcher.py:Researcher:research_system_text"}, {"id": "{\"name\":\"research_system_text\",\"args\":[{\"name\":\"topic\",\"type_\":\"\",\"default_\":\"\",\"description\":\"topic\",\"compositions\":[]},{\"name\":\"current_task\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"current_task: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"research_system_text(topic, current_task: Action): str\",\"aggregations\":[\"Action\"]}"}, {"id": "metagpt/roles/researcher.py:Researcher:write_report"}, {"id": "{\"name\":\"write_report\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_report(topic: str, content: str)\",\"aggregations\":[]}"}, {"id": "?:Action"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories"}, {"id": "{\"name\":\"ResourceFileRepositories\",\"package\":\"metagpt/utils/project_repo.py:ResourceFileRepositories\",\"attributes\":{\"api_spec_and_task\":{\"name\":\"api_spec_and_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_spec_and_task\",\"compositions\":[]},\"code_plan_and_change\":{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]},\"code_summary\":{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]},\"competitive_analysis\":{\"name\":\"competitive_analysis\",\"type_\":\"\",\"default_\":\"\",\"description\":\"competitive_analysis\",\"compositions\":[]},\"data_api_design\":{\"name\":\"data_api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data_api_design\",\"compositions\":[]},\"graph_repo\":{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},\"sd_output\":{\"name\":\"sd_output\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_output\",\"compositions\":[]},\"seq_flow\":{\"name\":\"seq_flow\",\"type_\":\"\",\"default_\":\"\",\"description\":\"seq_flow\",\"compositions\":[]},\"system_design\":{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:api_spec_and_task"}, {"id": "{\"name\":\"api_spec_and_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_spec_and_task\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_plan_and_change"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_summary"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:competitive_analysis"}, {"id": "{\"name\":\"competitive_analysis\",\"type_\":\"\",\"default_\":\"\",\"description\":\"competitive_analysis\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:data_api_design"}, {"id": "{\"name\":\"data_api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data_api_design\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:graph_repo"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:prd"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:sd_output"}, {"id": "{\"name\":\"sd_output\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_output\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:seq_flow"}, {"id": "{\"name\":\"seq_flow\",\"type_\":\"\",\"default_\":\"\",\"description\":\"seq_flow\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:system_design"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding"}, {"id": "{\"name\":\"ResultEmbedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:ResultEmbedding\",\"attributes\":{\"data\":{\"name\":\"data\",\"type_\":\"List[Embedding]\",\"default_\":\"\",\"description\":\"data : List[Embedding]\",\"compositions\":[\"Embedding\"]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"object_\":{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]},\"usage\":{\"name\":\"usage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"usage\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Embedding\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:data"}, {"id": "{\"name\":\"data\",\"type_\":\"List[Embedding]\",\"default_\":\"\",\"description\":\"data : List[Embedding]\",\"compositions\":[\"Embedding\"]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:model"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:object_"}, {"id": "{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage"}, {"id": "{\"name\":\"usage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"usage\",\"compositions\":[]}"}, {"id": "?:Embedding"}, {"id": "metagpt/learn/skill_loader.py:Returns"}, {"id": "{\"name\":\"Returns\",\"package\":\"metagpt/learn/skill_loader.py:Returns\",\"attributes\":{\"format\":{\"name\":\"format\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"format : Optional[str]\",\"compositions\":[]},\"type\":{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Returns:format"}, {"id": "{\"name\":\"format\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"format : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Returns:type"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase"}, {"id": "{\"name\":\"ReverseUseCase\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:ReverseUseCase\",\"attributes\":{\"actors\":{\"name\":\"actors\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"actors : List[str]\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"inputs\":{\"name\":\"inputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"inputs : List[str]\",\"compositions\":[]},\"outputs\":{\"name\":\"outputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"outputs : List[str]\",\"compositions\":[]},\"reason\":{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]},\"steps\":{\"name\":\"steps\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"steps : List[str]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:actors"}, {"id": "{\"name\":\"actors\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"actors : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:description"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:inputs"}, {"id": "{\"name\":\"inputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"inputs : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:outputs"}, {"id": "{\"name\":\"outputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"outputs : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:reason"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:steps"}, {"id": "{\"name\":\"steps\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"steps : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails"}, {"id": "{\"name\":\"ReverseUseCaseDetails\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"relationship\":{\"name\":\"relationship\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"relationship : List[str]\",\"compositions\":[]},\"use_cases\":{\"name\":\"use_cases\",\"type_\":\"List[ReverseUseCase]\",\"default_\":\"\",\"description\":\"use_cases : List[ReverseUseCase]\",\"compositions\":[\"ReverseUseCase\"]}},\"methods\":{},\"compositions\":[\"ReverseUseCase\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:description"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:relationship"}, {"id": "{\"name\":\"relationship\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"relationship : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:use_cases"}, {"id": "{\"name\":\"use_cases\",\"type_\":\"List[ReverseUseCase]\",\"default_\":\"\",\"description\":\"use_cases : List[ReverseUseCase]\",\"compositions\":[\"ReverseUseCase\"]}"}, {"id": "?:ReverseUseCase"}, {"id": "metagpt/actions/action_node.py:ReviewMode"}, {"id": "{\"name\":\"ReviewMode\",\"package\":\"metagpt/actions/action_node.py:ReviewMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ReviewMode:name"}, {"id": "metagpt/actions/action_node.py:ReviseMode"}, {"id": "{\"name\":\"ReviseMode\",\"package\":\"metagpt/actions/action_node.py:ReviseMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ReviseMode:name"}, {"id": "metagpt/tools/libs/data_preprocess.py:RobustScale"}, {"id": "{\"name\":\"RobustScale\",\"package\":\"metagpt/tools/libs/data_preprocess.py:RobustScale\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"RobustScaler\",\"default_\":\"\",\"description\":\"model : RobustScaler\",\"compositions\":[\"RobustScaler\"]}},\"methods\":{},\"compositions\":[\"RobustScaler\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:RobustScale:features"}, {"id": "metagpt/tools/libs/data_preprocess.py:RobustScale:model"}, {"id": "{\"name\":\"model\",\"type_\":\"RobustScaler\",\"default_\":\"\",\"description\":\"model : RobustScaler\",\"compositions\":[\"RobustScaler\"]}"}, {"id": "?:RobustScaler"}, {"id": "metagpt/roles/role.py"}, {"id": "metagpt/roles/role.py:Role"}, {"id": "{\"name\":\"Role\",\"package\":\"metagpt/roles/role.py:Role\",\"attributes\":{\"action_description\":{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]},\"actions\":{\"name\":\"actions\",\"type_\":\"list[SerializeAsAny[Action]]\",\"default_\":\"\",\"description\":\"actions : list[SerializeAsAny[Action]]\",\"compositions\":[\"Action\",\"SerializeAsAny\"]},\"addresses\":{\"name\":\"addresses\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"addresses : set[str]\",\"compositions\":[]},\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"is_human\":{\"name\":\"is_human\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_human : bool\",\"compositions\":[]},\"is_idle\":{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]},\"latest_observed_msg\":{\"name\":\"latest_observed_msg\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"latest_observed_msg : Optional[Message]\",\"compositions\":[\"Message\"]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"planner\":{\"name\":\"planner\",\"type_\":\"\",\"default_\":\"\",\"description\":\"planner\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"project_repo\":{\"name\":\"project_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_repo\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]},\"rc\":{\"name\":\"rc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"rc\",\"compositions\":[]},\"recovered\":{\"name\":\"recovered\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"recovered : bool\",\"compositions\":[]},\"role_id\":{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id : str\",\"compositions\":[]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]},\"states\":{\"name\":\"states\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"states : list[str]\",\"compositions\":[]},\"todo\":{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}},\"methods\":{\"act\":{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"ActionOutput\",\"description\":\"ActionOutput\",\"compositions\":[\"ActionOutput\"]},\"description\":\"act(): ActionOutput\",\"aggregations\":[\"ActionOutput\"]},\"check_addresses\":{\"name\":\"check_addresses\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_addresses()\",\"aggregations\":[]},\"get_memories\":{\"name\":\"get_memories\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_memories(k): list[Message]\",\"aggregations\":[\"Message\"]},\"is_watch\":{\"name\":\"is_watch\",\"args\":[{\"name\":\"caused_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"caused_by: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_watch(caused_by: str)\",\"aggregations\":[]},\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"msg\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(msg)\",\"aggregations\":[]},\"put_message\":{\"name\":\"put_message\",\"args\":[{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"put_message(message)\",\"aggregations\":[]},\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"run(with_message): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]},\"set_action\":{\"name\":\"set_action\",\"args\":[{\"name\":\"action\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"action: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_action(action: Action)\",\"aggregations\":[\"Action\"]},\"set_actions\":{\"name\":\"set_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"list[Union[Action,Type[Action]]]\",\"default_\":\"\",\"description\":\"actions: list[Union[Action, Type[Action]]]\",\"compositions\":[\"Action\",\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_actions(actions: list[Union[Action, Type[Action]]])\",\"aggregations\":[\"Action\",\"Type\"]},\"set_addresses\":{\"name\":\"set_addresses\",\"args\":[{\"name\":\"addresses\",\"type_\":\"Set[str]\",\"default_\":\"\",\"description\":\"addresses: Set[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(addresses: Set[str])\",\"aggregations\":[]},\"set_env\":{\"name\":\"set_env\",\"args\":[{\"name\":\"env\",\"type_\":\"Environment\",\"default_\":\"\",\"description\":\"env: 'Environment'\",\"compositions\":[\"Environment\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_env(env: 'Environment')\",\"aggregations\":[\"Environment\"]},\"set_todo\":{\"name\":\"set_todo\",\"args\":[{\"name\":\"value\",\"type_\":\"Optional[Action]\",\"default_\":\"\",\"description\":\"value: Optional[Action]\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_todo(value: Optional[Action])\",\"aggregations\":[\"Action\"]},\"think\":{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"Action\",\"description\":\"Action\",\"compositions\":[\"Action\"]},\"description\":\"think(): Action\",\"aggregations\":[\"Action\"]},\"validate_role_extra\":{\"name\":\"validate_role_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_role_extra()\",\"aggregations\":[]}},\"compositions\":[\"Action\",\"SerializeAsAny\",\"Message\"],\"aggregations\":[\"ActionOutput\",\"Message\\\\\",\"Type\",\"Environment\"]}"}, {"id": "metagpt/roles/role.py:Role:action_description"}, {"id": "metagpt/roles/role.py:Role:actions"}, {"id": "{\"name\":\"actions\",\"type_\":\"list[SerializeAsAny[Action]]\",\"default_\":\"\",\"description\":\"actions : list[SerializeAsAny[Action]]\",\"compositions\":[\"Action\",\"SerializeAsAny\"]}"}, {"id": "metagpt/roles/role.py:Role:addresses"}, {"id": "{\"name\":\"addresses\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"addresses : set[str]\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:constraints"}, {"id": "metagpt/roles/role.py:Role:desc"}, {"id": "metagpt/roles/role.py:Role:git_repo"}, {"id": "metagpt/roles/role.py:Role:goal"}, {"id": "metagpt/roles/role.py:Role:is_human"}, {"id": "{\"name\":\"is_human\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_human : bool\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:is_idle"}, {"id": "metagpt/roles/role.py:Role:latest_observed_msg"}, {"id": "{\"name\":\"latest_observed_msg\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"latest_observed_msg : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/roles/role.py:Role:llm"}, {"id": "metagpt/roles/role.py:Role:model_config"}, {"id": "metagpt/roles/role.py:Role:name"}, {"id": "metagpt/roles/role.py:Role:planner"}, {"id": "{\"name\":\"planner\",\"type_\":\"\",\"default_\":\"\",\"description\":\"planner\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:profile"}, {"id": "metagpt/roles/role.py:Role:project_name"}, {"id": "metagpt/roles/role.py:Role:project_path"}, {"id": "metagpt/roles/role.py:Role:project_repo"}, {"id": "{\"name\":\"project_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_repo\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:prompt_schema"}, {"id": "metagpt/roles/role.py:Role:rc"}, {"id": "{\"name\":\"rc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"rc\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:recovered"}, {"id": "{\"name\":\"recovered\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"recovered : bool\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:role_id"}, {"id": "{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:src_workspace"}, {"id": "metagpt/roles/role.py:Role:states"}, {"id": "{\"name\":\"states\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"states : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:todo"}, {"id": "{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:act"}, {"id": "{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"ActionOutput\",\"description\":\"ActionOutput\",\"compositions\":[\"ActionOutput\"]},\"description\":\"act(): ActionOutput\",\"aggregations\":[\"ActionOutput\"]}"}, {"id": "metagpt/roles/role.py:Role:check_addresses"}, {"id": "{\"name\":\"check_addresses\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_addresses()\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:get_memories"}, {"id": "{\"name\":\"get_memories\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_memories(k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/role.py:Role:is_watch"}, {"id": "{\"name\":\"is_watch\",\"args\":[{\"name\":\"caused_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"caused_by: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_watch(caused_by: str)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:publish_message"}, {"id": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"msg\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(msg)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:put_message"}, {"id": "{\"name\":\"put_message\",\"args\":[{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"put_message(message)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:react"}, {"id": "metagpt/roles/role.py:Role:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"run(with_message): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]}"}, {"id": "metagpt/roles/role.py:Role:set_action"}, {"id": "{\"name\":\"set_action\",\"args\":[{\"name\":\"action\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"action: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_action(action: Action)\",\"aggregations\":[\"Action\"]}"}, {"id": "metagpt/roles/role.py:Role:set_actions"}, {"id": "{\"name\":\"set_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"list[Union[Action,Type[Action]]]\",\"default_\":\"\",\"description\":\"actions: list[Union[Action, Type[Action]]]\",\"compositions\":[\"Action\",\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_actions(actions: list[Union[Action, Type[Action]]])\",\"aggregations\":[\"Action\",\"Type\"]}"}, {"id": "metagpt/roles/role.py:Role:set_addresses"}, {"id": "{\"name\":\"set_addresses\",\"args\":[{\"name\":\"addresses\",\"type_\":\"Set[str]\",\"default_\":\"\",\"description\":\"addresses: Set[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(addresses: Set[str])\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:set_env"}, {"id": "{\"name\":\"set_env\",\"args\":[{\"name\":\"env\",\"type_\":\"Environment\",\"default_\":\"\",\"description\":\"env: 'Environment'\",\"compositions\":[\"Environment\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_env(env: 'Environment')\",\"aggregations\":[\"Environment\"]}"}, {"id": "metagpt/roles/role.py:Role:set_todo"}, {"id": "{\"name\":\"set_todo\",\"args\":[{\"name\":\"value\",\"type_\":\"Optional[Action]\",\"default_\":\"\",\"description\":\"value: Optional[Action]\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_todo(value: Optional[Action])\",\"aggregations\":[\"Action\"]}"}, {"id": "metagpt/roles/role.py:Role:think"}, {"id": "{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"Action\",\"description\":\"Action\",\"compositions\":[\"Action\"]},\"description\":\"think(): Action\",\"aggregations\":[\"Action\"]}"}, {"id": "metagpt/roles/role.py:Role:validate_role_extra"}, {"id": "{\"name\":\"validate_role_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_role_extra()\",\"aggregations\":[]}"}, {"id": "?:Environment"}, {"id": "metagpt/roles/role.py:RoleContext"}, {"id": "{\"name\":\"RoleContext\",\"package\":\"metagpt/roles/role.py:RoleContext\",\"attributes\":{\"env\":{\"name\":\"env\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"env : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]},\"important_memory\":{\"name\":\"important_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"important_memory\",\"compositions\":[]},\"max_react_loop\":{\"name\":\"max_react_loop\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_react_loop : int\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"msg_buffer\":{\"name\":\"msg_buffer\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg_buffer\",\"compositions\":[]},\"news\":{\"name\":\"news\",\"type_\":\"list[Type[Message]]\",\"default_\":\"\",\"description\":\"news : list[Type[Message]]\",\"compositions\":[\"Message\",\"Type\"]},\"react_mode\":{\"name\":\"react_mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"react_mode\",\"compositions\":[]},\"state\":{\"name\":\"state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"state : int\",\"compositions\":[]},\"todo\":{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]},\"watch\":{\"name\":\"watch\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"watch : set[str]\",\"compositions\":[]},\"working_memory\":{\"name\":\"working_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_memory\",\"compositions\":[]}},\"methods\":{\"check\":{\"name\":\"check\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check(role_id: str)\",\"aggregations\":[]},\"model_rebuild\":{\"name\":\"model_rebuild\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"model_rebuild()\",\"aggregations\":[]}},\"compositions\":[\"Message\",\"Type\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:env"}, {"id": "{\"name\":\"env\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"env : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:history"}, {"id": "{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:important_memory"}, {"id": "{\"name\":\"important_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"important_memory\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:max_react_loop"}, {"id": "{\"name\":\"max_react_loop\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_react_loop : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:memory"}, {"id": "metagpt/roles/role.py:RoleContext:model_config"}, {"id": "metagpt/roles/role.py:RoleContext:msg_buffer"}, {"id": "{\"name\":\"msg_buffer\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg_buffer\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:news"}, {"id": "{\"name\":\"news\",\"type_\":\"list[Type[Message]]\",\"default_\":\"\",\"description\":\"news : list[Type[Message]]\",\"compositions\":[\"Message\",\"Type\"]}"}, {"id": "metagpt/roles/role.py:RoleContext:react_mode"}, {"id": "{\"name\":\"react_mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"react_mode\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:state"}, {"id": "{\"name\":\"state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"state : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:todo"}, {"id": "metagpt/roles/role.py:RoleContext:watch"}, {"id": "{\"name\":\"watch\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"watch : set[str]\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:working_memory"}, {"id": "metagpt/roles/role.py:RoleContext:check"}, {"id": "{\"name\":\"check\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check(role_id: str)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:model_rebuild"}, {"id": "metagpt/roles/role.py:RoleReactMode"}, {"id": "{\"name\":\"RoleReactMode\",\"package\":\"metagpt/roles/role.py:RoleReactMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"values\":{\"name\":\"values\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"values()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:RoleReactMode:name"}, {"id": "metagpt/roles/role.py:RoleReactMode:values"}, {"id": "{\"name\":\"values\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"values()\",\"aggregations\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState"}, {"id": "{\"name\":\"RoleState\",\"package\":\"metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState:name"}, {"id": "metagpt/actions/run_code.py"}, {"id": "metagpt/actions/run_code.py:RunCode"}, {"id": "{\"name\":\"RunCode\",\"package\":\"metagpt/actions/run_code.py:RunCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"RunCodeResult\",\"description\":\"RunCodeResult\",\"compositions\":[\"RunCodeResult\"]},\"description\":\"run(): RunCodeResult\",\"aggregations\":[\"RunCodeResult\"]},\"run_script\":{\"name\":\"run_script\",\"args\":[{\"name\":\"working_directory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_directory\",\"compositions\":[]},{\"name\":\"additional_python_paths\",\"type_\":\"\",\"default_\":\"\",\"description\":\"additional_python_paths\",\"compositions\":[]},{\"name\":\"command\",\"type_\":\"\",\"default_\":\"\",\"description\":\"command\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_script(working_directory, additional_python_paths, command): Tuple[str, str]\",\"aggregations\":[]},\"run_text\":{\"name\":\"run_text\",\"args\":[{\"name\":\"code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_text(code): Tuple[str, str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"RunCodeResult\"]}"}, {"id": "metagpt/actions/run_code.py:RunCode:i_context"}, {"id": "metagpt/actions/run_code.py:RunCode:name"}, {"id": "metagpt/actions/run_code.py:RunCode:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"RunCodeResult\",\"description\":\"RunCodeResult\",\"compositions\":[\"RunCodeResult\"]},\"description\":\"run(): RunCodeResult\",\"aggregations\":[\"RunCodeResult\"]}"}, {"id": "metagpt/actions/run_code.py:RunCode:run_script"}, {"id": "{\"name\":\"run_script\",\"args\":[{\"name\":\"working_directory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_directory\",\"compositions\":[]},{\"name\":\"additional_python_paths\",\"type_\":\"\",\"default_\":\"\",\"description\":\"additional_python_paths\",\"compositions\":[]},{\"name\":\"command\",\"type_\":\"\",\"default_\":\"\",\"description\":\"command\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_script(working_directory, additional_python_paths, command): Tuple[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/run_code.py:RunCode:run_text"}, {"id": "{\"name\":\"run_text\",\"args\":[{\"name\":\"code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_text(code): Tuple[str, str]\",\"aggregations\":[]}"}, {"id": "?:RunCodeResult"}, {"id": "metagpt/schema.py:RunCodeContext"}, {"id": "{\"name\":\"RunCodeContext\",\"package\":\"metagpt/schema.py:RunCodeContext\",\"attributes\":{\"additional_python_paths\":{\"name\":\"additional_python_paths\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"additional_python_paths : List[str]\",\"compositions\":[]},\"code\":{\"name\":\"code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"code : Optional[str]\",\"compositions\":[]},\"code_filename\":{\"name\":\"code_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code_filename : str\",\"compositions\":[]},\"command\":{\"name\":\"command\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"command : List[str]\",\"compositions\":[]},\"mode\":{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode : str\",\"compositions\":[]},\"output\":{\"name\":\"output\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output : Optional[str]\",\"compositions\":[]},\"output_filename\":{\"name\":\"output_filename\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output_filename : Optional[str]\",\"compositions\":[]},\"test_code\":{\"name\":\"test_code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"test_code : Optional[str]\",\"compositions\":[]},\"test_filename\":{\"name\":\"test_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"test_filename : str\",\"compositions\":[]},\"working_directory\":{\"name\":\"working_directory\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"working_directory : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:additional_python_paths"}, {"id": "{\"name\":\"additional_python_paths\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"additional_python_paths : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:code"}, {"id": "{\"name\":\"code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"code : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:code_filename"}, {"id": "{\"name\":\"code_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:command"}, {"id": "{\"name\":\"command\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"command : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:mode"}, {"id": "{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:output"}, {"id": "{\"name\":\"output\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:output_filename"}, {"id": "{\"name\":\"output_filename\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output_filename : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:test_code"}, {"id": "{\"name\":\"test_code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"test_code : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:test_filename"}, {"id": "{\"name\":\"test_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"test_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:working_directory"}, {"id": "{\"name\":\"working_directory\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"working_directory : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeResult"}, {"id": "{\"name\":\"RunCodeResult\",\"package\":\"metagpt/schema.py:RunCodeResult\",\"attributes\":{\"stderr\":{\"name\":\"stderr\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stderr : str\",\"compositions\":[]},\"stdout\":{\"name\":\"stdout\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stdout : str\",\"compositions\":[]},\"summary\":{\"name\":\"summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"summary : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:RunCodeResult:stderr"}, {"id": "{\"name\":\"stderr\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stderr : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeResult:stdout"}, {"id": "{\"name\":\"stdout\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stdout : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeResult:summary"}, {"id": "{\"name\":\"summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"summary : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/s3.py"}, {"id": "metagpt/utils/s3.py:S3"}, {"id": "{\"name\":\"S3\",\"package\":\"metagpt/utils/s3.py:S3\",\"attributes\":{\"auth_config\":{\"name\":\"auth_config\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"auth_config : dict\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"session\":{\"name\":\"session\",\"type_\":\"Session\",\"default_\":\"\",\"description\":\"session : Session\",\"compositions\":[\"Session\"]}},\"methods\":{\"cache\":{\"name\":\"cache\",\"args\":[{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"file_ext\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file_ext: str\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"cache(data: str, file_ext: str, format: str): str\",\"aggregations\":[]},\"download_file\":{\"name\":\"download_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"chunk_size\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"chunk_size: Optional[int]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"download_file(bucket: str, object_name: str, local_path: str, chunk_size: Optional[int]): None\",\"aggregations\":[]},\"get_object\":{\"name\":\"get_object\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"get_object(bucket: str, object_name: str): bytes\",\"aggregations\":[\"bytes\"]},\"get_object_url\":{\"name\":\"get_object_url\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_object_url(bucket: str, object_name: str): str\",\"aggregations\":[]},\"upload_file\":{\"name\":\"upload_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"upload_file(bucket: str, local_path: str, object_name: str): None\",\"aggregations\":[]}},\"compositions\":[\"Session\"],\"aggregations\":[\"bytes\"]}"}, {"id": "metagpt/utils/s3.py:S3:auth_config"}, {"id": "{\"name\":\"auth_config\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"auth_config : dict\",\"compositions\":[]}"}, {"id": "metagpt/utils/s3.py:S3:config"}, {"id": "metagpt/utils/s3.py:S3:session"}, {"id": "{\"name\":\"session\",\"type_\":\"Session\",\"default_\":\"\",\"description\":\"session : Session\",\"compositions\":[\"Session\"]}"}, {"id": "metagpt/utils/s3.py:S3:cache"}, {"id": "{\"name\":\"cache\",\"args\":[{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"file_ext\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file_ext: str\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"cache(data: str, file_ext: str, format: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/s3.py:S3:download_file"}, {"id": "{\"name\":\"download_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"chunk_size\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"chunk_size: Optional[int]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"download_file(bucket: str, object_name: str, local_path: str, chunk_size: Optional[int]): None\",\"aggregations\":[]}"}, {"id": "metagpt/utils/s3.py:S3:get_object"}, {"id": "{\"name\":\"get_object\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"get_object(bucket: str, object_name: str): bytes\",\"aggregations\":[\"bytes\"]}"}, {"id": "metagpt/utils/s3.py:S3:get_object_url"}, {"id": "{\"name\":\"get_object_url\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_object_url(bucket: str, object_name: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/s3.py:S3:upload_file"}, {"id": "{\"name\":\"upload_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"upload_file(bucket: str, local_path: str, object_name: str): None\",\"aggregations\":[]}"}, {"id": "?:Session"}, {"id": "metagpt/configs/s3_config.py"}, {"id": "metagpt/configs/s3_config.py:S3Config"}, {"id": "{\"name\":\"S3Config\",\"package\":\"metagpt/configs/s3_config.py:S3Config\",\"attributes\":{\"access_key\":{\"name\":\"access_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"access_key : str\",\"compositions\":[]},\"bucket\":{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket : str\",\"compositions\":[]},\"endpoint\":{\"name\":\"endpoint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"endpoint : str\",\"compositions\":[]},\"secret_key\":{\"name\":\"secret_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"secret_key : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/s3_config.py:S3Config:access_key"}, {"id": "{\"name\":\"access_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"access_key : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/s3_config.py:S3Config:bucket"}, {"id": "{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/s3_config.py:S3Config:endpoint"}, {"id": "{\"name\":\"endpoint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"endpoint : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/s3_config.py:S3Config:secret_key"}, {"id": "{\"name\":\"secret_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"secret_key : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/sd_engine.py"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine"}, {"id": "{\"name\":\"SDEngine\",\"package\":\"metagpt/tools/libs/sd_engine.py:SDEngine\",\"attributes\":{\"payload\":{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]},\"sd_t2i_url\":{\"name\":\"sd_t2i_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_t2i_url\",\"compositions\":[]},\"sd_url\":{\"name\":\"sd_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sd_url : str\",\"compositions\":[]}},\"methods\":{\"construct_payload\":{\"name\":\"construct_payload\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},{\"name\":\"negtive_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"negtive_prompt\",\"compositions\":[]},{\"name\":\"width\",\"type_\":\"\",\"default_\":\"\",\"description\":\"width\",\"compositions\":[]},{\"name\":\"height\",\"type_\":\"\",\"default_\":\"\",\"description\":\"height\",\"compositions\":[]},{\"name\":\"sd_model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"construct_payload(prompt, negtive_prompt, width, height, sd_model)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"payload\",\"type_\":\"\",\"default_\":\"\",\"description\":\"payload\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(url, payload, session)\",\"aggregations\":[]},\"run_t2i\":{\"name\":\"run_t2i\",\"args\":[{\"name\":\"payloads\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"payloads: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_t2i(payloads: list)\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"imgs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"imgs\",\"compositions\":[]},{\"name\":\"save_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"save_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(imgs, save_name)\",\"aggregations\":[]},\"simple_run_t2i\":{\"name\":\"simple_run_t2i\",\"args\":[{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload: dict\",\"compositions\":[]},{\"name\":\"auto_save\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_save: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_run_t2i(payload: dict, auto_save: bool)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine:payload"}, {"id": "{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine:sd_t2i_url"}, {"id": "{\"name\":\"sd_t2i_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_t2i_url\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine:sd_url"}, {"id": "{\"name\":\"sd_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sd_url : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine:construct_payload"}, {"id": "{\"name\":\"construct_payload\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},{\"name\":\"negtive_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"negtive_prompt\",\"compositions\":[]},{\"name\":\"width\",\"type_\":\"\",\"default_\":\"\",\"description\":\"width\",\"compositions\":[]},{\"name\":\"height\",\"type_\":\"\",\"default_\":\"\",\"description\":\"height\",\"compositions\":[]},{\"name\":\"sd_model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"construct_payload(prompt, negtive_prompt, width, height, sd_model)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"payload\",\"type_\":\"\",\"default_\":\"\",\"description\":\"payload\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(url, payload, session)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine:run_t2i"}, {"id": "{\"name\":\"run_t2i\",\"args\":[{\"name\":\"payloads\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"payloads: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_t2i(payloads: list)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine:save"}, {"id": "{\"name\":\"save\",\"args\":[{\"name\":\"imgs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"imgs\",\"compositions\":[]},{\"name\":\"save_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"save_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(imgs, save_name)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine:simple_run_t2i"}, {"id": "{\"name\":\"simple_run_t2i\",\"args\":[{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload: dict\",\"compositions\":[]},{\"name\":\"auto_save\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_save: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_run_t2i(payload: dict, auto_save: bool)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:SPO"}, {"id": "{\"name\":\"SPO\",\"package\":\"metagpt/utils/graph_repository.py:SPO\",\"attributes\":{\"object_\":{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]},\"predicate\":{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate : str\",\"compositions\":[]},\"subject\":{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:SPO:object_"}, {"id": "metagpt/utils/graph_repository.py:SPO:predicate"}, {"id": "{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:SPO:subject"}, {"id": "{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/sales.py"}, {"id": "metagpt/roles/sales.py:Sales"}, {"id": "{\"name\":\"Sales\",\"package\":\"metagpt/roles/sales.py:Sales\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}},\"methods\":{\"validate_stroe\":{\"name\":\"validate_stroe\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_stroe()\",\"aggregations\":[]}},\"compositions\":[\"BaseStore\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/sales.py:Sales:desc"}, {"id": "metagpt/roles/sales.py:Sales:name"}, {"id": "metagpt/roles/sales.py:Sales:profile"}, {"id": "metagpt/roles/sales.py:Sales:store"}, {"id": "metagpt/roles/sales.py:Sales:validate_stroe"}, {"id": "{\"name\":\"validate_stroe\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_stroe()\",\"aggregations\":[]}"}, {"id": "metagpt/actions/search_and_summarize.py"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize"}, {"id": "{\"name\":\"SearchAndSummarize\",\"package\":\"metagpt/actions/search_and_summarize.py:SearchAndSummarize\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"result\":{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"context: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"system_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(context: list[Message], system_text): str\",\"aggregations\":[\"Message\"]},\"validate_search_engine\":{\"name\":\"validate_search_engine\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_search_engine()\",\"aggregations\":[]}},\"compositions\":[\"SearchEngine\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:content"}, {"id": "{\"name\":\"content\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:name"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:result"}, {"id": "{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"context: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"system_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(context: list[Message], system_text): str\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:validate_search_engine"}, {"id": "{\"name\":\"validate_search_engine\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_search_engine()\",\"aggregations\":[]}"}, {"id": "metagpt/configs/search_config.py"}, {"id": "metagpt/configs/search_config.py:SearchConfig"}, {"id": "{\"name\":\"SearchConfig\",\"package\":\"metagpt/configs/search_config.py:SearchConfig\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]},\"cse_id\":{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]},\"search_func\":{\"name\":\"search_func\",\"type_\":\"Optional[Callable]\",\"default_\":\"\",\"description\":\"search_func : Optional[Callable]\",\"compositions\":[\"Callable\"]}},\"methods\":{},\"compositions\":[\"Callable\"],\"aggregations\":[]}"}, {"id": "metagpt/configs/search_config.py:SearchConfig:api_key"}, {"id": "metagpt/configs/search_config.py:SearchConfig:api_type"}, {"id": "metagpt/configs/search_config.py:SearchConfig:cse_id"}, {"id": "metagpt/configs/search_config.py:SearchConfig:search_func"}, {"id": "{\"name\":\"search_func\",\"type_\":\"Optional[Callable]\",\"default_\":\"\",\"description\":\"search_func : Optional[Callable]\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/tools/search_engine.py"}, {"id": "metagpt/tools/search_engine.py:SearchEngine"}, {"id": "{\"name\":\"SearchEngine\",\"package\":\"metagpt/tools/search_engine.py:SearchEngine\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]},\"run_func\":{\"name\":\"run_func\",\"type_\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}},\"methods\":{\"from_search_config\":{\"name\":\"from_search_config\",\"args\":[{\"name\":\"config\",\"type_\":\"SearchConfig\",\"default_\":\"\",\"description\":\"config: SearchConfig\",\"compositions\":[\"SearchConfig\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_search_config(config: SearchConfig)\",\"aggregations\":[\"SearchConfig\"]},\"from_search_func\":{\"name\":\"from_search_func\",\"args\":[{\"name\":\"search_func\",\"type_\":\"Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]\",\"default_\":\"\",\"description\":\"search_func: Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_search_func(search_func: Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]])\",\"aggregations\":[\"Callable\",\"Coroutine\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True]): str\",\"aggregations\":[]},\"validate_extra\":{\"name\":\"validate_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_extra()\",\"aggregations\":[]}},\"compositions\":[\"Callable\",\"Coroutine\"],\"aggregations\":[\"SearchConfig\"]}"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:api_key"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:engine"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:model_config"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:proxy"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:run_func"}, {"id": "{\"name\":\"run_func\",\"type_\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:from_search_config"}, {"id": "{\"name\":\"from_search_config\",\"args\":[{\"name\":\"config\",\"type_\":\"SearchConfig\",\"default_\":\"\",\"description\":\"config: SearchConfig\",\"compositions\":[\"SearchConfig\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_search_config(config: SearchConfig)\",\"aggregations\":[\"SearchConfig\"]}"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:from_search_func"}, {"id": "{\"name\":\"from_search_func\",\"args\":[{\"name\":\"search_func\",\"type_\":\"Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]\",\"default_\":\"\",\"description\":\"search_func: Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_search_func(search_func: Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]])\",\"aggregations\":[\"Callable\",\"Coroutine\"]}"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True]): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:validate_extra"}, {"id": "{\"name\":\"validate_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_extra()\",\"aggregations\":[]}"}, {"id": "?:Coroutine"}, {"id": "?:SearchConfig"}, {"id": "metagpt/tools"}, {"id": "metagpt/tools:SearchEngineType"}, {"id": "{\"name\":\"SearchEngineType\",\"package\":\"metagpt/tools:SearchEngineType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools:SearchEngineType:name"}, {"id": "metagpt/strategy/search_space.py"}, {"id": "metagpt/strategy/search_space.py:SearchSpace"}, {"id": "{\"name\":\"SearchSpace\",\"package\":\"metagpt/strategy/search_space.py:SearchSpace\",\"attributes\":{\"search_space\":{\"name\":\"search_space\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"search_space : dict\",\"compositions\":[]}},\"methods\":{\"add_node\":{\"name\":\"add_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_node(node)\",\"aggregations\":[]},\"get_node\":{\"name\":\"get_node\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_node(key)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/search_space.py:SearchSpace:search_space"}, {"id": "{\"name\":\"search_space\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"search_space : dict\",\"compositions\":[]}"}, {"id": "metagpt/strategy/search_space.py:SearchSpace:add_node"}, {"id": "metagpt/strategy/search_space.py:SearchSpace:get_node"}, {"id": "{\"name\":\"get_node\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_node(key)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/searcher.py"}, {"id": "metagpt/roles/searcher.py:Searcher"}, {"id": "{\"name\":\"Searcher\",\"package\":\"metagpt/roles/searcher.py:Searcher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}},\"methods\":{\"post_root\":{\"name\":\"post_root\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"post_root()\",\"aggregations\":[]}},\"compositions\":[\"SearchEngine\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/searcher.py:Searcher:constraints"}, {"id": "metagpt/roles/searcher.py:Searcher:goal"}, {"id": "metagpt/roles/searcher.py:Searcher:name"}, {"id": "metagpt/roles/searcher.py:Searcher:profile"}, {"id": "metagpt/roles/searcher.py:Searcher:search_engine"}, {"id": "metagpt/roles/searcher.py:Searcher:post_root"}, {"id": "{\"name\":\"post_root\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"post_root()\",\"aggregations\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper"}, {"id": "{\"name\":\"SeleniumWrapper\",\"package\":\"metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]},\"executable_path\":{\"name\":\"executable_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executable_path\",\"compositions\":[]},\"executor\":{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]},\"launch_args\":{\"name\":\"launch_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"launch_args\",\"compositions\":[]},\"launch_kwargs\":{\"name\":\"launch_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"launch_kwargs : dict\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}},\"compositions\":[\"futures.Executor\",\"asyncio.AbstractEventLoop\"],\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:browser_type"}, {"id": "{\"name\":\"browser_type\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executable_path"}, {"id": "{\"name\":\"executable_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executable_path\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executor"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_args"}, {"id": "{\"name\":\"launch_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"launch_args\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_kwargs"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:loop"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:model_config"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:proxy"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:run"}, {"id": "metagpt/schema.py:SerializationMixin"}, {"id": "{\"name\":\"SerializationMixin\",\"package\":\"metagpt/schema.py:SerializationMixin\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper"}, {"id": "{\"name\":\"SerpAPIWrapper\",\"package\":\"metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper\",\"attributes\":{\"aiosession\":{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]},\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"params\":{\"name\":\"params\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"params : dict\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"get_params\":{\"name\":\"get_params\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_params(query: str): Dict[str, str]\",\"aggregations\":[]},\"results\":{\"name\":\"results\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(query: str, max_results: int): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query, max_results: int, as_string: bool): str\",\"aggregations\":[]},\"validate_serpapi\":{\"name\":\"validate_serpapi\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_serpapi(values: dict): dict\",\"aggregations\":[]}},\"compositions\":[\"aiohttp.ClientSession\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:aiosession"}, {"id": "{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:api_key"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:model_config"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:params"}, {"id": "{\"name\":\"params\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"params : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:proxy"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:get_params"}, {"id": "{\"name\":\"get_params\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_params(query: str): Dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:results"}, {"id": "{\"name\":\"results\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(query: str, max_results: int): dict\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query, max_results: int, as_string: bool): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:validate_serpapi"}, {"id": "{\"name\":\"validate_serpapi\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_serpapi(values: dict): dict\",\"aggregations\":[]}"}, {"id": "?:aiohttp.ClientSession"}, {"id": "metagpt/tools/search_engine_serper.py"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper"}, {"id": "{\"name\":\"SerperWrapper\",\"package\":\"metagpt/tools/search_engine_serper.py:SerperWrapper\",\"attributes\":{\"aiosession\":{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]},\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"payload\":{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"get_headers\":{\"name\":\"get_headers\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_headers(): Dict[str, str]\",\"aggregations\":[]},\"get_payloads\":{\"name\":\"get_payloads\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_payloads(queries: list[str], max_results: int): Dict[str, str]\",\"aggregations\":[]},\"results\":{\"name\":\"results\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(queries: list[str], max_results: int): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: bool): str\",\"aggregations\":[]},\"validate_serper\":{\"name\":\"validate_serper\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_serper(values: dict): dict\",\"aggregations\":[]}},\"compositions\":[\"aiohttp.ClientSession\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:aiosession"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:api_key"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:model_config"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:payload"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:proxy"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_headers"}, {"id": "{\"name\":\"get_headers\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_headers(): Dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_payloads"}, {"id": "{\"name\":\"get_payloads\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_payloads(queries: list[str], max_results: int): Dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:results"}, {"id": "{\"name\":\"results\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(queries: list[str], max_results: int): dict\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: bool): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:validate_serper"}, {"id": "{\"name\":\"validate_serper\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_serper(values: dict): dict\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:SimpleMessage"}, {"id": "{\"name\":\"SimpleMessage\",\"package\":\"metagpt/schema.py:SimpleMessage\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"role\":{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:SimpleMessage:content"}, {"id": "metagpt/schema.py:SimpleMessage:role"}, {"id": "metagpt/utils/singleton.py"}, {"id": "metagpt/utils/singleton.py:Singleton"}, {"id": "{\"name\":\"Singleton\",\"package\":\"metagpt/utils/singleton.py:Singleton\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/sk_agent.py"}, {"id": "metagpt/roles/sk_agent.py:SkAgent"}, {"id": "{\"name\":\"SkAgent\",\"package\":\"metagpt/roles/sk_agent.py:SkAgent\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"import_semantic_skill_from_directory\":{\"name\":\"import_semantic_skill_from_directory\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_semantic_skill_from_directory : Callable\",\"compositions\":[\"Callable\"]},\"import_skill\":{\"name\":\"import_skill\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_skill : Callable\",\"compositions\":[\"Callable\"]},\"kernel\":{\"name\":\"kernel\",\"type_\":\"Kernel\",\"default_\":\"\",\"description\":\"kernel : Kernel\",\"compositions\":[\"Kernel\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"plan\":{\"name\":\"plan\",\"type_\":\"Plan\",\"default_\":\"\",\"description\":\"plan : Plan\",\"compositions\":[\"Plan\"]},\"planner\":{\"name\":\"planner\",\"type_\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_\":\"\",\"description\":\"planner : Optional[Union[BasicPlanner, SequentialPlanner, ActionPlanner]]\",\"compositions\":[\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"]},\"planner_cls\":{\"name\":\"planner_cls\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"planner_cls : Optional[Any]\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Callable\",\"Kernel\",\"Plan\",\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:constraints"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:goal"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:import_semantic_skill_from_directory"}, {"id": "{\"name\":\"import_semantic_skill_from_directory\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_semantic_skill_from_directory : Callable\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:import_skill"}, {"id": "{\"name\":\"import_skill\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_skill : Callable\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:kernel"}, {"id": "{\"name\":\"kernel\",\"type_\":\"Kernel\",\"default_\":\"\",\"description\":\"kernel : Kernel\",\"compositions\":[\"Kernel\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:name"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:plan"}, {"id": "{\"name\":\"plan\",\"type_\":\"Plan\",\"default_\":\"\",\"description\":\"plan : Plan\",\"compositions\":[\"Plan\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:planner"}, {"id": "{\"name\":\"planner\",\"type_\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_\":\"\",\"description\":\"planner : Optional[Union[BasicPlanner, SequentialPlanner, ActionPlanner]]\",\"compositions\":[\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:planner_cls"}, {"id": "{\"name\":\"planner_cls\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"planner_cls : Optional[Any]\",\"compositions\":[]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:profile"}, {"id": "?:Kernel"}, {"id": "?:Plan"}, {"id": "?:ActionPlanner"}, {"id": "?:BasicPlanner"}, {"id": "?:SequentialPlanner"}, {"id": "metagpt/tools/search_engine.py:SkSearchEngine"}, {"id": "{\"name\":\"SkSearchEngine\",\"package\":\"metagpt/tools/search_engine.py:SkSearchEngine\",\"attributes\":{\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine"}, {"id": "{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine.py:SkSearchEngine:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill"}, {"id": "{\"name\":\"Skill\",\"package\":\"metagpt/learn/skill_loader.py:Skill\",\"attributes\":{\"arguments\":{\"name\":\"arguments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"arguments\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]},\"examples\":{\"name\":\"examples\",\"type_\":\"List[Example]\",\"default_\":\"\",\"description\":\"examples : List[Example]\",\"compositions\":[\"Example\"]},\"id\":{\"name\":\"id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"id : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"parameters\":{\"name\":\"parameters\",\"type_\":\"Optional[Dict[str,Parameter]]\",\"default_\":\"\",\"description\":\"parameters : Optional[Dict[str, Parameter]]\",\"compositions\":[\"Parameter\"]},\"returns\":{\"name\":\"returns\",\"type_\":\"\",\"default_\":\"\",\"description\":\"returns\",\"compositions\":[]},\"x_prerequisite\":{\"name\":\"x_prerequisite\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"x_prerequisite : Dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Example\",\"Parameter\"],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:arguments"}, {"id": "{\"name\":\"arguments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"arguments\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:description"}, {"id": "metagpt/learn/skill_loader.py:Skill:examples"}, {"id": "{\"name\":\"examples\",\"type_\":\"List[Example]\",\"default_\":\"\",\"description\":\"examples : List[Example]\",\"compositions\":[\"Example\"]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:id"}, {"id": "{\"name\":\"id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"id : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:name"}, {"id": "metagpt/learn/skill_loader.py:Skill:parameters"}, {"id": "{\"name\":\"parameters\",\"type_\":\"Optional[Dict[str,Parameter]]\",\"default_\":\"\",\"description\":\"parameters : Optional[Dict[str, Parameter]]\",\"compositions\":[\"Parameter\"]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:returns"}, {"id": "{\"name\":\"returns\",\"type_\":\"\",\"default_\":\"\",\"description\":\"returns\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:x_prerequisite"}, {"id": "{\"name\":\"x_prerequisite\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"x_prerequisite : Dict\",\"compositions\":[]}"}, {"id": "?:Example"}, {"id": "?:Parameter"}, {"id": "metagpt/actions/skill_action.py:SkillAction"}, {"id": "{\"name\":\"SkillAction\",\"package\":\"metagpt/actions/skill_action.py:SkillAction\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"args : Dict\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]},\"skill\":{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}},\"methods\":{\"find_and_call_function\":{\"name\":\"find_and_call_function\",\"args\":[{\"name\":\"function_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"function_name\",\"compositions\":[]},{\"name\":\"args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"args\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"find_and_call_function(function_name, args): str\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/skill_action.py:SkillAction:args"}, {"id": "{\"name\":\"args\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"args : Dict\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:SkillAction:rsp"}, {"id": "metagpt/actions/skill_action.py:SkillAction:skill"}, {"id": "metagpt/actions/skill_action.py:SkillAction:find_and_call_function"}, {"id": "{\"name\":\"find_and_call_function\",\"args\":[{\"name\":\"function_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"function_name\",\"compositions\":[]},{\"name\":\"args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"args\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"find_and_call_function(function_name, args): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/skill_action.py:SkillAction:run"}, {"id": "metagpt/management/skill_manager.py"}, {"id": "metagpt/management/skill_manager.py:SkillManager"}, {"id": "{\"name\":\"SkillManager\",\"package\":\"metagpt/management/skill_manager.py:SkillManager\",\"attributes\":{},\"methods\":{\"add_skill\":{\"name\":\"add_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_skill(skill: Skill)\",\"aggregations\":[\"Skill\"]},\"del_skill\":{\"name\":\"del_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"del_skill(skill_name: str)\",\"aggregations\":[]},\"generate_skill_desc\":{\"name\":\"generate_skill_desc\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_skill_desc(skill: Skill): str\",\"aggregations\":[\"Skill\"]},\"get_skill\":{\"name\":\"get_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(skill_name: str): Skill\",\"aggregations\":[\"Skill\"]},\"retrieve_skill\":{\"name\":\"retrieve_skill\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Skill]\",\"description\":\"list[Skill]\",\"compositions\":[\"Skill\"]},\"description\":\"retrieve_skill(desc: str, n_results: int): list[Skill]\",\"aggregations\":[\"Skill\"]},\"retrieve_skill_scored\":{\"name\":\"retrieve_skill_scored\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"retrieve_skill_scored(desc: str, n_results: int): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:add_skill"}, {"id": "{\"name\":\"add_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_skill(skill: Skill)\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:del_skill"}, {"id": "{\"name\":\"del_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"del_skill(skill_name: str)\",\"aggregations\":[]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:generate_skill_desc"}, {"id": "{\"name\":\"generate_skill_desc\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_skill_desc(skill: Skill): str\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:get_skill"}, {"id": "{\"name\":\"get_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(skill_name: str): Skill\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill"}, {"id": "{\"name\":\"retrieve_skill\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Skill]\",\"description\":\"list[Skill]\",\"compositions\":[\"Skill\"]},\"description\":\"retrieve_skill(desc: str, n_results: int): list[Skill]\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill_scored"}, {"id": "{\"name\":\"retrieve_skill_scored\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"retrieve_skill_scored(desc: str, n_results: int): dict\",\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration"}, {"id": "{\"name\":\"SkillsDeclaration\",\"package\":\"metagpt/learn/skill_loader.py:SkillsDeclaration\",\"attributes\":{\"components\":{\"name\":\"components\",\"type_\":\"Optional[Components]\",\"default_\":\"\",\"description\":\"components : Optional[Components]\",\"compositions\":[\"Components\"]},\"entities\":{\"name\":\"entities\",\"type_\":\"Dict[str,Entity]\",\"default_\":\"\",\"description\":\"entities : Dict[str, Entity]\",\"compositions\":[\"Entity\"]},\"skillapi\":{\"name\":\"skillapi\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skillapi : str\",\"compositions\":[]}},\"methods\":{\"get_skill\":{\"name\":\"get_skill\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(name, entity_name: str): Skill\",\"aggregations\":[\"Skill\"]},\"get_skill_list\":{\"name\":\"get_skill_list\",\"args\":[{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"get_skill_list(entity_name: str, context: Context): Dict\",\"aggregations\":[\"Context\"]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"skill_yaml_file_name\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"skill_yaml_file_name: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'SkillsDeclaration'\",\"description\":\"'SkillsDeclaration'\",\"compositions\":[\"SkillsDeclaration\"]},\"description\":\"load(skill_yaml_file_name: Path): 'SkillsDeclaration'\",\"aggregations\":[\"SkillsDeclaration\",\"Path\"]}},\"compositions\":[\"Components\",\"Entity\"],\"aggregations\":[\"Skill\",\"Context\",\"SkillsDeclaration\",\"Path\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:components"}, {"id": "{\"name\":\"components\",\"type_\":\"Optional[Components]\",\"default_\":\"\",\"description\":\"components : Optional[Components]\",\"compositions\":[\"Components\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:entities"}, {"id": "{\"name\":\"entities\",\"type_\":\"Dict[str,Entity]\",\"default_\":\"\",\"description\":\"entities : Dict[str, Entity]\",\"compositions\":[\"Entity\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:skillapi"}, {"id": "{\"name\":\"skillapi\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skillapi : str\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill"}, {"id": "{\"name\":\"get_skill\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(name, entity_name: str): Skill\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list"}, {"id": "{\"name\":\"get_skill_list\",\"args\":[{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"get_skill_list(entity_name: str, context: Context): Dict\",\"aggregations\":[\"Context\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:load"}, {"id": "{\"name\":\"load\",\"args\":[{\"name\":\"skill_yaml_file_name\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"skill_yaml_file_name: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'SkillsDeclaration'\",\"description\":\"'SkillsDeclaration'\",\"compositions\":[\"SkillsDeclaration\"]},\"description\":\"load(skill_yaml_file_name: Path): 'SkillsDeclaration'\",\"aggregations\":[\"SkillsDeclaration\",\"Path\"]}"}, {"id": "?:Components"}, {"id": "?:Entity"}, {"id": "metagpt/environment/software_env/software_env.py"}, {"id": "metagpt/environment/software_env/software_env.py:SoftwareEnv"}, {"id": "{\"name\":\"SoftwareEnv\",\"package\":\"metagpt/environment/software_env/software_env.py:SoftwareEnv\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:SparkLLM"}, {"id": "{\"name\":\"SparkLLM\",\"package\":\"metagpt/provider/spark_api.py:SparkLLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:config"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:acompletion"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:acompletion_text"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:get_choice_text"}, {"id": "metagpt/tools/libs/feature_engineering.py:SplitBins"}, {"id": "{\"name\":\"SplitBins\",\"package\":\"metagpt/tools/libs/feature_engineering.py:SplitBins\",\"attributes\":{\"cols\":{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]},\"encoder\":{\"name\":\"encoder\",\"type_\":\"KBinsDiscretizer,NoneType\",\"default_\":\"\",\"description\":\"encoder : KBinsDiscretizer, NoneType\",\"compositions\":[\"KBinsDiscretizer\"]},\"strategy\":{\"name\":\"strategy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strategy : str\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[\"KBinsDiscretizer\"],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:SplitBins:cols"}, {"id": "metagpt/tools/libs/feature_engineering.py:SplitBins:encoder"}, {"id": "{\"name\":\"encoder\",\"type_\":\"KBinsDiscretizer,NoneType\",\"default_\":\"\",\"description\":\"encoder : KBinsDiscretizer, NoneType\",\"compositions\":[\"KBinsDiscretizer\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:SplitBins:strategy"}, {"id": "{\"name\":\"strategy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strategy : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:SplitBins:fit"}, {"id": "metagpt/tools/libs/feature_engineering.py:SplitBins:transform"}, {"id": "?:KBinsDiscretizer"}, {"id": "metagpt/tools/libs/data_preprocess.py:StandardScale"}, {"id": "{\"name\":\"StandardScale\",\"package\":\"metagpt/tools/libs/data_preprocess.py:StandardScale\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"StandardScaler\",\"default_\":\"\",\"description\":\"model : StandardScaler\",\"compositions\":[\"StandardScaler\"]}},\"methods\":{},\"compositions\":[\"StandardScaler\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/data_preprocess.py:StandardScale:features"}, {"id": "metagpt/tools/libs/data_preprocess.py:StandardScale:model"}, {"id": "{\"name\":\"model\",\"type_\":\"StandardScaler\",\"default_\":\"\",\"description\":\"model : StandardScaler\",\"compositions\":[\"StandardScaler\"]}"}, {"id": "?:StandardScaler"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_env.py"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv"}, {"id": "{\"name\":\"StanfordTownEnv\",\"package\":\"metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv"}, {"id": "{\"name\":\"StanfordTownExtEnv\",\"package\":\"metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv\",\"attributes\":{\"address_tiles\":{\"name\":\"address_tiles\",\"type_\":\"dict[str,set]\",\"default_\":\"\",\"description\":\"address_tiles : dict[str, set]\",\"compositions\":[]},\"collision_maze\":{\"name\":\"collision_maze\",\"type_\":\"list[list]\",\"default_\":\"\",\"description\":\"collision_maze : list[list]\",\"compositions\":[]},\"maze_asset_path\":{\"name\":\"maze_asset_path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"maze_asset_path : Optional[Path]\",\"compositions\":[\"Path\"]},\"maze_height\":{\"name\":\"maze_height\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"maze_height : int\",\"compositions\":[]},\"maze_width\":{\"name\":\"maze_width\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"maze_width : int\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"special_constraint\":{\"name\":\"special_constraint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"special_constraint : str\",\"compositions\":[]},\"sq_tile_size\":{\"name\":\"sq_tile_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"sq_tile_size : int\",\"compositions\":[]},\"tiles\":{\"name\":\"tiles\",\"type_\":\"list[list[dict]]\",\"default_\":\"\",\"description\":\"tiles : list[list[dict]]\",\"compositions\":[]}},\"methods\":{\"access_tile\":{\"name\":\"access_tile\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"access_tile(tile: tuple[int, int]): dict\",\"aggregations\":[\"tuple\"]},\"add_event_from_tile\":{\"name\":\"add_event_from_tile\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"add_event_from_tile(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]},\"add_tiles_event\":{\"name\":\"add_tiles_event\",\"args\":[{\"name\":\"pt_y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"pt_y: int\",\"compositions\":[]},{\"name\":\"pt_x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"pt_x: int\",\"compositions\":[]},{\"name\":\"event\",\"type_\":\"Tuple[str,str,str,str]\",\"default_\":\"\",\"description\":\"event: Tuple[str, str, str, str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_tiles_event(pt_y: int, pt_x: int, event: Tuple[str, str, str, str])\",\"aggregations\":[]},\"get_address_tiles\":{\"name\":\"get_address_tiles\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_address_tiles(): dict\",\"aggregations\":[]},\"get_collision_maze\":{\"name\":\"get_collision_maze\",\"args\":[],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"get_collision_maze(): list\",\"aggregations\":[]},\"get_nearby_tiles\":{\"name\":\"get_nearby_tiles\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"vision_r\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"vision_r: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[tuple[int,int]]\",\"description\":\"list[tuple[int, int]]\",\"compositions\":[\"tuple\"]},\"description\":\"get_nearby_tiles(tile: tuple[int, int], vision_r: int): list[tuple[int, int]]\",\"aggregations\":[\"tuple\"]},\"get_tile_path\":{\"name\":\"get_tile_path\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"level\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"level: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_tile_path(tile: tuple[int, int], level: str): str\",\"aggregations\":[\"tuple\"]},\"remove_event_from_tile\":{\"name\":\"remove_event_from_tile\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"remove_event_from_tile(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]},\"remove_subject_events_from_tile\":{\"name\":\"remove_subject_events_from_tile\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"remove_subject_events_from_tile(subject: str, tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]},\"turn_coordinate_to_tile\":{\"name\":\"turn_coordinate_to_tile\",\"args\":[{\"name\":\"px_coordinate\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"px_coordinate: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"tuple[int,int]\",\"description\":\"tuple[int, int]\",\"compositions\":[\"tuple\"]},\"description\":\"turn_coordinate_to_tile(px_coordinate: tuple[int, int]): tuple[int, int]\",\"aggregations\":[\"tuple\"]},\"turn_event_from_tile_idle\":{\"name\":\"turn_event_from_tile_idle\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"turn_event_from_tile_idle(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}},\"compositions\":[\"Path\"],\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:address_tiles"}, {"id": "{\"name\":\"address_tiles\",\"type_\":\"dict[str,set]\",\"default_\":\"\",\"description\":\"address_tiles : dict[str, set]\",\"compositions\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:collision_maze"}, {"id": "{\"name\":\"collision_maze\",\"type_\":\"list[list]\",\"default_\":\"\",\"description\":\"collision_maze : list[list]\",\"compositions\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_asset_path"}, {"id": "{\"name\":\"maze_asset_path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"maze_asset_path : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_height"}, {"id": "{\"name\":\"maze_height\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"maze_height : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_width"}, {"id": "{\"name\":\"maze_width\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"maze_width : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:model_config"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:special_constraint"}, {"id": "{\"name\":\"special_constraint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"special_constraint : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:sq_tile_size"}, {"id": "{\"name\":\"sq_tile_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"sq_tile_size : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:tiles"}, {"id": "{\"name\":\"tiles\",\"type_\":\"list[list[dict]]\",\"default_\":\"\",\"description\":\"tiles : list[list[dict]]\",\"compositions\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:access_tile"}, {"id": "{\"name\":\"access_tile\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"access_tile(tile: tuple[int, int]): dict\",\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:add_event_from_tile"}, {"id": "{\"name\":\"add_event_from_tile\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"add_event_from_tile(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:add_tiles_event"}, {"id": "{\"name\":\"add_tiles_event\",\"args\":[{\"name\":\"pt_y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"pt_y: int\",\"compositions\":[]},{\"name\":\"pt_x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"pt_x: int\",\"compositions\":[]},{\"name\":\"event\",\"type_\":\"Tuple[str,str,str,str]\",\"default_\":\"\",\"description\":\"event: Tuple[str, str, str, str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_tiles_event(pt_y: int, pt_x: int, event: Tuple[str, str, str, str])\",\"aggregations\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_address_tiles"}, {"id": "{\"name\":\"get_address_tiles\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_address_tiles(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_collision_maze"}, {"id": "{\"name\":\"get_collision_maze\",\"args\":[],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"get_collision_maze(): list\",\"aggregations\":[]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_nearby_tiles"}, {"id": "{\"name\":\"get_nearby_tiles\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"vision_r\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"vision_r: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[tuple[int,int]]\",\"description\":\"list[tuple[int, int]]\",\"compositions\":[\"tuple\"]},\"description\":\"get_nearby_tiles(tile: tuple[int, int], vision_r: int): list[tuple[int, int]]\",\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_tile_path"}, {"id": "{\"name\":\"get_tile_path\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"level\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"level: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_tile_path(tile: tuple[int, int], level: str): str\",\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:remove_event_from_tile"}, {"id": "{\"name\":\"remove_event_from_tile\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"remove_event_from_tile(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:remove_subject_events_from_tile"}, {"id": "{\"name\":\"remove_subject_events_from_tile\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"remove_subject_events_from_tile(subject: str, tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:turn_coordinate_to_tile"}, {"id": "{\"name\":\"turn_coordinate_to_tile\",\"args\":[{\"name\":\"px_coordinate\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"px_coordinate: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"tuple[int,int]\",\"description\":\"tuple[int, int]\",\"compositions\":[\"tuple\"]},\"description\":\"turn_coordinate_to_tile(px_coordinate: tuple[int, int]): tuple[int, int]\",\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:turn_event_from_tile_idle"}, {"id": "{\"name\":\"turn_event_from_tile_idle\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"turn_event_from_tile_idle(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}"}, {"id": "metagpt/strategy/tot_schema.py:Strategy"}, {"id": "{\"name\":\"Strategy\",\"package\":\"metagpt/strategy/tot_schema.py:Strategy\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:Strategy:name"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor"}, {"id": "{\"name\":\"SubprocessMonitor\",\"package\":\"metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor\",\"attributes\":{\"callback\":{\"name\":\"callback\",\"type_\":\"Optional[callable]\",\"default_\":\"\",\"description\":\"callback : Optional[callable]\",\"compositions\":[\"callable\"]},\"callback_match\":{\"name\":\"callback_match\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"callback_match : str\",\"compositions\":[]},\"commands\":{\"name\":\"commands\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"commands : List[str]\",\"compositions\":[]},\"finished_callback\":{\"name\":\"finished_callback\",\"type_\":\"Optional[callable]\",\"default_\":\"\",\"description\":\"finished_callback : Optional[callable]\",\"compositions\":[\"callable\"]},\"is_running\":{\"name\":\"is_running\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_running\",\"compositions\":[]},\"logger\":{\"name\":\"logger\",\"type_\":\"Logger\",\"default_\":\"\",\"description\":\"logger : Logger\",\"compositions\":[\"Logger\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"process\":{\"name\":\"process\",\"type_\":\"NoneType,Popen\",\"default_\":\"\",\"description\":\"process : NoneType, Popen\",\"compositions\":[\"Popen\"]},\"ready_event\":{\"name\":\"ready_event\",\"type_\":\"Event,NoneType\",\"default_\":\"\",\"description\":\"ready_event : Event, NoneType\",\"compositions\":[\"Event\"]},\"ready_line\":{\"name\":\"ready_line\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ready_line : NoneType\",\"compositions\":[]},\"ready_match\":{\"name\":\"ready_match\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ready_match : str\",\"compositions\":[]},\"thread\":{\"name\":\"thread\",\"type_\":\"NoneType,Thread\",\"default_\":\"\",\"description\":\"thread : NoneType, Thread\",\"compositions\":[\"Thread\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"stop\":{\"name\":\"stop\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"stop()\",\"aggregations\":[]}},\"compositions\":[\"callable\",\"Logger\",\"Popen\",\"Event\",\"Thread\"],\"aggregations\":[]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:callback"}, {"id": "{\"name\":\"callback\",\"type_\":\"Optional[callable]\",\"default_\":\"\",\"description\":\"callback : Optional[callable]\",\"compositions\":[\"callable\"]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:callback_match"}, {"id": "{\"name\":\"callback_match\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"callback_match : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:commands"}, {"id": "{\"name\":\"commands\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"commands : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:finished_callback"}, {"id": "{\"name\":\"finished_callback\",\"type_\":\"Optional[callable]\",\"default_\":\"\",\"description\":\"finished_callback : Optional[callable]\",\"compositions\":[\"callable\"]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:is_running"}, {"id": "{\"name\":\"is_running\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_running\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:logger"}, {"id": "{\"name\":\"logger\",\"type_\":\"Logger\",\"default_\":\"\",\"description\":\"logger : Logger\",\"compositions\":[\"Logger\"]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:name"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:process"}, {"id": "{\"name\":\"process\",\"type_\":\"NoneType,Popen\",\"default_\":\"\",\"description\":\"process : NoneType, Popen\",\"compositions\":[\"Popen\"]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_event"}, {"id": "{\"name\":\"ready_event\",\"type_\":\"Event,NoneType\",\"default_\":\"\",\"description\":\"ready_event : Event, NoneType\",\"compositions\":[\"Event\"]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_line"}, {"id": "{\"name\":\"ready_line\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ready_line : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_match"}, {"id": "{\"name\":\"ready_match\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ready_match : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:thread"}, {"id": "{\"name\":\"thread\",\"type_\":\"NoneType,Thread\",\"default_\":\"\",\"description\":\"thread : NoneType, Thread\",\"compositions\":[\"Thread\"]}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:run"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:stop"}, {"id": "{\"name\":\"stop\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"stop()\",\"aggregations\":[]}"}, {"id": "?:callable"}, {"id": "?:Logger"}, {"id": "?:Popen"}, {"id": "?:Event"}, {"id": "?:Thread"}, {"id": "metagpt/subscription.py"}, {"id": "metagpt/subscription.py:SubscriptionRunner"}, {"id": "{\"name\":\"SubscriptionRunner\",\"package\":\"metagpt/subscription.py:SubscriptionRunner\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"tasks\":{\"name\":\"tasks\",\"type_\":\"dict[Role,asyncio.Task]\",\"default_\":\"\",\"description\":\"tasks : dict[Role, asyncio.Task]\",\"compositions\":[\"Role\",\"asyncio.Task\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"raise_exception\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"raise_exception: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(raise_exception: bool)\",\"aggregations\":[]},\"subscribe\":{\"name\":\"subscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]},{\"name\":\"trigger\",\"type_\":\"AsyncGenerator[Message,None]\",\"default_\":\"\",\"description\":\"trigger: AsyncGenerator[Message, None]\",\"compositions\":[\"AsyncGenerator\",\"Message\"]},{\"name\":\"callback\",\"type_\":\"Callable[[Message],Awaitable[None]]\",\"default_\":\"\",\"description\":\"callback: Callable[[Message], Awaitable[None]]\",\"compositions\":[\"Awaitable\",\"Callable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"subscribe(role: Role, trigger: AsyncGenerator[Message, None], callback: Callable[[Message], Awaitable[None]])\",\"aggregations\":[\"Role\",\"Message\",\"Awaitable\",\"Callable\",\"AsyncGenerator\"]},\"unsubscribe\":{\"name\":\"unsubscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"unsubscribe(role: Role)\",\"aggregations\":[\"Role\"]}},\"compositions\":[\"Role\",\"asyncio.Task\"],\"aggregations\":[\"Message\",\"Awaitable\",\"Callable\",\"AsyncGenerator\"]}"}, {"id": "metagpt/subscription.py:SubscriptionRunner:model_config"}, {"id": "metagpt/subscription.py:SubscriptionRunner:tasks"}, {"id": "{\"name\":\"tasks\",\"type_\":\"dict[Role,asyncio.Task]\",\"default_\":\"\",\"description\":\"tasks : dict[Role, asyncio.Task]\",\"compositions\":[\"Role\",\"asyncio.Task\"]}"}, {"id": "metagpt/subscription.py:SubscriptionRunner:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"raise_exception\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"raise_exception: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(raise_exception: bool)\",\"aggregations\":[]}"}, {"id": "metagpt/subscription.py:SubscriptionRunner:subscribe"}, {"id": "{\"name\":\"subscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]},{\"name\":\"trigger\",\"type_\":\"AsyncGenerator[Message,None]\",\"default_\":\"\",\"description\":\"trigger: AsyncGenerator[Message, None]\",\"compositions\":[\"AsyncGenerator\",\"Message\"]},{\"name\":\"callback\",\"type_\":\"Callable[[Message],Awaitable[None]]\",\"default_\":\"\",\"description\":\"callback: Callable[[Message], Awaitable[None]]\",\"compositions\":[\"Awaitable\",\"Callable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"subscribe(role: Role, trigger: AsyncGenerator[Message, None], callback: Callable[[Message], Awaitable[None]])\",\"aggregations\":[\"Role\",\"Message\",\"Awaitable\",\"Callable\",\"AsyncGenerator\"]}"}, {"id": "metagpt/subscription.py:SubscriptionRunner:unsubscribe"}, {"id": "{\"name\":\"unsubscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"unsubscribe(role: Role)\",\"aggregations\":[\"Role\"]}"}, {"id": "?:asyncio.Task"}, {"id": "?:Awaitable"}, {"id": "metagpt/actions/summarize_code.py"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode"}, {"id": "{\"name\":\"SummarizeCode\",\"package\":\"metagpt/actions/summarize_code.py:SummarizeCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"summarize_code\":{\"name\":\"summarize_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_code(prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode:i_context"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode:name"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode:run"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode:summarize_code"}, {"id": "{\"name\":\"summarize_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_code(prompt)\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:SystemMessage"}, {"id": "{\"name\":\"SystemMessage\",\"package\":\"metagpt/schema.py:SystemMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:TOTSolver"}, {"id": "{\"name\":\"TOTSolver\",\"package\":\"metagpt/strategy/solver.py:TOTSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/solver.py:TOTSolver:solve"}, {"id": "metagpt/actions/talk_action.py"}, {"id": "metagpt/actions/talk_action.py:TalkAction"}, {"id": "{\"name\":\"TalkAction\",\"package\":\"metagpt/actions/talk_action.py:TalkAction\",\"attributes\":{\"aask_args\":{\"name\":\"aask_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"aask_args\",\"compositions\":[]},\"agent_description\":{\"name\":\"agent_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"agent_description\",\"compositions\":[]},\"history_summary\":{\"name\":\"history_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history_summary : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"i_context : str\",\"compositions\":[]},\"knowledge\":{\"name\":\"knowledge\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"knowledge : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"\",\"default_\":\"\",\"description\":\"language\",\"compositions\":[]},\"prompt\":{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},\"prompt_gpt4\":{\"name\":\"prompt_gpt4\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_gpt4\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:aask_args"}, {"id": "{\"name\":\"aask_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"aask_args\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:agent_description"}, {"id": "{\"name\":\"agent_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"agent_description\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:history_summary"}, {"id": "{\"name\":\"history_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history_summary : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"i_context : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:knowledge"}, {"id": "{\"name\":\"knowledge\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"knowledge : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:language"}, {"id": "{\"name\":\"language\",\"type_\":\"\",\"default_\":\"\",\"description\":\"language\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:prompt"}, {"id": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4"}, {"id": "{\"name\":\"prompt_gpt4\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_gpt4\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:rsp"}, {"id": "metagpt/actions/talk_action.py:TalkAction:run"}, {"id": "metagpt/actions/talk_action.py:TalkActionPrompt"}, {"id": "{\"name\":\"TalkActionPrompt\",\"package\":\"metagpt/actions/talk_action.py:TalkActionPrompt\",\"attributes\":{\"FORMATION\":{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]},\"FORMATION_LOOSE\":{\"name\":\"FORMATION_LOOSE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION_LOOSE : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION"}, {"id": "{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION_LOOSE"}, {"id": "{\"name\":\"FORMATION_LOOSE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION_LOOSE : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder"}, {"id": "{\"name\":\"TargetMeanEncoder\",\"package\":\"metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder\",\"attributes\":{\"col\":{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]},\"encoder_dict\":{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]},\"label\":{\"name\":\"label\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label : str\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:col"}, {"id": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:encoder_dict"}, {"id": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:label"}, {"id": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:fit"}, {"id": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:transform"}, {"id": "metagpt/schema.py:Task"}, {"id": "{\"name\":\"Task\",\"package\":\"metagpt/schema.py:Task\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]},\"dependent_task_ids\":{\"name\":\"dependent_task_ids\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"dependent_task_ids : list[str]\",\"compositions\":[]},\"instruction\":{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]},\"is_finished\":{\"name\":\"is_finished\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_finished : bool\",\"compositions\":[]},\"is_success\":{\"name\":\"is_success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_success : bool\",\"compositions\":[]},\"result\":{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]},\"task_id\":{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id : str\",\"compositions\":[]},\"task_type\":{\"name\":\"task_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_type : str\",\"compositions\":[]}},\"methods\":{\"reset\":{\"name\":\"reset\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset()\",\"aggregations\":[]},\"update_task_result\":{\"name\":\"update_task_result\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_task_result(task_result: TaskResult)\",\"aggregations\":[\"TaskResult\"]}},\"compositions\":[],\"aggregations\":[\"TaskResult\"]}"}, {"id": "metagpt/schema.py:Task:code"}, {"id": "metagpt/schema.py:Task:dependent_task_ids"}, {"id": "{\"name\":\"dependent_task_ids\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"dependent_task_ids : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Task:instruction"}, {"id": "metagpt/schema.py:Task:is_finished"}, {"id": "{\"name\":\"is_finished\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_finished : bool\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Task:is_success"}, {"id": "{\"name\":\"is_success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_success : bool\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Task:result"}, {"id": "metagpt/schema.py:Task:task_id"}, {"id": "{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Task:task_type"}, {"id": "{\"name\":\"task_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_type : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Task:reset"}, {"id": "{\"name\":\"reset\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset()\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Task:update_task_result"}, {"id": "{\"name\":\"update_task_result\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_task_result(task_result: TaskResult)\",\"aggregations\":[\"TaskResult\"]}"}, {"id": "metagpt/schema.py:TaskResult"}, {"id": "{\"name\":\"TaskResult\",\"package\":\"metagpt/schema.py:TaskResult\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]},\"is_success\":{\"name\":\"is_success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_success : bool\",\"compositions\":[]},\"result\":{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:TaskResult:code"}, {"id": "metagpt/schema.py:TaskResult:is_success"}, {"id": "metagpt/schema.py:TaskResult:result"}, {"id": "metagpt/roles/teacher.py"}, {"id": "metagpt/roles/teacher.py:Teacher"}, {"id": "{\"name\":\"Teacher\",\"package\":\"metagpt/roles/teacher.py:Teacher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"course_title\":{\"name\":\"course_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"course_title\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"new_file_name\":{\"name\":\"new_file_name\",\"args\":[{\"name\":\"lesson_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lesson_title\",\"compositions\":[]},{\"name\":\"ext\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ext\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_file_name(lesson_title, ext)\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(content)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/teacher.py:Teacher:constraints"}, {"id": "metagpt/roles/teacher.py:Teacher:course_title"}, {"id": "{\"name\":\"course_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"course_title\",\"compositions\":[]}"}, {"id": "metagpt/roles/teacher.py:Teacher:desc"}, {"id": "metagpt/roles/teacher.py:Teacher:goal"}, {"id": "metagpt/roles/teacher.py:Teacher:name"}, {"id": "metagpt/roles/teacher.py:Teacher:profile"}, {"id": "metagpt/roles/teacher.py:Teacher:new_file_name"}, {"id": "{\"name\":\"new_file_name\",\"args\":[{\"name\":\"lesson_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lesson_title\",\"compositions\":[]},{\"name\":\"ext\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ext\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_file_name(lesson_title, ext)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/teacher.py:Teacher:save"}, {"id": "{\"name\":\"save\",\"args\":[{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(content)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock"}, {"id": "{\"name\":\"TeachingPlanBlock\",\"package\":\"metagpt/actions/write_teaching_plan.py:TeachingPlanBlock\",\"attributes\":{\"COURSE_TITLE\":{\"name\":\"COURSE_TITLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"COURSE_TITLE : str\",\"compositions\":[]},\"DATA_BEGIN_TAG\":{\"name\":\"DATA_BEGIN_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_BEGIN_TAG : str\",\"compositions\":[]},\"DATA_END_TAG\":{\"name\":\"DATA_END_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_END_TAG : str\",\"compositions\":[]},\"FORMATION\":{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]},\"PROMPT_TEMPLATE\":{\"name\":\"PROMPT_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TEMPLATE : str\",\"compositions\":[]},\"PROMPT_TITLE_TEMPLATE\":{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TITLE_TEMPLATE : str\",\"compositions\":[]},\"TOPICS\":{\"name\":\"TOPICS\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"TOPICS : list\",\"compositions\":[]},\"TOPIC_STATEMENTS\":{\"name\":\"TOPIC_STATEMENTS\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"TOPIC_STATEMENTS : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:COURSE_TITLE"}, {"id": "{\"name\":\"COURSE_TITLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"COURSE_TITLE : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_BEGIN_TAG"}, {"id": "{\"name\":\"DATA_BEGIN_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_BEGIN_TAG : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_END_TAG"}, {"id": "{\"name\":\"DATA_END_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_END_TAG : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:FORMATION"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TEMPLATE"}, {"id": "{\"name\":\"PROMPT_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TEMPLATE : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TITLE_TEMPLATE"}, {"id": "{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TITLE_TEMPLATE : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPICS"}, {"id": "{\"name\":\"TOPICS\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"TOPICS : list\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPIC_STATEMENTS"}, {"id": "{\"name\":\"TOPIC_STATEMENTS\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"TOPIC_STATEMENTS : dict\",\"compositions\":[]}"}, {"id": "metagpt/team.py"}, {"id": "metagpt/team.py:Team"}, {"id": "{\"name\":\"Team\",\"package\":\"metagpt/team.py:Team\",\"attributes\":{\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"env\":{\"name\":\"env\",\"type_\":\"Optional[Environment]\",\"default_\":\"\",\"description\":\"env : Optional[Environment]\",\"compositions\":[\"Environment\"]},\"idea\":{\"name\":\"idea\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"idea : str\",\"compositions\":[]},\"investment\":{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment : float\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"deserialize\":{\"name\":\"deserialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"'Team'\",\"description\":\"'Team'\",\"compositions\":[\"Team\"]},\"description\":\"deserialize(stg_path: Path, context: Context): 'Team'\",\"aggregations\":[\"Team\",\"Context\",\"Path\"]},\"hire\":{\"name\":\"hire\",\"args\":[{\"name\":\"roles\",\"type_\":\"list[Role]\",\"default_\":\"\",\"description\":\"roles: list[Role]\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"hire(roles: list[Role])\",\"aggregations\":[\"Role\"]},\"invest\":{\"name\":\"invest\",\"args\":[{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment: float\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"invest(investment: float)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"n_round\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_round\",\"compositions\":[]},{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"\",\"default_\":\"\",\"description\":\"send_to\",\"compositions\":[]},{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(n_round, idea, send_to, auto_archive)\",\"aggregations\":[]},\"run_project\":{\"name\":\"run_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_project(idea, send_to: str)\",\"aggregations\":[]},\"serialize\":{\"name\":\"serialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"serialize(stg_path: Path)\",\"aggregations\":[\"Path\"]},\"start_project\":{\"name\":\"start_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"start_project(idea, send_to: str)\",\"aggregations\":[]}},\"compositions\":[\"Environment\"],\"aggregations\":[\"Team\",\"Context\",\"Path\",\"Role\"]}"}, {"id": "metagpt/team.py:Team:cost_manager"}, {"id": "metagpt/team.py:Team:env"}, {"id": "{\"name\":\"env\",\"type_\":\"Optional[Environment]\",\"default_\":\"\",\"description\":\"env : Optional[Environment]\",\"compositions\":[\"Environment\"]}"}, {"id": "metagpt/team.py:Team:idea"}, {"id": "{\"name\":\"idea\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"idea : str\",\"compositions\":[]}"}, {"id": "metagpt/team.py:Team:investment"}, {"id": "{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment : float\",\"compositions\":[]}"}, {"id": "metagpt/team.py:Team:model_config"}, {"id": "metagpt/team.py:Team:deserialize"}, {"id": "{\"name\":\"deserialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"'Team'\",\"description\":\"'Team'\",\"compositions\":[\"Team\"]},\"description\":\"deserialize(stg_path: Path, context: Context): 'Team'\",\"aggregations\":[\"Team\",\"Context\",\"Path\"]}"}, {"id": "metagpt/team.py:Team:hire"}, {"id": "{\"name\":\"hire\",\"args\":[{\"name\":\"roles\",\"type_\":\"list[Role]\",\"default_\":\"\",\"description\":\"roles: list[Role]\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"hire(roles: list[Role])\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/team.py:Team:invest"}, {"id": "{\"name\":\"invest\",\"args\":[{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment: float\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"invest(investment: float)\",\"aggregations\":[]}"}, {"id": "metagpt/team.py:Team:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"n_round\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_round\",\"compositions\":[]},{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"\",\"default_\":\"\",\"description\":\"send_to\",\"compositions\":[]},{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(n_round, idea, send_to, auto_archive)\",\"aggregations\":[]}"}, {"id": "metagpt/team.py:Team:run_project"}, {"id": "{\"name\":\"run_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_project(idea, send_to: str)\",\"aggregations\":[]}"}, {"id": "metagpt/team.py:Team:serialize"}, {"id": "{\"name\":\"serialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"serialize(stg_path: Path)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/team.py:Team:start_project"}, {"id": "{\"name\":\"start_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"start_project(idea, send_to: str)\",\"aggregations\":[]}"}, {"id": "?:Team"}, {"id": "metagpt/schema.py:TestingContext"}, {"id": "{\"name\":\"TestingContext\",\"package\":\"metagpt/schema.py:TestingContext\",\"attributes\":{\"code_doc\":{\"name\":\"code_doc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_doc\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"test_doc\":{\"name\":\"test_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"test_doc : Optional[Document]\",\"compositions\":[\"Document\"]}},\"methods\":{},\"compositions\":[\"Document\"],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:TestingContext:code_doc"}, {"id": "{\"name\":\"code_doc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_doc\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:TestingContext:filename"}, {"id": "metagpt/schema.py:TestingContext:test_doc"}, {"id": "{\"name\":\"test_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"test_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode"}, {"id": "{\"name\":\"ThoughtNode\",\"package\":\"metagpt/strategy/base.py:ThoughtNode\",\"attributes\":{\"id\":{\"name\":\"id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"id : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"valid_status\":{\"name\":\"valid_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"valid_status : bool\",\"compositions\":[]},\"value\":{\"name\":\"value\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"value : int\",\"compositions\":[]}},\"methods\":{\"update_valid_status\":{\"name\":\"update_valid_status\",\"args\":[{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_valid_status(status): None\",\"aggregations\":[]},\"update_value\":{\"name\":\"update_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_value(value): None\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:id"}, {"id": "{\"name\":\"id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"id : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:name"}, {"id": "metagpt/strategy/base.py:ThoughtNode:valid_status"}, {"id": "{\"name\":\"valid_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"valid_status : bool\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:value"}, {"id": "{\"name\":\"value\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"value : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:update_valid_status"}, {"id": "{\"name\":\"update_valid_status\",\"args\":[{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_valid_status(status): None\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:update_value"}, {"id": "{\"name\":\"update_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_value(value): None\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"id": "{\"name\":\"ThoughtSolverBase\",\"package\":\"metagpt/strategy/tot.py:ThoughtSolverBase\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"Optional[ThoughtTree]\",\"default_\":\"\",\"description\":\"thought_tree : Optional[ThoughtTree]\",\"compositions\":[\"ThoughtTree\"]}},\"methods\":{\"evaluate_node\":{\"name\":\"evaluate_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"parent_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parent_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"evaluate_node(node, parent_value): None\",\"aggregations\":[]},\"generate_thoughts\":{\"name\":\"generate_thoughts\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"generate_thoughts(current_state, current_node): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]},\"select_nodes\":{\"name\":\"select_nodes\",\"args\":[{\"name\":\"thought_nodes\",\"type_\":\"List[ThoughtNode]\",\"default_\":\"\",\"description\":\"thought_nodes: List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"select_nodes(thought_nodes: List[ThoughtNode]): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]},\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]},\"update_solution\":{\"name\":\"update_solution\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_solution()\",\"aggregations\":[]}},\"compositions\":[\"ThoughtTree\"],\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:config"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:llm"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:model_config"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:thought_tree"}, {"id": "{\"name\":\"thought_tree\",\"type_\":\"Optional[ThoughtTree]\",\"default_\":\"\",\"description\":\"thought_tree : Optional[ThoughtTree]\",\"compositions\":[\"ThoughtTree\"]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:evaluate_node"}, {"id": "{\"name\":\"evaluate_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"parent_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parent_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"evaluate_node(node, parent_value): None\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:generate_thoughts"}, {"id": "{\"name\":\"generate_thoughts\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"generate_thoughts(current_state, current_node): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:select_nodes"}, {"id": "{\"name\":\"select_nodes\",\"args\":[{\"name\":\"thought_nodes\",\"type_\":\"List[ThoughtNode]\",\"default_\":\"\",\"description\":\"thought_nodes: List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"select_nodes(thought_nodes: List[ThoughtNode]): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:solve"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:update_solution"}, {"id": "{\"name\":\"update_solution\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_solution()\",\"aggregations\":[]}"}, {"id": "?:ThoughtTree"}, {"id": "?:ThoughtNode"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig"}, {"id": "{\"name\":\"ThoughtSolverConfig\",\"package\":\"metagpt/strategy/tot_schema.py:ThoughtSolverConfig\",\"attributes\":{\"evaluator\":{\"name\":\"evaluator\",\"type_\":\"\",\"default_\":\"\",\"description\":\"evaluator\",\"compositions\":[]},\"max_steps\":{\"name\":\"max_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_steps : int\",\"compositions\":[]},\"method_select\":{\"name\":\"method_select\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method_select : str\",\"compositions\":[]},\"n_generate_sample\":{\"name\":\"n_generate_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_generate_sample : int\",\"compositions\":[]},\"n_select_sample\":{\"name\":\"n_select_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_select_sample : int\",\"compositions\":[]},\"n_solution_sample\":{\"name\":\"n_solution_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_solution_sample : int\",\"compositions\":[]},\"parser\":{\"name\":\"parser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parser\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator"}, {"id": "{\"name\":\"evaluator\",\"type_\":\"\",\"default_\":\"\",\"description\":\"evaluator\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:max_steps"}, {"id": "{\"name\":\"max_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_steps : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:method_select"}, {"id": "{\"name\":\"method_select\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method_select : str\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_generate_sample"}, {"id": "{\"name\":\"n_generate_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_generate_sample : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_select_sample"}, {"id": "{\"name\":\"n_select_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_select_sample : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_solution_sample"}, {"id": "{\"name\":\"n_solution_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_solution_sample : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser"}, {"id": "{\"name\":\"parser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parser\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree"}, {"id": "{\"name\":\"ThoughtTree\",\"package\":\"metagpt/strategy/base.py:ThoughtTree\",\"attributes\":{\"all_nodes\":{\"name\":\"all_nodes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_nodes\",\"compositions\":[]}},\"methods\":{\"parse_node_path\":{\"name\":\"parse_node_path\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_node_path(node): List[str]\",\"aggregations\":[]},\"show\":{\"name\":\"show\",\"args\":[],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"show(): None\",\"aggregations\":[]},\"update_node\":{\"name\":\"update_node\",\"args\":[{\"name\":\"thought\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"thought: List[dict]\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"ThoughtNode\",\"default_\":\"\",\"description\":\"current_node: ThoughtNode\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"update_node(thought: List[dict], current_node: ThoughtNode): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}},\"compositions\":[],\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree:all_nodes"}, {"id": "{\"name\":\"all_nodes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_nodes\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree:parse_node_path"}, {"id": "{\"name\":\"parse_node_path\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_node_path(node): List[str]\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree:show"}, {"id": "{\"name\":\"show\",\"args\":[],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"show(): None\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree:update_node"}, {"id": "{\"name\":\"update_node\",\"args\":[{\"name\":\"thought\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"thought: List[dict]\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"ThoughtNode\",\"default_\":\"\",\"description\":\"current_node: ThoughtNode\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"update_node(thought: List[dict], current_node: ThoughtNode): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/utils/cost_manager.py:TokenCostManager"}, {"id": "{\"name\":\"TokenCostManager\",\"package\":\"metagpt/utils/cost_manager.py:TokenCostManager\",\"attributes\":{\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_completion_tokens\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_prompt_tokens\",\"compositions\":[]}},\"methods\":{\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:TokenCostManager:total_completion_tokens"}, {"id": "{\"name\":\"total_completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_completion_tokens\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:TokenCostManager:total_prompt_tokens"}, {"id": "{\"name\":\"total_prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_prompt_tokens\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:TokenCostManager:update_cost"}, {"id": "metagpt/tools/tool_data_type.py"}, {"id": "metagpt/tools/tool_data_type.py:Tool"}, {"id": "{\"name\":\"Tool\",\"package\":\"metagpt/tools/tool_data_type.py:Tool\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]},\"schemas\":{\"name\":\"schemas\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schemas : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/tool_data_type.py:Tool:code"}, {"id": "metagpt/tools/tool_data_type.py:Tool:name"}, {"id": "metagpt/tools/tool_data_type.py:Tool:path"}, {"id": "metagpt/tools/tool_data_type.py:Tool:schemas"}, {"id": "{\"name\":\"schemas\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schemas : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/tool_registry.py"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry"}, {"id": "{\"name\":\"ToolRegistry\",\"package\":\"metagpt/tools/tool_registry.py:ToolRegistry\",\"attributes\":{\"tool_types\":{\"name\":\"tool_types\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tool_types : dict\",\"compositions\":[]},\"tools\":{\"name\":\"tools\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tools : dict\",\"compositions\":[]},\"tools_by_types\":{\"name\":\"tools_by_types\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tools_by_types : dict\",\"compositions\":[]}},\"methods\":{\"get_tool\":{\"name\":\"get_tool\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tool\",\"description\":\"Tool\",\"compositions\":[\"Tool\"]},\"description\":\"get_tool(key): Tool\",\"aggregations\":[\"Tool\"]},\"get_tool_type\":{\"name\":\"get_tool_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ToolType\",\"description\":\"ToolType\",\"compositions\":[\"ToolType\"]},\"description\":\"get_tool_type(key): ToolType\",\"aggregations\":[\"ToolType\"]},\"get_tool_types\":{\"name\":\"get_tool_types\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,ToolType]\",\"description\":\"dict[str, ToolType]\",\"compositions\":[\"ToolType\"]},\"description\":\"get_tool_types(): dict[str, ToolType]\",\"aggregations\":[\"ToolType\"]},\"get_tools_by_type\":{\"name\":\"get_tools_by_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Tool]\",\"description\":\"dict[str, Tool]\",\"compositions\":[\"Tool\"]},\"description\":\"get_tools_by_type(key): dict[str, Tool]\",\"aggregations\":[\"Tool\"]},\"has_tool\":{\"name\":\"has_tool\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tool\",\"description\":\"Tool\",\"compositions\":[\"Tool\"]},\"description\":\"has_tool(key: str): Tool\",\"aggregations\":[\"Tool\"]},\"has_tool_type\":{\"name\":\"has_tool_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"has_tool_type(key): bool\",\"aggregations\":[]},\"init_tool_types\":{\"name\":\"init_tool_types\",\"args\":[{\"name\":\"tool_types\",\"type_\":\"ToolType\",\"default_\":\"\",\"description\":\"tool_types: ToolType\",\"compositions\":[\"ToolType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_tool_types(tool_types: ToolType)\",\"aggregations\":[\"ToolType\"]},\"register_tool\":{\"name\":\"register_tool\",\"args\":[{\"name\":\"tool_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_name\",\"compositions\":[]},{\"name\":\"tool_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_path\",\"compositions\":[]},{\"name\":\"schema_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema_path\",\"compositions\":[]},{\"name\":\"tool_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_code\",\"compositions\":[]},{\"name\":\"tool_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_type\",\"compositions\":[]},{\"name\":\"tool_source_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_source_object\",\"compositions\":[]},{\"name\":\"include_functions\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_functions\",\"compositions\":[]},{\"name\":\"verbose\",\"type_\":\"\",\"default_\":\"\",\"description\":\"verbose\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register_tool(tool_name, tool_path, schema_path, tool_code, tool_type, tool_source_object, include_functions, verbose)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Tool\",\"ToolType\"]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:tool_types"}, {"id": "{\"name\":\"tool_types\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tool_types : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:tools"}, {"id": "{\"name\":\"tools\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tools : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:tools_by_types"}, {"id": "{\"name\":\"tools_by_types\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tools_by_types : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool"}, {"id": "{\"name\":\"get_tool\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tool\",\"description\":\"Tool\",\"compositions\":[\"Tool\"]},\"description\":\"get_tool(key): Tool\",\"aggregations\":[\"Tool\"]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool_type"}, {"id": "{\"name\":\"get_tool_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ToolType\",\"description\":\"ToolType\",\"compositions\":[\"ToolType\"]},\"description\":\"get_tool_type(key): ToolType\",\"aggregations\":[\"ToolType\"]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool_types"}, {"id": "{\"name\":\"get_tool_types\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,ToolType]\",\"description\":\"dict[str, ToolType]\",\"compositions\":[\"ToolType\"]},\"description\":\"get_tool_types(): dict[str, ToolType]\",\"aggregations\":[\"ToolType\"]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:get_tools_by_type"}, {"id": "{\"name\":\"get_tools_by_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Tool]\",\"description\":\"dict[str, Tool]\",\"compositions\":[\"Tool\"]},\"description\":\"get_tools_by_type(key): dict[str, Tool]\",\"aggregations\":[\"Tool\"]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:has_tool"}, {"id": "{\"name\":\"has_tool\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tool\",\"description\":\"Tool\",\"compositions\":[\"Tool\"]},\"description\":\"has_tool(key: str): Tool\",\"aggregations\":[\"Tool\"]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:has_tool_type"}, {"id": "{\"name\":\"has_tool_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"has_tool_type(key): bool\",\"aggregations\":[]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:init_tool_types"}, {"id": "{\"name\":\"init_tool_types\",\"args\":[{\"name\":\"tool_types\",\"type_\":\"ToolType\",\"default_\":\"\",\"description\":\"tool_types: ToolType\",\"compositions\":[\"ToolType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_tool_types(tool_types: ToolType)\",\"aggregations\":[\"ToolType\"]}"}, {"id": "metagpt/tools/tool_registry.py:ToolRegistry:register_tool"}, {"id": "{\"name\":\"register_tool\",\"args\":[{\"name\":\"tool_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_name\",\"compositions\":[]},{\"name\":\"tool_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_path\",\"compositions\":[]},{\"name\":\"schema_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema_path\",\"compositions\":[]},{\"name\":\"tool_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_code\",\"compositions\":[]},{\"name\":\"tool_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_type\",\"compositions\":[]},{\"name\":\"tool_source_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_source_object\",\"compositions\":[]},{\"name\":\"include_functions\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_functions\",\"compositions\":[]},{\"name\":\"verbose\",\"type_\":\"\",\"default_\":\"\",\"description\":\"verbose\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register_tool(tool_name, tool_path, schema_path, tool_code, tool_type, tool_source_object, include_functions, verbose)\",\"aggregations\":[]}"}, {"id": "?:Tool"}, {"id": "?:ToolType"}, {"id": "metagpt/tools/tool_data_type.py:ToolSchema"}, {"id": "{\"name\":\"ToolSchema\",\"package\":\"metagpt/tools/tool_data_type.py:ToolSchema\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/tool_data_type.py:ToolSchema:description"}, {"id": "metagpt/tools/tool_type.py"}, {"id": "metagpt/tools/tool_type.py:ToolType"}, {"id": "{\"name\":\"ToolType\",\"package\":\"metagpt/tools/tool_type.py:ToolType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"type_name\":{\"name\":\"type_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"type_name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/tool_type.py:ToolType:name"}, {"id": "metagpt/tools/tool_type.py:ToolType:type_name"}, {"id": "{\"name\":\"type_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"type_name\",\"compositions\":[]}"}, {"id": "metagpt/tools/tool_data_type.py:ToolTypeDef"}, {"id": "{\"name\":\"ToolTypeDef\",\"package\":\"metagpt/tools/tool_data_type.py:ToolTypeDef\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"usage_prompt\":{\"name\":\"usage_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"usage_prompt : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/tool_data_type.py:ToolTypeDef:desc"}, {"id": "metagpt/tools/tool_data_type.py:ToolTypeDef:name"}, {"id": "metagpt/tools/tool_data_type.py:ToolTypeDef:usage_prompt"}, {"id": "{\"name\":\"usage_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"usage_prompt : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/translator.py"}, {"id": "metagpt/tools/translator.py:Translator"}, {"id": "{\"name\":\"Translator\",\"package\":\"metagpt/tools/translator.py:Translator\",\"attributes\":{},\"methods\":{\"translate_prompt\":{\"name\":\"translate_prompt\",\"args\":[{\"name\":\"original\",\"type_\":\"\",\"default_\":\"\",\"description\":\"original\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"translate_prompt(original, lang)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/translator.py:Translator:translate_prompt"}, {"id": "{\"name\":\"translate_prompt\",\"args\":[{\"name\":\"original\",\"type_\":\"\",\"default_\":\"\",\"description\":\"original\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"translate_prompt(original, lang)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection"}, {"id": "{\"name\":\"TreeBasedSelection\",\"package\":\"metagpt/tools/libs/feature_engineering.py:TreeBasedSelection\",\"attributes\":{\"feats\":{\"name\":\"feats\",\"type_\":\"\",\"default_\":\"\",\"description\":\"feats : NoneType\",\"compositions\":[]},\"label_col\":{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]},\"task_type\":{\"name\":\"task_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_type : str\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:feats"}, {"id": "{\"name\":\"feats\",\"type_\":\"\",\"default_\":\"\",\"description\":\"feats : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:label_col"}, {"id": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:task_type"}, {"id": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:fit"}, {"id": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:transform"}, {"id": "metagpt/strategy/tot.py:TreeofThought"}, {"id": "{\"name\":\"TreeofThought\",\"package\":\"metagpt/strategy/tot.py:TreeofThought\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"solver\":{\"name\":\"solver\",\"type_\":\"\",\"default_\":\"\",\"description\":\"solver\",\"compositions\":[]},\"strategy\":{\"name\":\"strategy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strategy\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:config"}, {"id": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"id": "{\"name\":\"solver\",\"type_\":\"\",\"default_\":\"\",\"description\":\"solver\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:strategy"}, {"id": "{\"name\":\"strategy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strategy\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:solve"}, {"id": "metagpt/roles/tutorial_assistant.py"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant"}, {"id": "{\"name\":\"TutorialAssistant\",\"package\":\"metagpt/roles/tutorial_assistant.py:TutorialAssistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"main_title\":{\"name\":\"main_title\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"main_title : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]},\"total_content\":{\"name\":\"total_content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"total_content : str\",\"compositions\":[]}},\"methods\":{\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:constraints"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:goal"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:language"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:main_title"}, {"id": "{\"name\":\"main_title\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"main_title : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:name"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:profile"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:topic"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:total_content"}, {"id": "{\"name\":\"total_content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"total_content : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:react"}, {"id": "metagpt/schema.py:UMLClassAttribute"}, {"id": "{\"name\":\"UMLClassAttribute\",\"package\":\"metagpt/schema.py:UMLClassAttribute\",\"attributes\":{\"default_value\":{\"name\":\"default_value\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_value : str\",\"compositions\":[]},\"value_type\":{\"name\":\"value_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"value_type : str\",\"compositions\":[]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassAttribute:default_value"}, {"id": "{\"name\":\"default_value\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_value : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UMLClassAttribute:value_type"}, {"id": "{\"name\":\"value_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"value_type : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UMLClassAttribute:get_mermaid"}, {"id": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassMeta"}, {"id": "{\"name\":\"UMLClassMeta\",\"package\":\"metagpt/schema.py:UMLClassMeta\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"visibility\":{\"name\":\"visibility\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"visibility : str\",\"compositions\":[]}},\"methods\":{\"name_to_visibility\":{\"name\":\"name_to_visibility\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"name_to_visibility(name: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassMeta:name"}, {"id": "metagpt/schema.py:UMLClassMeta:visibility"}, {"id": "{\"name\":\"visibility\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"visibility : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UMLClassMeta:name_to_visibility"}, {"id": "{\"name\":\"name_to_visibility\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"name_to_visibility(name: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassMethod"}, {"id": "{\"name\":\"UMLClassMethod\",\"package\":\"metagpt/schema.py:UMLClassMethod\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]},\"return_type\":{\"name\":\"return_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"return_type : str\",\"compositions\":[]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}},\"compositions\":[\"UMLClassAttribute\"],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassMethod:args"}, {"id": "{\"name\":\"args\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]}"}, {"id": "metagpt/schema.py:UMLClassMethod:return_type"}, {"id": "{\"name\":\"return_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"return_type : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UMLClassMethod:get_mermaid"}, {"id": "?:UMLClassAttribute"}, {"id": "metagpt/schema.py:UMLClassView"}, {"id": "{\"name\":\"UMLClassView\",\"package\":\"metagpt/schema.py:UMLClassView\",\"attributes\":{\"attributes\":{\"name\":\"attributes\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]},\"methods\":{\"name\":\"methods\",\"type_\":\"List[UMLClassMethod]\",\"default_\":\"\",\"description\":\"methods : List[UMLClassMethod]\",\"compositions\":[\"UMLClassMethod\"]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]},\"load_dot_class_info\":{\"name\":\"load_dot_class_info\",\"args\":[{\"name\":\"dot_class_info\",\"type_\":\"DotClassInfo\",\"default_\":\"\",\"description\":\"dot_class_info: DotClassInfo\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"UMLClassView\",\"description\":\"UMLClassView\",\"compositions\":[\"UMLClassView\"]},\"description\":\"load_dot_class_info(dot_class_info: DotClassInfo): UMLClassView\",\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}},\"compositions\":[\"UMLClassAttribute\",\"UMLClassMethod\"],\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}"}, {"id": "metagpt/schema.py:UMLClassView:attributes"}, {"id": "{\"name\":\"attributes\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]}"}, {"id": "metagpt/schema.py:UMLClassView:methods"}, {"id": "{\"name\":\"methods\",\"type_\":\"List[UMLClassMethod]\",\"default_\":\"\",\"description\":\"methods : List[UMLClassMethod]\",\"compositions\":[\"UMLClassMethod\"]}"}, {"id": "metagpt/schema.py:UMLClassView:get_mermaid"}, {"id": "metagpt/schema.py:UMLClassView:load_dot_class_info"}, {"id": "{\"name\":\"load_dot_class_info\",\"args\":[{\"name\":\"dot_class_info\",\"type_\":\"DotClassInfo\",\"default_\":\"\",\"description\":\"dot_class_info: DotClassInfo\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"UMLClassView\",\"description\":\"UMLClassView\",\"compositions\":[\"UMLClassView\"]},\"description\":\"load_dot_class_info(dot_class_info: DotClassInfo): UMLClassView\",\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}"}, {"id": "?:UMLClassMethod"}, {"id": "?:UMLClassView"}, {"id": "metagpt/tools/ut_writer.py"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator"}, {"id": "{\"name\":\"UTGenerator\",\"package\":\"metagpt/tools/ut_writer.py:UTGenerator\",\"attributes\":{\"chatgpt_method\":{\"name\":\"chatgpt_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chatgpt_method : str\",\"compositions\":[]},\"icl_sample\":{\"name\":\"icl_sample\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"icl_sample : str\",\"compositions\":[]},\"questions_path\":{\"name\":\"questions_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"questions_path : str\",\"compositions\":[]},\"swagger_file\":{\"name\":\"swagger_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"swagger_file : str\",\"compositions\":[]},\"template_prefix\":{\"name\":\"template_prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template_prefix : str\",\"compositions\":[]},\"ut_py_path\":{\"name\":\"ut_py_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ut_py_path : str\",\"compositions\":[]}},\"methods\":{\"ask_gpt_and_save\":{\"name\":\"ask_gpt_and_save\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tag: str\",\"compositions\":[]},{\"name\":\"fname\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"fname: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_gpt_and_save(question: str, tag: str, fname: str)\",\"aggregations\":[]},\"build_api_doc\":{\"name\":\"build_api_doc\",\"args\":[{\"name\":\"node\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"node: dict\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path: str\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_api_doc(node: dict, path: str, method: str): str\",\"aggregations\":[]},\"build_object_properties\":{\"name\":\"build_object_properties\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]},{\"name\":\"level\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"level: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_object_properties(node, prop_object_required, level: int): str\",\"aggregations\":[]},\"generate_ut\":{\"name\":\"generate_ut\",\"args\":[{\"name\":\"include_tags\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_tags\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"generate_ut(include_tags): bool\",\"aggregations\":[]},\"get_swagger_json\":{\"name\":\"get_swagger_json\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_swagger_json(): dict\",\"aggregations\":[]},\"get_tags_mapping\":{\"name\":\"get_tags_mapping\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_tags_mapping(): dict\",\"aggregations\":[]},\"gpt_msgs_to_code\":{\"name\":\"gpt_msgs_to_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"messages: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"gpt_msgs_to_code(messages: list): str\",\"aggregations\":[]},\"para_to_str\":{\"name\":\"para_to_str\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"prop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"para_to_str(name, prop, prop_object_required)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:chatgpt_method"}, {"id": "{\"name\":\"chatgpt_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chatgpt_method : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:icl_sample"}, {"id": "{\"name\":\"icl_sample\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"icl_sample : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:questions_path"}, {"id": "{\"name\":\"questions_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"questions_path : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:swagger_file"}, {"id": "{\"name\":\"swagger_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"swagger_file : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:template_prefix"}, {"id": "{\"name\":\"template_prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template_prefix : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:ut_py_path"}, {"id": "{\"name\":\"ut_py_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ut_py_path : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:ask_gpt_and_save"}, {"id": "{\"name\":\"ask_gpt_and_save\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tag: str\",\"compositions\":[]},{\"name\":\"fname\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"fname: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_gpt_and_save(question: str, tag: str, fname: str)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:build_api_doc"}, {"id": "{\"name\":\"build_api_doc\",\"args\":[{\"name\":\"node\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"node: dict\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path: str\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_api_doc(node: dict, path: str, method: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:build_object_properties"}, {"id": "{\"name\":\"build_object_properties\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]},{\"name\":\"level\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"level: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_object_properties(node, prop_object_required, level: int): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:generate_ut"}, {"id": "{\"name\":\"generate_ut\",\"args\":[{\"name\":\"include_tags\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_tags\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"generate_ut(include_tags): bool\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:get_swagger_json"}, {"id": "{\"name\":\"get_swagger_json\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_swagger_json(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:get_tags_mapping"}, {"id": "{\"name\":\"get_tags_mapping\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_tags_mapping(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:gpt_msgs_to_code"}, {"id": "{\"name\":\"gpt_msgs_to_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"messages: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"gpt_msgs_to_code(messages: list): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:para_to_str"}, {"id": "{\"name\":\"para_to_str\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"prop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"para_to_str(name, prop, prop_object_required)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Usage"}, {"id": "{\"name\":\"Usage\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:Usage\",\"attributes\":{\"prompt_tokens\":{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens : int\",\"compositions\":[]},\"total_tokens\":{\"name\":\"total_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_tokens : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Usage:prompt_tokens"}, {"id": "{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Usage:total_tokens"}, {"id": "{\"name\":\"total_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_tokens : int\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UserMessage"}, {"id": "{\"name\":\"UserMessage\",\"package\":\"metagpt/schema.py:UserMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/add_requirement.py"}, {"id": "metagpt/actions/add_requirement.py:UserRequirement"}, {"id": "{\"name\":\"UserRequirement\",\"package\":\"metagpt/actions/add_requirement.py:UserRequirement\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection"}, {"id": "{\"name\":\"VarianceBasedSelection\",\"package\":\"metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection\",\"attributes\":{\"feats\":{\"name\":\"feats\",\"type_\":\"\",\"default_\":\"\",\"description\":\"feats : NoneType\",\"compositions\":[]},\"label_col\":{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]},\"selector\":{\"name\":\"selector\",\"type_\":\"VarianceThreshold\",\"default_\":\"\",\"description\":\"selector : VarianceThreshold\",\"compositions\":[\"VarianceThreshold\"]},\"threshold\":{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[\"VarianceThreshold\"],\"aggregations\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:feats"}, {"id": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:label_col"}, {"id": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:selector"}, {"id": "{\"name\":\"selector\",\"type_\":\"VarianceThreshold\",\"default_\":\"\",\"description\":\"selector : VarianceThreshold\",\"compositions\":[\"VarianceThreshold\"]}"}, {"id": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:threshold"}, {"id": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:fit"}, {"id": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:transform"}, {"id": "?:VarianceThreshold"}, {"id": "metagpt/utils/visual_graph_repo.py"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo"}, {"id": "{\"name\":\"VisualDiGraphRepo\",\"package\":\"metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo\",\"attributes\":{},\"methods\":{\"get_mermaid_class_view\":{\"name\":\"get_mermaid_class_view\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid_class_view(): str\",\"aggregations\":[]},\"get_mermaid_sequence_view_versions\":{\"name\":\"get_mermaid_sequence_view_versions\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_view_versions(): List[str, str]\",\"aggregations\":[]},\"get_mermaid_sequence_views\":{\"name\":\"get_mermaid_sequence_views\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_views(): List[str, str]\",\"aggregations\":[]},\"load_from\":{\"name\":\"load_from\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_from(filename: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_class_view"}, {"id": "{\"name\":\"get_mermaid_class_view\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid_class_view(): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_view_versions"}, {"id": "{\"name\":\"get_mermaid_sequence_view_versions\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_view_versions(): List[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_views"}, {"id": "{\"name\":\"get_mermaid_sequence_views\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_views(): List[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:load_from"}, {"id": "{\"name\":\"load_from\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_from(filename: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo"}, {"id": "{\"name\":\"VisualGraphRepo\",\"package\":\"metagpt/utils/visual_graph_repo.py:VisualGraphRepo\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_db\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db"}, {"id": "{\"name\":\"graph_db\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_db\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient"}, {"id": "{\"name\":\"WDMHttpProxyClient\",\"package\":\"metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient\",\"attributes\":{\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(url)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:proxy"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(url)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize"}, {"id": "{\"name\":\"WebBrowseAndSummarize\",\"package\":\"metagpt/actions/research.py:WebBrowseAndSummarize\",\"attributes\":{\"browse_func\":{\"name\":\"browse_func\",\"type_\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_\":\"\",\"description\":\"browse_func : Optional[Union[Callable[[list[str]], None], None]]\",\"compositions\":[\"Callable\"]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"web_browser_engine\":{\"name\":\"web_browser_engine\",\"type_\":\"Optional[WebBrowserEngine]\",\"default_\":\"\",\"description\":\"web_browser_engine : Optional[WebBrowserEngine]\",\"compositions\":[\"WebBrowserEngine\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(url: str): dict[str, str]\",\"aggregations\":[]},\"validate_engine_and_run_func\":{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}},\"compositions\":[\"Callable\",\"WebBrowserEngine\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:browse_func"}, {"id": "{\"name\":\"browse_func\",\"type_\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_\":\"\",\"description\":\"browse_func : Optional[Union[Callable[[list[str]], None], None]]\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:desc"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:i_context"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:name"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine"}, {"id": "{\"name\":\"web_browser_engine\",\"type_\":\"Optional[WebBrowserEngine]\",\"default_\":\"\",\"description\":\"web_browser_engine : Optional[WebBrowserEngine]\",\"compositions\":[\"WebBrowserEngine\"]}"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(url: str): dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:validate_engine_and_run_func"}, {"id": "?:WebBrowserEngine"}, {"id": "metagpt/tools/web_browser_engine.py"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine"}, {"id": "{\"name\":\"WebBrowserEngine\",\"package\":\"metagpt/tools/web_browser_engine.py:WebBrowserEngine\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]},\"run_func\":{\"name\":\"run_func\",\"type_\":\"Optional[Callable[...,Coroutine[Any,Any,Union[WebPage,list[WebPage]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[..., Coroutine[Any, Any, Union[WebPage, list[WebPage]]]]]\",\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\"]}},\"methods\":{\"from_browser_config\":{\"name\":\"from_browser_config\",\"args\":[{\"name\":\"config\",\"type_\":\"BrowserConfig\",\"default_\":\"\",\"description\":\"config: BrowserConfig\",\"compositions\":[\"BrowserConfig\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_browser_config(config: BrowserConfig)\",\"aggregations\":[\"BrowserConfig\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\",\"description\":\"WebPage\",\"compositions\":[\"WebPage\"]},\"description\":\"run(url: str): WebPage\",\"aggregations\":[\"WebPage\"]},\"validate_extra\":{\"name\":\"validate_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_extra()\",\"aggregations\":[]}},\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\"],\"aggregations\":[\"BrowserConfig\"]}"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:model_config"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:proxy"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run_func"}, {"id": "{\"name\":\"run_func\",\"type_\":\"Optional[Callable[...,Coroutine[Any,Any,Union[WebPage,list[WebPage]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[..., Coroutine[Any, Any, Union[WebPage, list[WebPage]]]]]\",\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\"]}"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:from_browser_config"}, {"id": "{\"name\":\"from_browser_config\",\"args\":[{\"name\":\"config\",\"type_\":\"BrowserConfig\",\"default_\":\"\",\"description\":\"config: BrowserConfig\",\"compositions\":[\"BrowserConfig\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_browser_config(config: BrowserConfig)\",\"aggregations\":[\"BrowserConfig\"]}"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\",\"description\":\"WebPage\",\"compositions\":[\"WebPage\"]},\"description\":\"run(url: str): WebPage\",\"aggregations\":[\"WebPage\"]}"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:validate_extra"}, {"id": "?:BrowserConfig"}, {"id": "metagpt/tools:WebBrowserEngineType"}, {"id": "{\"name\":\"WebBrowserEngineType\",\"package\":\"metagpt/tools:WebBrowserEngineType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools:WebBrowserEngineType:name"}, {"id": "metagpt/utils/parse_html.py"}, {"id": "metagpt/utils/parse_html.py:WebPage"}, {"id": "{\"name\":\"WebPage\",\"package\":\"metagpt/utils/parse_html.py:WebPage\",\"attributes\":{\"html\":{\"name\":\"html\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"html : str\",\"compositions\":[]},\"inner_text\":{\"name\":\"inner_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"inner_text : str\",\"compositions\":[]},\"soup\":{\"name\":\"soup\",\"type_\":\"\",\"default_\":\"\",\"description\":\"soup\",\"compositions\":[]},\"title\":{\"name\":\"title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"title\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}},\"methods\":{\"get_links\":{\"name\":\"get_links\",\"args\":[],\"return_args\":{\"type_\":\"Generator[str,None,None]\",\"description\":\"Generator[str, None, None]\",\"compositions\":[\"Generator\"]},\"description\":\"get_links(): Generator[str, None, None]\",\"aggregations\":[\"Generator\"]}},\"compositions\":[],\"aggregations\":[\"Generator\"]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:html"}, {"id": "{\"name\":\"html\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"html : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:inner_text"}, {"id": "{\"name\":\"inner_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"inner_text : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:soup"}, {"id": "{\"name\":\"soup\",\"type_\":\"\",\"default_\":\"\",\"description\":\"soup\",\"compositions\":[]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:title"}, {"id": "{\"name\":\"title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"title\",\"compositions\":[]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:url"}, {"id": "metagpt/utils/parse_html.py:WebPage:get_links"}, {"id": "{\"name\":\"get_links\",\"args\":[],\"return_args\":{\"type_\":\"Generator[str,None,None]\",\"description\":\"Generator[str, None, None]\",\"compositions\":[\"Generator\"]},\"description\":\"get_links(): Generator[str, None, None]\",\"aggregations\":[\"Generator\"]}"}, {"id": "?:Generator"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv"}, {"id": "{\"name\":\"WerewolfEnv\",\"package\":\"metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv\",\"attributes\":{\"history\":{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]},\"timestamp\":{\"name\":\"timestamp\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timestamp : int\",\"compositions\":[]}},\"methods\":{\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"add_timestamp\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"add_timestamp: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(message: Message, add_timestamp: bool)\",\"aggregations\":[\"Message\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:history"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:timestamp"}, {"id": "{\"name\":\"timestamp\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timestamp : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:publish_message"}, {"id": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"add_timestamp\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"add_timestamp: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(message: Message, add_timestamp: bool)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:run"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv"}, {"id": "{\"name\":\"WerewolfExtEnv\",\"package\":\"metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv\",\"attributes\":{\"eval_step_idx\":{\"name\":\"eval_step_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"eval_step_idx : int\",\"compositions\":[]},\"game_setup\":{\"name\":\"game_setup\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"game_setup : str\",\"compositions\":[]},\"is_hunted_player_saved\":{\"name\":\"is_hunted_player_saved\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_hunted_player_saved : bool\",\"compositions\":[]},\"living_players\":{\"name\":\"living_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"living_players\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"per_round_steps\":{\"name\":\"per_round_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"per_round_steps : int\",\"compositions\":[]},\"player_current_dead\":{\"name\":\"player_current_dead\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"player_current_dead : list[str]\",\"compositions\":[]},\"player_hunted\":{\"name\":\"player_hunted\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_hunted : Optional[str]\",\"compositions\":[]},\"player_poisoned\":{\"name\":\"player_poisoned\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_poisoned : Optional[str]\",\"compositions\":[]},\"player_protected\":{\"name\":\"player_protected\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_protected : Optional[str]\",\"compositions\":[]},\"players_state\":{\"name\":\"players_state\",\"type_\":\"dict[str,tuple[str,RoleState]]\",\"default_\":\"\",\"description\":\"players_state : dict[str, tuple[str, RoleState]]\",\"compositions\":[\"RoleState\",\"tuple\"]},\"round_hunts\":{\"name\":\"round_hunts\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"round_hunts : dict[str, str]\",\"compositions\":[]},\"round_idx\":{\"name\":\"round_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"round_idx : int\",\"compositions\":[]},\"round_votes\":{\"name\":\"round_votes\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"round_votes : dict[str, str]\",\"compositions\":[]},\"special_role_players\":{\"name\":\"special_role_players\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"special_role_players : list[str]\",\"compositions\":[]},\"step_idx\":{\"name\":\"step_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"step_idx : int\",\"compositions\":[]},\"villager_players\":{\"name\":\"villager_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"villager_players\",\"compositions\":[]},\"werewolf_players\":{\"name\":\"werewolf_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"werewolf_players\",\"compositions\":[]},\"win_reason\":{\"name\":\"win_reason\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"win_reason : Optional[str]\",\"compositions\":[]},\"winner\":{\"name\":\"winner\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"winner : Optional[str]\",\"compositions\":[]},\"witch_antidote_left\":{\"name\":\"witch_antidote_left\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"witch_antidote_left : int\",\"compositions\":[]},\"witch_poison_left\":{\"name\":\"witch_poison_left\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"witch_poison_left : int\",\"compositions\":[]}},\"methods\":{\"curr_step_instruction\":{\"name\":\"curr_step_instruction\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"curr_step_instruction(): dict\",\"aggregations\":[]},\"get_players_state\":{\"name\":\"get_players_state\",\"args\":[{\"name\":\"player_names\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"player_names: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,RoleState]\",\"description\":\"dict[str, RoleState]\",\"compositions\":[\"RoleState\"]},\"description\":\"get_players_state(player_names: list[str]): dict[str, RoleState]\",\"aggregations\":[\"RoleState\"]},\"init_game_setup\":{\"name\":\"init_game_setup\",\"args\":[{\"name\":\"role_uniq_objs\",\"type_\":\"list[object]\",\"default_\":\"\",\"description\":\"role_uniq_objs: list[object]\",\"compositions\":[\"object\"]},{\"name\":\"num_villager\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_villager: int\",\"compositions\":[]},{\"name\":\"num_werewolf\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_werewolf: int\",\"compositions\":[]},{\"name\":\"shuffle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"shuffle\",\"compositions\":[]},{\"name\":\"add_human\",\"type_\":\"\",\"default_\":\"\",\"description\":\"add_human\",\"compositions\":[]},{\"name\":\"use_reflection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_reflection\",\"compositions\":[]},{\"name\":\"use_experience\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_experience\",\"compositions\":[]},{\"name\":\"use_memory_selection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_memory_selection\",\"compositions\":[]},{\"name\":\"new_experience_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_experience_version\",\"compositions\":[]},{\"name\":\"prepare_human_player\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prepare_human_player\",\"compositions\":[]}],\"return_args\":{\"type_\":\"tuple[str,list]\",\"description\":\"tuple[str, list]\",\"compositions\":[\"tuple\"]},\"description\":\"init_game_setup(role_uniq_objs: list[object], num_villager: int, num_werewolf: int, shuffle, add_human, use_reflection, use_experience, use_memory_selection, new_experience_version, prepare_human_player): tuple[str, list]\",\"aggregations\":[\"tuple\",\"object\"]},\"update_game_states\":{\"name\":\"update_game_states\",\"args\":[{\"name\":\"memories\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"memories: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_game_states(memories: list)\",\"aggregations\":[]},\"vote_kill_someone\":{\"name\":\"vote_kill_someone\",\"args\":[{\"name\":\"voteer\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"voteer: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"player_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"vote_kill_someone(voteer: 'Role', player_name: str)\",\"aggregations\":[\"Role\"]},\"witch_poison_someone\":{\"name\":\"witch_poison_someone\",\"args\":[{\"name\":\"witch\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"witch: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_name: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"witch_poison_someone(witch: 'Role', player_name: Optional[str])\",\"aggregations\":[\"Role\"]},\"witch_save_someone\":{\"name\":\"witch_save_someone\",\"args\":[{\"name\":\"witch\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"witch: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_name: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"witch_save_someone(witch: 'Role', player_name: Optional[str])\",\"aggregations\":[\"Role\"]},\"wolf_kill_someone\":{\"name\":\"wolf_kill_someone\",\"args\":[{\"name\":\"wolf\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"wolf: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"player_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"wolf_kill_someone(wolf: 'Role', player_name: str)\",\"aggregations\":[\"Role\"]}},\"compositions\":[\"RoleState\",\"tuple\"],\"aggregations\":[\"object\",\"Role\"]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:eval_step_idx"}, {"id": "{\"name\":\"eval_step_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"eval_step_idx : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:game_setup"}, {"id": "{\"name\":\"game_setup\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"game_setup : str\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:is_hunted_player_saved"}, {"id": "{\"name\":\"is_hunted_player_saved\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_hunted_player_saved : bool\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:living_players"}, {"id": "{\"name\":\"living_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"living_players\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:model_config"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:per_round_steps"}, {"id": "{\"name\":\"per_round_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"per_round_steps : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_current_dead"}, {"id": "{\"name\":\"player_current_dead\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"player_current_dead : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_hunted"}, {"id": "{\"name\":\"player_hunted\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_hunted : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_poisoned"}, {"id": "{\"name\":\"player_poisoned\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_poisoned : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_protected"}, {"id": "{\"name\":\"player_protected\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_protected : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:players_state"}, {"id": "{\"name\":\"players_state\",\"type_\":\"dict[str,tuple[str,RoleState]]\",\"default_\":\"\",\"description\":\"players_state : dict[str, tuple[str, RoleState]]\",\"compositions\":[\"RoleState\",\"tuple\"]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_hunts"}, {"id": "{\"name\":\"round_hunts\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"round_hunts : dict[str, str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_idx"}, {"id": "{\"name\":\"round_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"round_idx : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_votes"}, {"id": "{\"name\":\"round_votes\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"round_votes : dict[str, str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:special_role_players"}, {"id": "{\"name\":\"special_role_players\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"special_role_players : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:step_idx"}, {"id": "{\"name\":\"step_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"step_idx : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:villager_players"}, {"id": "{\"name\":\"villager_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"villager_players\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:werewolf_players"}, {"id": "{\"name\":\"werewolf_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"werewolf_players\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:win_reason"}, {"id": "{\"name\":\"win_reason\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"win_reason : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:winner"}, {"id": "{\"name\":\"winner\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"winner : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_antidote_left"}, {"id": "{\"name\":\"witch_antidote_left\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"witch_antidote_left : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_poison_left"}, {"id": "{\"name\":\"witch_poison_left\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"witch_poison_left : int\",\"compositions\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:curr_step_instruction"}, {"id": "{\"name\":\"curr_step_instruction\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"curr_step_instruction(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:get_players_state"}, {"id": "{\"name\":\"get_players_state\",\"args\":[{\"name\":\"player_names\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"player_names: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,RoleState]\",\"description\":\"dict[str, RoleState]\",\"compositions\":[\"RoleState\"]},\"description\":\"get_players_state(player_names: list[str]): dict[str, RoleState]\",\"aggregations\":[\"RoleState\"]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:init_game_setup"}, {"id": "{\"name\":\"init_game_setup\",\"args\":[{\"name\":\"role_uniq_objs\",\"type_\":\"list[object]\",\"default_\":\"\",\"description\":\"role_uniq_objs: list[object]\",\"compositions\":[\"object\"]},{\"name\":\"num_villager\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_villager: int\",\"compositions\":[]},{\"name\":\"num_werewolf\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_werewolf: int\",\"compositions\":[]},{\"name\":\"shuffle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"shuffle\",\"compositions\":[]},{\"name\":\"add_human\",\"type_\":\"\",\"default_\":\"\",\"description\":\"add_human\",\"compositions\":[]},{\"name\":\"use_reflection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_reflection\",\"compositions\":[]},{\"name\":\"use_experience\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_experience\",\"compositions\":[]},{\"name\":\"use_memory_selection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_memory_selection\",\"compositions\":[]},{\"name\":\"new_experience_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_experience_version\",\"compositions\":[]},{\"name\":\"prepare_human_player\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prepare_human_player\",\"compositions\":[]}],\"return_args\":{\"type_\":\"tuple[str,list]\",\"description\":\"tuple[str, list]\",\"compositions\":[\"tuple\"]},\"description\":\"init_game_setup(role_uniq_objs: list[object], num_villager: int, num_werewolf: int, shuffle, add_human, use_reflection, use_experience, use_memory_selection, new_experience_version, prepare_human_player): tuple[str, list]\",\"aggregations\":[\"tuple\",\"object\"]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:update_game_states"}, {"id": "{\"name\":\"update_game_states\",\"args\":[{\"name\":\"memories\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"memories: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_game_states(memories: list)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:vote_kill_someone"}, {"id": "{\"name\":\"vote_kill_someone\",\"args\":[{\"name\":\"voteer\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"voteer: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"player_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"vote_kill_someone(voteer: 'Role', player_name: str)\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_poison_someone"}, {"id": "{\"name\":\"witch_poison_someone\",\"args\":[{\"name\":\"witch\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"witch: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_name: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"witch_poison_someone(witch: 'Role', player_name: Optional[str])\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_save_someone"}, {"id": "{\"name\":\"witch_save_someone\",\"args\":[{\"name\":\"witch\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"witch: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_name: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"witch_save_someone(witch: 'Role', player_name: Optional[str])\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:wolf_kill_someone"}, {"id": "{\"name\":\"wolf_kill_someone\",\"args\":[{\"name\":\"wolf\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"wolf: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"player_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"wolf_kill_someone(wolf: 'Role', player_name: str)\",\"aggregations\":[\"Role\"]}"}, {"id": "?:RoleState"}, {"id": "?:object"}, {"id": "metagpt/tools/prompt_writer.py:WikiHowTemplate"}, {"id": "{\"name\":\"WikiHowTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:WikiHowTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"step\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"step: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"gen(question: str, step: str): list[str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:WikiHowTemplate:gen"}, {"id": "{\"name\":\"gen\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"step\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"step: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"gen(question: str, step: str): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/configs/workspace_config.py"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig"}, {"id": "{\"name\":\"WorkspaceConfig\",\"package\":\"metagpt/configs/workspace_config.py:WorkspaceConfig\",\"attributes\":{\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]},\"uid\":{\"name\":\"uid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"uid : str\",\"compositions\":[]},\"use_uid\":{\"name\":\"use_uid\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_uid : bool\",\"compositions\":[]}},\"methods\":{\"check_uid_and_update_path\":{\"name\":\"check_uid_and_update_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_uid_and_update_path()\",\"aggregations\":[]},\"check_workspace_path\":{\"name\":\"check_workspace_path\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_workspace_path(v)\",\"aggregations\":[]}},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:path"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:uid"}, {"id": "{\"name\":\"uid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"uid : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:use_uid"}, {"id": "{\"name\":\"use_uid\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_uid : bool\",\"compositions\":[]}"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_uid_and_update_path"}, {"id": "{\"name\":\"check_uid_and_update_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_uid_and_update_path()\",\"aggregations\":[]}"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_workspace_path"}, {"id": "{\"name\":\"check_workspace_path\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_workspace_path(v)\",\"aggregations\":[]}"}, {"id": "metagpt/environment/api/env_api.py:WriteAPIRegistry"}, {"id": "{\"name\":\"WriteAPIRegistry\",\"package\":\"metagpt/environment/api/env_api.py:WriteAPIRegistry\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code.py"}, {"id": "metagpt/actions/write_code.py:WriteCode"}, {"id": "{\"name\":\"WriteCode\",\"package\":\"metagpt/actions/write_code.py:WriteCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"get_codes\":{\"name\":\"get_codes\",\"args\":[{\"name\":\"task_doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"task_doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"exclude\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"exclude: str\",\"compositions\":[]},{\"name\":\"project_repo\",\"type_\":\"ProjectRepo\",\"default_\":\"\",\"description\":\"project_repo: ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},{\"name\":\"use_inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_inc: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_codes(task_doc: Document, exclude: str, project_repo: ProjectRepo, use_inc: bool): str\",\"aggregations\":[\"Document\",\"ProjectRepo\"]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]},\"write_code\":{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_code(prompt): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Document\",\"ProjectRepo\",\"CodingContext\"]}"}, {"id": "metagpt/actions/write_code.py:WriteCode:i_context"}, {"id": "metagpt/actions/write_code.py:WriteCode:name"}, {"id": "metagpt/actions/write_code.py:WriteCode:get_codes"}, {"id": "{\"name\":\"get_codes\",\"args\":[{\"name\":\"task_doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"task_doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"exclude\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"exclude: str\",\"compositions\":[]},{\"name\":\"project_repo\",\"type_\":\"ProjectRepo\",\"default_\":\"\",\"description\":\"project_repo: ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},{\"name\":\"use_inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_inc: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_codes(task_doc: Document, exclude: str, project_repo: ProjectRepo, use_inc: bool): str\",\"aggregations\":[\"Document\",\"ProjectRepo\"]}"}, {"id": "metagpt/actions/write_code.py:WriteCode:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]}"}, {"id": "metagpt/actions/write_code.py:WriteCode:write_code"}, {"id": "{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_code(prompt): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code_an_draft.py"}, {"id": "metagpt/actions/write_code_an_draft.py:WriteCodeAN"}, {"id": "{\"name\":\"WriteCodeAN\",\"package\":\"metagpt/actions/write_code_an_draft.py:WriteCodeAN\",\"attributes\":{},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code_an_draft.py:WriteCodeAN:run"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange"}, {"id": "{\"name\":\"WriteCodePlanAndChange\",\"package\":\"metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"get_old_codes\":{\"name\":\"get_old_codes\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_old_codes(): str\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:name"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:get_old_codes"}, {"id": "{\"name\":\"get_old_codes\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_old_codes(): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:run"}, {"id": "metagpt/actions/write_code_review.py"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview"}, {"id": "{\"name\":\"WriteCodeReview\",\"package\":\"metagpt/actions/write_code_review.py:WriteCodeReview\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]},\"write_code_review_and_rewrite\":{\"name\":\"write_code_review_and_rewrite\",\"args\":[{\"name\":\"context_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context_prompt\",\"compositions\":[]},{\"name\":\"cr_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cr_prompt\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filename\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code_review_and_rewrite(context_prompt, cr_prompt, filename)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"CodingContext\"]}"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview:name"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview:run"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview:write_code_review_and_rewrite"}, {"id": "{\"name\":\"write_code_review_and_rewrite\",\"args\":[{\"name\":\"context_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context_prompt\",\"compositions\":[]},{\"name\":\"cr_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cr_prompt\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filename\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code_review_and_rewrite(context_prompt, cr_prompt, filename)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_tutorial.py"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent"}, {"id": "{\"name\":\"WriteContent\",\"package\":\"metagpt/actions/write_tutorial.py:WriteContent\",\"attributes\":{\"directory\":{\"name\":\"directory\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"directory : dict\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent:directory"}, {"id": "{\"name\":\"directory\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"directory : dict\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent:language"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent:name"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/design_api.py"}, {"id": "metagpt/actions/design_api.py:WriteDesign"}, {"id": "{\"name\":\"WriteDesign\",\"package\":\"metagpt/actions/design_api.py:WriteDesign\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"with_messages: Message\",\"compositions\":[\"Message\"]},{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages: Message, schema: str)\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/actions/design_api.py:WriteDesign:desc"}, {"id": "metagpt/actions/design_api.py:WriteDesign:i_context"}, {"id": "metagpt/actions/design_api.py:WriteDesign:name"}, {"id": "metagpt/actions/design_api.py:WriteDesign:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"with_messages: Message\",\"compositions\":[\"Message\"]},{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages: Message, schema: str)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/actions/write_tutorial.py:WriteDirectory"}, {"id": "{\"name\":\"WriteDirectory\",\"package\":\"metagpt/actions/write_tutorial.py:WriteDirectory\",\"attributes\":{\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"run(topic: str): Dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_tutorial.py:WriteDirectory:language"}, {"id": "metagpt/actions/write_tutorial.py:WriteDirectory:name"}, {"id": "metagpt/actions/write_tutorial.py:WriteDirectory:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"run(topic: str): Dict\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_docstring.py"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring"}, {"id": "{\"name\":\"WriteDocstring\",\"package\":\"metagpt/actions/write_docstring.py:WriteDocstring\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(code: str, system_text: str, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[]},\"write_docstring\":{\"name\":\"write_docstring\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"overwrite\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"overwrite: bool\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_docstring(filename: str \\\\| Path, overwrite: bool, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring:desc"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring:i_context"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(code: str, system_text: str, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring:write_docstring"}, {"id": "{\"name\":\"write_docstring\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"overwrite\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"overwrite: bool\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_docstring(filename: str \\\\| Path, overwrite: bool, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/actions/write_prd.py"}, {"id": "metagpt/actions/write_prd.py:WritePRD"}, {"id": "{\"name\":\"WritePRD\",\"package\":\"metagpt/actions/write_prd.py:WritePRD\",\"attributes\":{\"project_name\":{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}},\"methods\":{\"get_related_docs\":{\"name\":\"get_related_docs\",\"args\":[{\"name\":\"req\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"req: Document\",\"compositions\":[\"Document\"]},{\"name\":\"docs\",\"type_\":\"list[Document]\",\"default_\":\"\",\"description\":\"docs: list[Document]\",\"compositions\":[\"Document\"]}],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_related_docs(req: Document, docs: list[Document]): list[Document]\",\"aggregations\":[\"Document\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionOutput\\\\|Message\",\"description\":\"ActionOutput \\\\| Message\",\"compositions\":[\"ActionOutput\\\\\",\"Message\"]},\"description\":\"run(with_messages): ActionOutput \\\\| Message\",\"aggregations\":[\"Message\",\"ActionOutput\\\\\"]}},\"compositions\":[],\"aggregations\":[\"Document\",\"Message\",\"ActionOutput\\\\\"]}"}, {"id": "metagpt/actions/write_prd.py:WritePRD:project_name"}, {"id": "metagpt/actions/write_prd.py:WritePRD:get_related_docs"}, {"id": "{\"name\":\"get_related_docs\",\"args\":[{\"name\":\"req\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"req: Document\",\"compositions\":[\"Document\"]},{\"name\":\"docs\",\"type_\":\"list[Document]\",\"default_\":\"\",\"description\":\"docs: list[Document]\",\"compositions\":[\"Document\"]}],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_related_docs(req: Document, docs: list[Document]): list[Document]\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/actions/write_prd.py:WritePRD:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionOutput\\\\|Message\",\"description\":\"ActionOutput \\\\| Message\",\"compositions\":[\"ActionOutput\\\\\",\"Message\"]},\"description\":\"run(with_messages): ActionOutput \\\\| Message\",\"aggregations\":[\"Message\",\"ActionOutput\\\\\"]}"}, {"id": "?:ActionOutput\\"}, {"id": "metagpt/actions/write_prd_review.py"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview"}, {"id": "{\"name\":\"WritePRDReview\",\"package\":\"metagpt/actions/write_prd_review.py:WritePRDReview\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"prd : Optional[str]\",\"compositions\":[]},\"prd_review_prompt_template\":{\"name\":\"prd_review_prompt_template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_review_prompt_template : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:desc"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:i_context"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:name"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:prd"}, {"id": "{\"name\":\"prd\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"prd : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:prd_review_prompt_template"}, {"id": "{\"name\":\"prd_review_prompt_template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_review_prompt_template : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_review.py"}, {"id": "metagpt/actions/write_review.py:WriteReview"}, {"id": "{\"name\":\"WriteReview\",\"package\":\"metagpt/actions/write_review.py:WriteReview\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_review.py:WriteReview:name"}, {"id": "metagpt/actions/write_review.py:WriteReview:run"}, {"id": "metagpt/actions/project_management.py"}, {"id": "metagpt/actions/project_management.py:WriteTasks"}, {"id": "{\"name\":\"WriteTasks\",\"package\":\"metagpt/actions/project_management.py:WriteTasks\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/project_management.py:WriteTasks:i_context"}, {"id": "metagpt/actions/project_management.py:WriteTasks:name"}, {"id": "metagpt/actions/project_management.py:WriteTasks:run"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart"}, {"id": "{\"name\":\"WriteTeachingPlanPart\",\"package\":\"metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"rsp : Optional[str]\",\"compositions\":[]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}},\"methods\":{\"format_value\":{\"name\":\"format_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"format_value(value, context: Context)\",\"aggregations\":[\"Context\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_message)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Context\"]}"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:i_context"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:language"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:rsp"}, {"id": "{\"name\":\"rsp\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"rsp : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:topic"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:format_value"}, {"id": "{\"name\":\"format_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"format_value(value, context: Context)\",\"aggregations\":[\"Context\"]}"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_message)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_test.py"}, {"id": "metagpt/actions/write_test.py:WriteTest"}, {"id": "{\"name\":\"WriteTest\",\"package\":\"metagpt/actions/write_test.py:WriteTest\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[TestingContext]\",\"default_\":\"\",\"description\":\"i_context : Optional[TestingContext]\",\"compositions\":[\"TestingContext\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"TestingContext\",\"description\":\"TestingContext\",\"compositions\":[\"TestingContext\"]},\"description\":\"run(): TestingContext\",\"aggregations\":[\"TestingContext\"]},\"write_code\":{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code(prompt)\",\"aggregations\":[]}},\"compositions\":[\"TestingContext\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_test.py:WriteTest:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"Optional[TestingContext]\",\"default_\":\"\",\"description\":\"i_context : Optional[TestingContext]\",\"compositions\":[\"TestingContext\"]}"}, {"id": "metagpt/actions/write_test.py:WriteTest:name"}, {"id": "metagpt/actions/write_test.py:WriteTest:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"TestingContext\",\"description\":\"TestingContext\",\"compositions\":[\"TestingContext\"]},\"description\":\"run(): TestingContext\",\"aggregations\":[\"TestingContext\"]}"}, {"id": "metagpt/actions/write_test.py:WriteTest:write_code"}, {"id": "{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code(prompt)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam"}, {"id": "{\"name\":\"WsParam\",\"package\":\"metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_secret\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"app_id\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"\",\"default_\":\"\",\"description\":\"host\",\"compositions\":[]},\"message\":{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message : NoneType\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]},\"spark_url\":{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}},\"methods\":{\"create_url\":{\"name\":\"create_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_key"}, {"id": "{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_secret"}, {"id": "{\"name\":\"api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_secret\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:app_id"}, {"id": "{\"name\":\"app_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"app_id\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:host"}, {"id": "{\"name\":\"host\",\"type_\":\"\",\"default_\":\"\",\"description\":\"host\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:message"}, {"id": "{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:path"}, {"id": "{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:spark_url"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:create_url"}, {"id": "{\"name\":\"create_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_url()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/yaml_model.py"}, {"id": "metagpt/utils/yaml_model.py:YamlModel"}, {"id": "{\"name\":\"YamlModel\",\"package\":\"metagpt/utils/yaml_model.py:YamlModel\",\"attributes\":{\"extra_fields\":{\"name\":\"extra_fields\",\"type_\":\"Optional[Dict[str,str]]\",\"default_\":\"\",\"description\":\"extra_fields : Optional[Dict[str, str]]\",\"compositions\":[]}},\"methods\":{\"from_yaml_file\":{\"name\":\"from_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'YamlModel'\",\"description\":\"'YamlModel'\",\"compositions\":[\"YamlModel\"]},\"description\":\"from_yaml_file(file_path: Path): 'YamlModel'\",\"aggregations\":[\"Path\",\"YamlModel\"]},\"read_yaml\":{\"name\":\"read_yaml\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"read_yaml(file_path: Path, encoding: str): Dict\",\"aggregations\":[\"Path\"]},\"to_yaml_file\":{\"name\":\"to_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"to_yaml_file(file_path: Path, encoding: str): None\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\",\"YamlModel\"]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModel:extra_fields"}, {"id": "{\"name\":\"extra_fields\",\"type_\":\"Optional[Dict[str,str]]\",\"default_\":\"\",\"description\":\"extra_fields : Optional[Dict[str, str]]\",\"compositions\":[]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModel:from_yaml_file"}, {"id": "{\"name\":\"from_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'YamlModel'\",\"description\":\"'YamlModel'\",\"compositions\":[\"YamlModel\"]},\"description\":\"from_yaml_file(file_path: Path): 'YamlModel'\",\"aggregations\":[\"Path\",\"YamlModel\"]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModel:read_yaml"}, {"id": "{\"name\":\"read_yaml\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"read_yaml(file_path: Path, encoding: str): Dict\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModel:to_yaml_file"}, {"id": "{\"name\":\"to_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"to_yaml_file(file_path: Path, encoding: str): None\",\"aggregations\":[\"Path\"]}"}, {"id": "?:YamlModel"}, {"id": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault"}, {"id": "{\"name\":\"YamlModelWithoutDefault\",\"package\":\"metagpt/utils/yaml_model.py:YamlModelWithoutDefault\",\"attributes\":{},\"methods\":{\"check_not_default_config\":{\"name\":\"check_not_default_config\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_not_default_config(values)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault:check_not_default_config"}, {"id": "{\"name\":\"check_not_default_config\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_not_default_config(values)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai_api.py"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM"}, {"id": "{\"name\":\"ZhiPuAILLM\",\"package\":\"metagpt/provider/zhipuai_api.py:ZhiPuAILLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"completion\":{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"completion(messages: list[dict], timeout): dict\",\"aggregations\":[]}},\"compositions\":[\"CostManager\"],\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:cost_manager"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:model"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:pricing_plan"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:use_system_prompt"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion_text"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:completion"}, {"id": "{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"completion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuEvent"}, {"id": "{\"name\":\"ZhiPuEvent\",\"package\":\"metagpt/provider/zhipuai_api.py:ZhiPuEvent\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuEvent:name"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI"}, {"id": "{\"name\":\"ZhiPuModelAPI\",\"package\":\"metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI\",\"attributes\":{},\"methods\":{\"acreate\":{\"name\":\"acreate\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acreate(): dict\",\"aggregations\":[]},\"acreate_stream\":{\"name\":\"acreate_stream\",\"args\":[],\"return_args\":{\"type_\":\"AsyncSSEClient\",\"description\":\"AsyncSSEClient\",\"compositions\":[\"AsyncSSEClient\"]},\"description\":\"acreate_stream(): AsyncSSEClient\",\"aggregations\":[\"AsyncSSEClient\"]},\"arequest\":{\"name\":\"arequest\",\"args\":[{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream: bool\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"headers: dict\",\"compositions\":[]},{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"arequest(stream: bool, method: str, headers: dict, kwargs)\",\"aggregations\":[]},\"split_zhipu_api_url\":{\"name\":\"split_zhipu_api_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"split_zhipu_api_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"AsyncSSEClient\"]}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate"}, {"id": "{\"name\":\"acreate\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acreate(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate_stream"}, {"id": "{\"name\":\"acreate_stream\",\"args\":[],\"return_args\":{\"type_\":\"AsyncSSEClient\",\"description\":\"AsyncSSEClient\",\"compositions\":[\"AsyncSSEClient\"]},\"description\":\"acreate_stream(): AsyncSSEClient\",\"aggregations\":[\"AsyncSSEClient\"]}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:arequest"}, {"id": "{\"name\":\"arequest\",\"args\":[{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream: bool\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"headers: dict\",\"compositions\":[]},{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"arequest(stream: bool, method: str, headers: dict, kwargs)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:split_zhipu_api_url"}, {"id": "{\"name\":\"split_zhipu_api_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"split_zhipu_api_url()\",\"aggregations\":[]}"}, {"id": "?:AsyncSSEClient"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill"}, {"id": "{\"name\":\"_AgentSkill\",\"package\":\"metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill:name"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView"}, {"id": "{\"name\":\"_VisualClassView\",\"package\":\"metagpt/utils/visual_graph_repo.py:_VisualClassView\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"generalizations\":{\"name\":\"generalizations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"generalizations : List[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"package\":{\"name\":\"package\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"package : str\",\"compositions\":[]},\"uml\":{\"name\":\"uml\",\"type_\":\"Optional[UMLClassView]\",\"default_\":\"\",\"description\":\"uml : Optional[UMLClassView]\",\"compositions\":[\"UMLClassView\"]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"align: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align: int): str\",\"aggregations\":[]}},\"compositions\":[\"UMLClassView\"],\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:aggregations"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:compositions"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:generalizations"}, {"id": "{\"name\":\"generalizations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"generalizations : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:package"}, {"id": "{\"name\":\"package\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"package : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:uml"}, {"id": "{\"name\":\"uml\",\"type_\":\"Optional[UMLClassView]\",\"default_\":\"\",\"description\":\"uml : Optional[UMLClassView]\",\"compositions\":[\"UMLClassView\"]}"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:get_mermaid"}, {"id": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"align: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align: int): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/parse_docstring.py:reSTDocstringParser"}, {"id": "{\"name\":\"reSTDocstringParser\",\"package\":\"metagpt/utils/parse_docstring.py:reSTDocstringParser\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:_store"}, {"id": "metagpt/utils/git_repository.py:GitRepository:_dependency"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:_git_repo"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:_split_literal"}, {"id": "metagpt/repo_parser.py:DotClassMethod:_parse_name"}, {"id": "metagpt/repo_parser.py:DotClassMethod:_parse_args"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_file"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_expr"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_name"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_if"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_if_compare"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_variable"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_assign"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_classes"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_class_relationships"}, {"id": "metagpt/repo_parser.py:RepoParser:_split_class_line"}, {"id": "metagpt/repo_parser.py:RepoParser:_split_relationship_line"}, {"id": "metagpt/repo_parser.py:RepoParser:_get_label"}, {"id": "metagpt/repo_parser.py:RepoParser:_create_path_mapping"}, {"id": "metagpt/repo_parser.py:RepoParser:_repair_namespaces"}, {"id": "metagpt/repo_parser.py:RepoParser:_repair_ns"}, {"id": "metagpt/repo_parser.py:RepoParser:_find_root"}, {"id": "metagpt/repo_parser.py:is_func"}, {"id": "function"}, {"id": "metagpt/repo_parser.py:ast.Constant:\nBuild a symbols repository from source code.\n\nThis script is designed to create a symbols repository from the provided source code.\n\n@Time : 2023/11/17 17:58\n@Author : alexanderwu\n@File : repo_parser.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\nBuild a symbols repository from source code.\\n\\nThis script is designed to create a symbols repository from the provided source code.\\n\\n@Time : 2023/11/17 17:58\\n@Author : alexanderwu\\n@File : repo_parser.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:module:__future__"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/repo_parser.py:names:['annotations']"}, {"id": "metagpt/repo_parser.py:ast"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:json"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:re"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:subprocess"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:module:pathlib"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/repo_parser.py:names:['Path']"}, {"id": "metagpt/repo_parser.py:module:typing"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"id": "metagpt/repo_parser.py:names:['Dict', 'List', 'Optional']"}, {"id": "metagpt/repo_parser.py:pandas as pd"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:module:pydantic"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"field_validator\"]}}"}, {"id": "metagpt/repo_parser.py:names:['BaseModel', 'Field', 'field_validator']"}, {"id": "metagpt/repo_parser.py:module:metagpt.const"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"id": "metagpt/repo_parser.py:names:['AGGREGATION', 'COMPOSITION', 'GENERALIZATION']"}, {"id": "metagpt/repo_parser.py:module:metagpt.logs"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/repo_parser.py:names:['logger']"}, {"id": "metagpt/repo_parser.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"aread\",\"remove_white_spaces\"]}}"}, {"id": "metagpt/repo_parser.py:names:['any_to_str', 'aread', 'remove_white_spaces']"}, {"id": "metagpt/repo_parser.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/repo_parser.py:names:['handle_exception']"}, {"id": "{\"lineno\":30,\"end_lineno\":46,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoFileInfo\"],\"properties\":{}}"}, {"id": "{\"lineno\":49,\"end_lineno\":65,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeBlockInfo\"],\"properties\":{}}"}, {"id": "{\"lineno\":68,\"end_lineno\":226,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassAttribute\"],\"properties\":{}}"}, {"id": "{\"lineno\":229,\"end_lineno\":262,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassInfo\"],\"properties\":{}}"}, {"id": "{\"lineno\":265,\"end_lineno\":279,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassRelationship\"],\"properties\":{}}"}, {"id": "{\"lineno\":282,\"end_lineno\":327,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotReturn\"],\"properties\":{}}"}, {"id": "{\"lineno\":330,\"end_lineno\":419,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassMethod\"],\"properties\":{}}"}, {"id": "{\"lineno\":422,\"end_lineno\":1005,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":1008,\"end_lineno\":1018,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_func\"],\"properties\":{}}"}, {"id": "metagpt/subscription.py:asyncio"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/subscription.py:module:typing"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Awaitable\",\"Callable\"]}}"}, {"id": "metagpt/subscription.py:names:['AsyncGenerator', 'Awaitable', 'Callable']"}, {"id": "metagpt/subscription.py:module:pydantic"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/subscription.py:names:['BaseModel', 'ConfigDict', 'Field']"}, {"id": "metagpt/subscription.py:module:metagpt.logs"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/subscription.py:names:['logger']"}, {"id": "metagpt/subscription.py:module:metagpt.roles"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/subscription.py:names:['Role']"}, {"id": "metagpt/subscription.py:module:metagpt.schema"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/subscription.py:names:['Message']"}, {"id": "{\"lineno\":11,\"end_lineno\":100,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SubscriptionRunner\"],\"properties\":{}}"}, {"id": "metagpt/software_company.py"}, {"id": "metagpt/software_company.py:generate_repo"}, {"id": "metagpt/software_company.py:startup"}, {"id": "metagpt/software_company.py:copy_config_to"}, {"id": "metagpt/software_company.py:app"}, {"id": "global_variable"}, {"id": "metagpt/software_company.py:asyncio"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/software_company.py:shutil"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"id": "metagpt/software_company.py:module:pathlib"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/software_company.py:names:['Path']"}, {"id": "metagpt/software_company.py:typer"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"typer\"],\"properties\":{}}"}, {"id": "metagpt/software_company.py:module:metagpt.config2"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/software_company.py:names:['config']"}, {"id": "metagpt/software_company.py:module:metagpt.const"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"id": "metagpt/software_company.py:names:['CONFIG_ROOT', 'METAGPT_ROOT']"}, {"id": "metagpt/software_company.py:module:metagpt.context"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"id": "metagpt/software_company.py:names:['Context']"}, {"id": "metagpt/software_company.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/software_company.py:names:['ProjectRepo']"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Assign\",\"tokens\":[\"app\"],\"properties\":{}}"}, {"id": "{\"lineno\":18,\"end_lineno\":72,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"generate_repo\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":122,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"startup\"],\"properties\":{}}"}, {"id": "{\"lineno\":125,\"end_lineno\":140,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"copy_config_to\"],\"properties\":{}}"}, {"id": "metagpt/software_company.py:__name__:__main__"}, {"id": "{\"lineno\":143,\"end_lineno\":144,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/__init__.py"}, {"id": "metagpt/__init__.py:module:metagpt"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt\",\"names\":[\"_compat as _\"]}}"}, {"id": "metagpt/__init__.py:names:['_compat as _']"}, {"id": "metagpt/llm.py"}, {"id": "metagpt/llm.py:LLM"}, {"id": "metagpt/llm.py:ast.Constant:\n@Time : 2023/5/11 14:45\n@Author : alexanderwu\n@File : llm.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:45\\n@Author : alexanderwu\\n@File : llm.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/llm.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/llm.py:names:['Optional']"}, {"id": "metagpt/llm.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"id": "metagpt/llm.py:names:['LLMConfig']"}, {"id": "metagpt/llm.py:module:metagpt.context"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"id": "metagpt/llm.py:names:['Context']"}, {"id": "metagpt/llm.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/llm.py:names:['BaseLLM']"}, {"id": "{\"lineno\":15,\"end_lineno\":20,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"LLM\"],\"properties\":{}}"}, {"id": "metagpt/config2.py:merge_dict"}, {"id": "metagpt/config2.py:config"}, {"id": "metagpt/config2.py:ast.Constant:\n@Time : 2024/1/4 01:25\n@Author : alexanderwu\n@File : config2.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 01:25\\n@Author : alexanderwu\\n@File : config2.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/config2.py:os"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/config2.py:module:pathlib"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/config2.py:names:['Path']"}, {"id": "metagpt/config2.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Iterable\",\"List\",\"Literal\",\"Optional\"]}}"}, {"id": "metagpt/config2.py:names:['Dict', 'Iterable', 'List', 'Literal', 'Optional']"}, {"id": "metagpt/config2.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"id": "metagpt/config2.py:names:['BaseModel', 'model_validator']"}, {"id": "metagpt/config2.py:module:metagpt.configs.browser_config"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.browser_config\",\"names\":[\"BrowserConfig\"]}}"}, {"id": "metagpt/config2.py:names:['BrowserConfig']"}, {"id": "metagpt/config2.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/config2.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/config2.py:module:metagpt.configs.mermaid_config"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.mermaid_config\",\"names\":[\"MermaidConfig\"]}}"}, {"id": "metagpt/config2.py:names:['MermaidConfig']"}, {"id": "metagpt/config2.py:module:metagpt.configs.redis_config"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"id": "metagpt/config2.py:names:['RedisConfig']"}, {"id": "metagpt/config2.py:module:metagpt.configs.s3_config"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.s3_config\",\"names\":[\"S3Config\"]}}"}, {"id": "metagpt/config2.py:names:['S3Config']"}, {"id": "metagpt/config2.py:module:metagpt.configs.search_config"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.search_config\",\"names\":[\"SearchConfig\"]}}"}, {"id": "metagpt/config2.py:names:['SearchConfig']"}, {"id": "metagpt/config2.py:module:metagpt.configs.workspace_config"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.workspace_config\",\"names\":[\"WorkspaceConfig\"]}}"}, {"id": "metagpt/config2.py:names:['WorkspaceConfig']"}, {"id": "metagpt/config2.py:module:metagpt.const"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"id": "metagpt/config2.py:names:['CONFIG_ROOT', 'METAGPT_ROOT']"}, {"id": "metagpt/config2.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/config2.py:names:['YamlModel']"}, {"id": "{\"lineno\":25,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CLIParams\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":126,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Config\"],\"properties\":{}}"}, {"id": "{\"lineno\":129,\"end_lineno\":134,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"merge_dict\"],\"properties\":{}}"}, {"id": "{\"lineno\":137,\"end_lineno\":137,\"type_name\":\"ast.Assign\",\"tokens\":[\"config\"],\"properties\":{}}"}, {"id": "metagpt/team.py:Team:__init__"}, {"id": "metagpt/team.py:Team:_check_balance"}, {"id": "metagpt/team.py:Team:_save"}, {"id": "metagpt/team.py:ast.Constant:\n@Time : 2023/5/12 00:30\n@Author : alexanderwu\n@File : team.py\n@Modified By: mashenquan, 2023/11/27. Add an archiving operation after completing the project, as specified in\n Section 2.2.3.3 of RFC 135.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/12 00:30\\n@Author : alexanderwu\\n@File : team.py\\n@Modified By: mashenquan, 2023/11/27. Add an archiving operation after completing the project, as specified in\\n Section 2.2.3.3 of RFC 135.\\n\"],\"properties\":{}}"}, {"id": "metagpt/team.py:warnings"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"id": "metagpt/team.py:module:pathlib"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/team.py:names:['Path']"}, {"id": "metagpt/team.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"id": "metagpt/team.py:names:['Any', 'Optional']"}, {"id": "metagpt/team.py:module:pydantic"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/team.py:names:['BaseModel', 'ConfigDict', 'Field']"}, {"id": "metagpt/team.py:module:metagpt.actions"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/team.py:names:['UserRequirement']"}, {"id": "metagpt/team.py:module:metagpt.const"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\",\"SERDESER_PATH\"]}}"}, {"id": "metagpt/team.py:names:['MESSAGE_ROUTE_TO_ALL', 'SERDESER_PATH']"}, {"id": "metagpt/team.py:module:metagpt.context"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"id": "metagpt/team.py:names:['Context']"}, {"id": "metagpt/team.py:module:metagpt.environment"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment\",\"names\":[\"Environment\"]}}"}, {"id": "metagpt/team.py:names:['Environment']"}, {"id": "metagpt/team.py:module:metagpt.logs"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/team.py:names:['logger']"}, {"id": "metagpt/team.py:module:metagpt.roles"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/team.py:names:['Role']"}, {"id": "metagpt/team.py:module:metagpt.schema"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/team.py:names:['Message']"}, {"id": "metagpt/team.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"NoMoneyException\",\"read_json_file\",\"serialize_decorator\",\"write_json_file\"]}}"}, {"id": "metagpt/team.py:names:['NoMoneyException', 'read_json_file', 'serialize_decorator', 'write_json_file']"}, {"id": "{\"lineno\":32,\"end_lineno\":136,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Team\"],\"properties\":{}}"}, {"id": "metagpt/context.py:AttrDict:__init__"}, {"id": "metagpt/context.py:AttrDict:__getattr__"}, {"id": "metagpt/context.py:AttrDict:__setattr__"}, {"id": "metagpt/context.py:AttrDict:__delattr__"}, {"id": "metagpt/context.py:ast.Constant:\n@Time : 2024/1/4 16:32\n@Author : alexanderwu\n@File : context.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:32\\n@Author : alexanderwu\\n@File : context.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/context.py:os"}, {"id": "metagpt/context.py:module:pathlib"}, {"id": "metagpt/context.py:names:['Path']"}, {"id": "metagpt/context.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"id": "metagpt/context.py:names:['Any', 'Optional']"}, {"id": "metagpt/context.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\"]}}"}, {"id": "metagpt/context.py:names:['BaseModel', 'ConfigDict']"}, {"id": "metagpt/context.py:module:metagpt.config2"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"id": "metagpt/context.py:names:['Config']"}, {"id": "metagpt/context.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"id": "metagpt/context.py:names:['LLMConfig']"}, {"id": "metagpt/context.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/context.py:names:['BaseLLM']"}, {"id": "metagpt/context.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"create_llm_instance\"]}}"}, {"id": "metagpt/context.py:names:['create_llm_instance']"}, {"id": "metagpt/context.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"id": "metagpt/context.py:names:['CostManager']"}, {"id": "metagpt/context.py:module:metagpt.utils.git_repository"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"id": "metagpt/context.py:names:['GitRepository']"}, {"id": "metagpt/context.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/context.py:names:['ProjectRepo']"}, {"id": "{\"lineno\":23,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AttrDict\"],\"properties\":{}}"}, {"id": "{\"lineno\":55,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Context\"],\"properties\":{}}"}, {"id": "metagpt/logs.py"}, {"id": "metagpt/logs.py:define_log_level"}, {"id": "metagpt/logs.py:log_llm_stream"}, {"id": "metagpt/logs.py:set_llm_stream_logfunc"}, {"id": "metagpt/logs.py:logger"}, {"id": "metagpt/logs.py:_llm_stream_log"}, {"id": "metagpt/logs.py:ast.Constant:\n@Time : 2023/6/1 12:41\n@Author : alexanderwu\n@File : logs.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/1 12:41\\n@Author : alexanderwu\\n@File : logs.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/logs.py:sys"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/logs.py:module:datetime"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/logs.py:names:['datetime']"}, {"id": "metagpt/logs.py:module:functools"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"partial\"]}}"}, {"id": "metagpt/logs.py:names:['partial']"}, {"id": "metagpt/logs.py:module:loguru"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger as _logger\"]}}"}, {"id": "metagpt/logs.py:names:['logger as _logger']"}, {"id": "metagpt/logs.py:module:metagpt.const"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"METAGPT_ROOT\"]}}"}, {"id": "metagpt/logs.py:names:['METAGPT_ROOT']"}, {"id": "{\"lineno\":18,\"end_lineno\":27,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"define_log_level\"],\"properties\":{}}"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"logger\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":34,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_llm_stream\"],\"properties\":{}}"}, {"id": "{\"lineno\":37,\"end_lineno\":39,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"set_llm_stream_logfunc\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"_llm_stream_log\"],\"properties\":{}}"}, {"id": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_df"}, {"id": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_langchain"}, {"id": "metagpt/document.py:Repo:_path"}, {"id": "metagpt/document.py:Repo:_set"}, {"id": "metagpt/document.py:validate_cols"}, {"id": "metagpt/document.py:read_data"}, {"id": "metagpt/document.py:ast.Constant:\n@Time : 2023/6/8 14:03\n@Author : alexanderwu\n@File : document.py\n@Desc : Classes and Operations Related to Files in the File System.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/8 14:03\\n@Author : alexanderwu\\n@File : document.py\\n@Desc : Classes and Operations Related to Files in the File System.\\n\"],\"properties\":{}}"}, {"id": "metagpt/document.py:module:enum"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/document.py:names:['Enum']"}, {"id": "metagpt/document.py:module:pathlib"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/document.py:names:['Path']"}, {"id": "metagpt/document.py:module:typing"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"id": "metagpt/document.py:names:['Optional', 'Union']"}, {"id": "metagpt/document.py:pandas as pd"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"id": "metagpt/document.py:module:langchain.document_loaders"}, {"id": "{\"lineno\":14,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.document_loaders\",\"names\":[\"TextLoader\",\"UnstructuredPDFLoader\",\"UnstructuredWordDocumentLoader\"]}}"}, {"id": "metagpt/document.py:names:['TextLoader', 'UnstructuredPDFLoader', 'UnstructuredWordDocumentLoader']"}, {"id": "metagpt/document.py:module:langchain.text_splitter"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.text_splitter\",\"names\":[\"CharacterTextSplitter\"]}}"}, {"id": "metagpt/document.py:names:['CharacterTextSplitter']"}, {"id": "metagpt/document.py:module:pydantic"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/document.py:names:['BaseModel', 'ConfigDict', 'Field']"}, {"id": "metagpt/document.py:module:tqdm"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tqdm\",\"names\":[\"tqdm\"]}}"}, {"id": "metagpt/document.py:names:['tqdm']"}, {"id": "metagpt/document.py:module:metagpt.logs"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/document.py:names:['logger']"}, {"id": "metagpt/document.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"RepoParser\"]}}"}, {"id": "metagpt/document.py:names:['RepoParser']"}, {"id": "{\"lineno\":27,\"end_lineno\":29,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"validate_cols\"],\"properties\":{}}"}, {"id": "{\"lineno\":32,\"end_lineno\":51,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_data\"],\"properties\":{}}"}, {"id": "{\"lineno\":54,\"end_lineno\":60,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocumentStatus\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Document\"],\"properties\":{}}"}, {"id": "{\"lineno\":115,\"end_lineno\":165,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IndexableDocument\"],\"properties\":{}}"}, {"id": "{\"lineno\":168,\"end_lineno\":172,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoMetadata\"],\"properties\":{}}"}, {"id": "{\"lineno\":175,\"end_lineno\":239,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Repo\"],\"properties\":{}}"}, {"id": "metagpt/_compat.py"}, {"id": "metagpt/_compat.py:platform"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"id": "metagpt/_compat.py:sys"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/_compat.py:warnings"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"id": "metagpt/_compat.py:n:a:m:e:p:l:a:t:f:o:r:m:.:s:y:s:t:e:m"}, {"id": "{\"lineno\":5,\"end_lineno\":23,\"type_name\":\"ast.If\",\"tokens\":[\"n\",\"a\",\"m\",\"e\",\"p\",\"l\",\"a\",\"t\",\"f\",\"o\",\"r\",\"m\",\".\",\"s\",\"y\",\"s\",\"t\",\"e\",\"m\"],\"properties\":{}}"}, {"id": "metagpt/context_mixin.py:ContextMixin:_process_context_mixin_extra"}, {"id": "metagpt/context_mixin.py:ast.Constant:\n@Time : 2024/1/11 17:25\n@Author : alexanderwu\n@File : context_mixin.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/11 17:25\\n@Author : alexanderwu\\n@File : context_mixin.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/context_mixin.py:module:typing"}, {"id": "metagpt/context_mixin.py:names:['Optional']"}, {"id": "metagpt/context_mixin.py:module:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"id": "metagpt/context_mixin.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']"}, {"id": "metagpt/context_mixin.py:module:metagpt.config2"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"id": "metagpt/context_mixin.py:names:['Config']"}, {"id": "metagpt/context_mixin.py:module:metagpt.context"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"id": "metagpt/context_mixin.py:names:['Context']"}, {"id": "metagpt/context_mixin.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/context_mixin.py:names:['BaseLLM']"}, {"id": "{\"lineno\":17,\"end_lineno\":101,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ContextMixin\"],\"properties\":{}}"}, {"id": "metagpt/const.py"}, {"id": "metagpt/const.py:get_metagpt_package_root"}, {"id": "metagpt/const.py:get_metagpt_root"}, {"id": "metagpt/const.py:CONFIG_ROOT"}, {"id": "metagpt/const.py:METAGPT_ROOT"}, {"id": "metagpt/const.py:DEFAULT_WORKSPACE_ROOT"}, {"id": "metagpt/const.py:EXAMPLE_PATH"}, {"id": "metagpt/const.py:DATA_PATH"}, {"id": "metagpt/const.py:TEST_DATA_PATH"}, {"id": "metagpt/const.py:RESEARCH_PATH"}, {"id": "metagpt/const.py:TUTORIAL_PATH"}, {"id": "metagpt/const.py:INVOICE_OCR_TABLE_PATH"}, {"id": "metagpt/const.py:UT_PATH"}, {"id": "metagpt/const.py:SWAGGER_PATH"}, {"id": "metagpt/const.py:UT_PY_PATH"}, {"id": "metagpt/const.py:API_QUESTIONS_PATH"}, {"id": "metagpt/const.py:SERDESER_PATH"}, {"id": "metagpt/const.py:TMP"}, {"id": "metagpt/const.py:SOURCE_ROOT"}, {"id": "metagpt/const.py:PROMPT_PATH"}, {"id": "metagpt/const.py:SKILL_DIRECTORY"}, {"id": "metagpt/const.py:TOOL_SCHEMA_PATH"}, {"id": "metagpt/const.py:TOOL_LIBS_PATH"}, {"id": "metagpt/const.py:MEM_TTL"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_FROM"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_TO"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_CAUSE_BY"}, {"id": "metagpt/const.py:MESSAGE_META_ROLE"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_TO_ALL"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_TO_NONE"}, {"id": "metagpt/const.py:REQUIREMENT_FILENAME"}, {"id": "metagpt/const.py:BUGFIX_FILENAME"}, {"id": "metagpt/const.py:PACKAGE_REQUIREMENTS_FILENAME"}, {"id": "metagpt/const.py:DOCS_FILE_REPO"}, {"id": "metagpt/const.py:PRDS_FILE_REPO"}, {"id": "metagpt/const.py:SYSTEM_DESIGN_FILE_REPO"}, {"id": "metagpt/const.py:TASK_FILE_REPO"}, {"id": "metagpt/const.py:CODE_PLAN_AND_CHANGE_FILE_REPO"}, {"id": "metagpt/const.py:COMPETITIVE_ANALYSIS_FILE_REPO"}, {"id": "metagpt/const.py:DATA_API_DESIGN_FILE_REPO"}, {"id": "metagpt/const.py:SEQ_FLOW_FILE_REPO"}, {"id": "metagpt/const.py:SYSTEM_DESIGN_PDF_FILE_REPO"}, {"id": "metagpt/const.py:PRD_PDF_FILE_REPO"}, {"id": "metagpt/const.py:TASK_PDF_FILE_REPO"}, {"id": "metagpt/const.py:CODE_PLAN_AND_CHANGE_PDF_FILE_REPO"}, {"id": "metagpt/const.py:TEST_CODES_FILE_REPO"}, {"id": "metagpt/const.py:TEST_OUTPUTS_FILE_REPO"}, {"id": "metagpt/const.py:CODE_SUMMARIES_FILE_REPO"}, {"id": "metagpt/const.py:CODE_SUMMARIES_PDF_FILE_REPO"}, {"id": "metagpt/const.py:RESOURCES_FILE_REPO"}, {"id": "metagpt/const.py:SD_OUTPUT_FILE_REPO"}, {"id": "metagpt/const.py:GRAPH_REPO_FILE_REPO"}, {"id": "metagpt/const.py:VISUAL_GRAPH_REPO_FILE_REPO"}, {"id": "metagpt/const.py:CLASS_VIEW_FILE_REPO"}, {"id": "metagpt/const.py:YAPI_URL"}, {"id": "metagpt/const.py:DEFAULT_LANGUAGE"}, {"id": "metagpt/const.py:DEFAULT_MAX_TOKENS"}, {"id": "metagpt/const.py:COMMAND_TOKENS"}, {"id": "metagpt/const.py:BRAIN_MEMORY"}, {"id": "metagpt/const.py:SKILL_PATH"}, {"id": "metagpt/const.py:SERPER_API_KEY"}, {"id": "metagpt/const.py:DEFAULT_TOKEN_SIZE"}, {"id": "metagpt/const.py:BASE64_FORMAT"}, {"id": "metagpt/const.py:REDIS_KEY"}, {"id": "metagpt/const.py:LLM_API_TIMEOUT"}, {"id": "metagpt/const.py:IGNORED_MESSAGE_ID"}, {"id": "metagpt/const.py:GENERALIZATION"}, {"id": "metagpt/const.py:COMPOSITION"}, {"id": "metagpt/const.py:AGGREGATION"}, {"id": "metagpt/const.py:ast.Constant:\n@Time : 2023/5/1 11:59\n@Author : alexanderwu\n@File : const.py\n@Modified By: mashenquan, 2023-11-1. According to Section 2.2.1 and 2.2.2 of RFC 116, added key definitions for\n common properties in the Message.\n@Modified By: mashenquan, 2023-11-27. Defines file repository paths according to Section 2.2.3.4 of RFC 135.\n@Modified By: mashenquan, 2023/12/5. Add directories for code summarization..\n"}, {"id": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/1 11:59\\n@Author : alexanderwu\\n@File : const.py\\n@Modified By: mashenquan, 2023-11-1. According to Section 2.2.1 and 2.2.2 of RFC 116, added key definitions for\\n common properties in the Message.\\n@Modified By: mashenquan, 2023-11-27. Defines file repository paths according to Section 2.2.3.4 of RFC 135.\\n@Modified By: mashenquan, 2023/12/5. Add directories for code summarization..\\n\"],\"properties\":{}}"}, {"id": "metagpt/const.py:os"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/const.py:module:pathlib"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/const.py:names:['Path']"}, {"id": "metagpt/const.py:module:loguru"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/const.py:names:['logger']"}, {"id": "metagpt/const.py:metagpt"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt\"],\"properties\":{}}"}, {"id": "{\"lineno\":20,\"end_lineno\":30,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_metagpt_package_root\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":43,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_metagpt_root\"],\"properties\":{}}"}, {"id": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONFIG_ROOT\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"METAGPT_ROOT\"],\"properties\":{}}"}, {"id": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_WORKSPACE_ROOT\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXAMPLE_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":52,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":53,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_DATA_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":54,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":55,\"end_lineno\":55,\"type_name\":\"ast.Assign\",\"tokens\":[\"TUTORIAL_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":56,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"INVOICE_OCR_TABLE_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"UT_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":59,\"end_lineno\":59,\"type_name\":\"ast.Assign\",\"tokens\":[\"SWAGGER_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"UT_PY_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":61,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"API_QUESTIONS_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":63,\"type_name\":\"ast.Assign\",\"tokens\":[\"SERDESER_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":65,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"TMP\"],\"properties\":{}}"}, {"id": "{\"lineno\":67,\"end_lineno\":67,\"type_name\":\"ast.Assign\",\"tokens\":[\"SOURCE_ROOT\"],\"properties\":{}}"}, {"id": "{\"lineno\":68,\"end_lineno\":68,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":69,\"end_lineno\":69,\"type_name\":\"ast.Assign\",\"tokens\":[\"SKILL_DIRECTORY\"],\"properties\":{}}"}, {"id": "{\"lineno\":70,\"end_lineno\":70,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_SCHEMA_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":71,\"end_lineno\":71,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_LIBS_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":75,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"MEM_TTL\"],\"properties\":{}}"}, {"id": "{\"lineno\":77,\"end_lineno\":77,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_FROM\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":78,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO\"],\"properties\":{}}"}, {"id": "{\"lineno\":79,\"end_lineno\":79,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_CAUSE_BY\"],\"properties\":{}}"}, {"id": "{\"lineno\":80,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_META_ROLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":81,\"end_lineno\":81,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO_ALL\"],\"properties\":{}}"}, {"id": "{\"lineno\":82,\"end_lineno\":82,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO_NONE\"],\"properties\":{}}"}, {"id": "{\"lineno\":84,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_FILENAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":85,\"end_lineno\":85,\"type_name\":\"ast.Assign\",\"tokens\":[\"BUGFIX_FILENAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":86,\"end_lineno\":86,\"type_name\":\"ast.Assign\",\"tokens\":[\"PACKAGE_REQUIREMENTS_FILENAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":88,\"end_lineno\":88,\"type_name\":\"ast.Assign\",\"tokens\":[\"DOCS_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":89,\"end_lineno\":89,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRDS_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":90,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"SYSTEM_DESIGN_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":91,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":92,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":93,\"end_lineno\":93,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_ANALYSIS_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":94,\"end_lineno\":94,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_API_DESIGN_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":95,\"end_lineno\":95,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEQ_FLOW_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":96,\"end_lineno\":96,\"type_name\":\"ast.Assign\",\"tokens\":[\"SYSTEM_DESIGN_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":97,\"end_lineno\":97,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRD_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":98,\"end_lineno\":98,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":99,\"end_lineno\":99,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":100,\"end_lineno\":100,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_CODES_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":101,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_OUTPUTS_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":102,\"end_lineno\":102,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_SUMMARIES_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":103,\"end_lineno\":103,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_SUMMARIES_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":104,\"end_lineno\":104,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESOURCES_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":105,\"end_lineno\":105,\"type_name\":\"ast.Assign\",\"tokens\":[\"SD_OUTPUT_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":106,\"end_lineno\":106,\"type_name\":\"ast.Assign\",\"tokens\":[\"GRAPH_REPO_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":107,\"end_lineno\":107,\"type_name\":\"ast.Assign\",\"tokens\":[\"VISUAL_GRAPH_REPO_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":108,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"CLASS_VIEW_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":110,\"end_lineno\":110,\"type_name\":\"ast.Assign\",\"tokens\":[\"YAPI_URL\"],\"properties\":{}}"}, {"id": "{\"lineno\":112,\"end_lineno\":112,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_LANGUAGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":113,\"end_lineno\":113,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_MAX_TOKENS\"],\"properties\":{}}"}, {"id": "{\"lineno\":114,\"end_lineno\":114,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMAND_TOKENS\"],\"properties\":{}}"}, {"id": "{\"lineno\":115,\"end_lineno\":115,\"type_name\":\"ast.Assign\",\"tokens\":[\"BRAIN_MEMORY\"],\"properties\":{}}"}, {"id": "{\"lineno\":116,\"end_lineno\":116,\"type_name\":\"ast.Assign\",\"tokens\":[\"SKILL_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":117,\"end_lineno\":117,\"type_name\":\"ast.Assign\",\"tokens\":[\"SERPER_API_KEY\"],\"properties\":{}}"}, {"id": "{\"lineno\":118,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_TOKEN_SIZE\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":121,\"type_name\":\"ast.Assign\",\"tokens\":[\"BASE64_FORMAT\"],\"properties\":{}}"}, {"id": "{\"lineno\":124,\"end_lineno\":124,\"type_name\":\"ast.Assign\",\"tokens\":[\"REDIS_KEY\"],\"properties\":{}}"}, {"id": "{\"lineno\":125,\"end_lineno\":125,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_API_TIMEOUT\"],\"properties\":{}}"}, {"id": "{\"lineno\":128,\"end_lineno\":128,\"type_name\":\"ast.Assign\",\"tokens\":[\"IGNORED_MESSAGE_ID\"],\"properties\":{}}"}, {"id": "{\"lineno\":131,\"end_lineno\":131,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERALIZATION\"],\"properties\":{}}"}, {"id": "{\"lineno\":132,\"end_lineno\":132,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPOSITION\"],\"properties\":{}}"}, {"id": "{\"lineno\":133,\"end_lineno\":133,\"type_name\":\"ast.Assign\",\"tokens\":[\"AGGREGATION\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:SerializationMixin:__serialize_with_class_type__"}, {"id": "metagpt/schema.py:SerializationMixin:__convert_to_real_type__"}, {"id": "metagpt/schema.py:SerializationMixin:__init_subclass__"}, {"id": "metagpt/schema.py:Document:__str__"}, {"id": "metagpt/schema.py:Document:__repr__"}, {"id": "metagpt/schema.py:Message:__init__"}, {"id": "metagpt/schema.py:Message:__setattr__"}, {"id": "metagpt/schema.py:Message:__str__"}, {"id": "metagpt/schema.py:Message:__repr__"}, {"id": "metagpt/schema.py:UserMessage:__init__"}, {"id": "metagpt/schema.py:SystemMessage:__init__"}, {"id": "metagpt/schema.py:AIMessage:__init__"}, {"id": "metagpt/schema.py:Plan:_topological_sort"}, {"id": "metagpt/schema.py:Plan:_update_current_task"}, {"id": "metagpt/schema.py:CodeSummarizeContext:__hash__"}, {"id": "metagpt/schema.py:T"}, {"id": "metagpt/schema.py:ast.Constant:\n@Time : 2023/5/8 22:12\n@Author : alexanderwu\n@File : schema.py\n@Modified By: mashenquan, 2023-10-31. According to Chapter 2.2.1 of RFC 116:\n Replanned the distribution of responsibilities and functional positioning of `Message` class attributes.\n@Modified By: mashenquan, 2023/11/22.\n 1. Add `Document` and `Documents` for `FileRepository` in Section 2.2.3.4 of RFC 135.\n 2. Encapsulate the common key-values set to pydantic structures to standardize and unify parameter passing\n between actions.\n 3. Add `id` to `Message` according to Section 2.2.3.1.1 of RFC 135.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/8 22:12\\n@Author : alexanderwu\\n@File : schema.py\\n@Modified By: mashenquan, 2023-10-31. According to Chapter 2.2.1 of RFC 116:\\n Replanned the distribution of responsibilities and functional positioning of `Message` class attributes.\\n@Modified By: mashenquan, 2023/11/22.\\n 1. Add `Document` and `Documents` for `FileRepository` in Section 2.2.3.4 of RFC 135.\\n 2. Encapsulate the common key-values set to pydantic structures to standardize and unify parameter passing\\n between actions.\\n 3. Add `id` to `Message` according to Section 2.2.3.1.1 of RFC 135.\\n\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:module:__future__"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/schema.py:names:['annotations']"}, {"id": "metagpt/schema.py:asyncio"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:json"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:os.path"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.Import\",\"tokens\":[\"os.path\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:uuid"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:module:abc"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"id": "metagpt/schema.py:names:['ABC']"}, {"id": "metagpt/schema.py:module:asyncio"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"asyncio\",\"names\":[\"Queue\",\"QueueEmpty\",\"wait_for\"]}}"}, {"id": "metagpt/schema.py:names:['Queue', 'QueueEmpty', 'wait_for']"}, {"id": "metagpt/schema.py:module:json"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"id": "metagpt/schema.py:names:['JSONDecodeError']"}, {"id": "metagpt/schema.py:module:pathlib"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/schema.py:names:['Path']"}, {"id": "metagpt/schema.py:module:typing"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Iterable\",\"List\",\"Optional\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"id": "metagpt/schema.py:names:['Any', 'Dict', 'Iterable', 'List', 'Optional', 'Type', 'TypeVar', 'Union']"}, {"id": "metagpt/schema.py:module:pydantic"}, {"id": "{\"lineno\":28,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"PrivateAttr\",\"field_serializer\",\"field_validator\",\"model_serializer\",\"model_validator\"]}}"}, {"id": "metagpt/schema.py:names:['BaseModel', 'ConfigDict', 'Field', 'PrivateAttr', 'field_serializer', 'field_validator', 'model_serializer', 'model_validator']"}, {"id": "metagpt/schema.py:module:metagpt.const"}, {"id": "{\"lineno\":39,\"end_lineno\":47,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_CAUSE_BY\",\"MESSAGE_ROUTE_FROM\",\"MESSAGE_ROUTE_TO\",\"MESSAGE_ROUTE_TO_ALL\",\"PRDS_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"id": "metagpt/schema.py:names:['MESSAGE_ROUTE_CAUSE_BY', 'MESSAGE_ROUTE_FROM', 'MESSAGE_ROUTE_TO', 'MESSAGE_ROUTE_TO_ALL', 'PRDS_FILE_REPO', 'SYSTEM_DESIGN_FILE_REPO', 'TASK_FILE_REPO']"}, {"id": "metagpt/schema.py:module:metagpt.logs"}, {"id": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/schema.py:names:['logger']"}, {"id": "metagpt/schema.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\"]}}"}, {"id": "metagpt/schema.py:names:['DotClassInfo']"}, {"id": "metagpt/schema.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":50,\"end_lineno\":50,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\",\"import_class\"]}}"}, {"id": "metagpt/schema.py:names:['any_to_str', 'any_to_str_set', 'import_class']"}, {"id": "metagpt/schema.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/schema.py:names:['handle_exception']"}, {"id": "metagpt/schema.py:module:metagpt.utils.serialize"}, {"id": "{\"lineno\":52,\"end_lineno\":56,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"actionoutout_schema_to_mapping\",\"actionoutput_mapping_to_str\",\"actionoutput_str_to_mapping\"]}}"}, {"id": "metagpt/schema.py:names:['actionoutout_schema_to_mapping', 'actionoutput_mapping_to_str', 'actionoutput_str_to_mapping']"}, {"id": "{\"lineno\":59,\"end_lineno\":118,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerializationMixin\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":123,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SimpleMessage\"],\"properties\":{}}"}, {"id": "{\"lineno\":126,\"end_lineno\":155,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Document\"],\"properties\":{}}"}, {"id": "{\"lineno\":158,\"end_lineno\":185,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Documents\"],\"properties\":{}}"}, {"id": "{\"lineno\":188,\"end_lineno\":303,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Message\"],\"properties\":{}}"}, {"id": "{\"lineno\":306,\"end_lineno\":312,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UserMessage\"],\"properties\":{}}"}, {"id": "{\"lineno\":315,\"end_lineno\":321,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SystemMessage\"],\"properties\":{}}"}, {"id": "{\"lineno\":324,\"end_lineno\":330,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AIMessage\"],\"properties\":{}}"}, {"id": "{\"lineno\":333,\"end_lineno\":352,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Task\"],\"properties\":{}}"}, {"id": "{\"lineno\":355,\"end_lineno\":360,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TaskResult\"],\"properties\":{}}"}, {"id": "{\"lineno\":363,\"end_lineno\":524,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Plan\"],\"properties\":{}}"}, {"id": "{\"lineno\":527,\"end_lineno\":596,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MessageQueue\"],\"properties\":{}}"}, {"id": "{\"lineno\":600,\"end_lineno\":600,\"type_name\":\"ast.Assign\",\"tokens\":[\"T\"],\"properties\":{}}"}, {"id": "{\"lineno\":603,\"end_lineno\":608,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":611,\"end_lineno\":616,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodingContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":619,\"end_lineno\":622,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TestingContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":625,\"end_lineno\":635,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCodeContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":638,\"end_lineno\":641,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCodeResult\"],\"properties\":{}}"}, {"id": "{\"lineno\":644,\"end_lineno\":663,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeSummarizeContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":666,\"end_lineno\":667,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BugFixContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":670,\"end_lineno\":690,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodePlanAndChangeContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":694,\"end_lineno\":706,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassMeta\"],\"properties\":{}}"}, {"id": "{\"lineno\":709,\"end_lineno\":729,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassAttribute\"],\"properties\":{}}"}, {"id": "{\"lineno\":732,\"end_lineno\":746,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassMethod\"],\"properties\":{}}"}, {"id": "{\"lineno\":749,\"end_lineno\":776,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassView\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_image.py"}, {"id": "metagpt/learn/text_to_image.py:text_to_image"}, {"id": "metagpt/learn/text_to_image.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : text_to_image.py\n@Desc : Text-to-Image skill, which provides text-to-image functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : text_to_image.py\\n@Desc : Text-to-Image skill, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_image.py:base64"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_image.py:metagpt.config2"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.config2"}, {"id": "metagpt/learn/text_to_image.py:names:['Config']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.const"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['BASE64_FORMAT']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.llm"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['LLM']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.tools.metagpt_text_to_image"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.metagpt_text_to_image\",\"names\":[\"oas3_metagpt_text_to_image\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['oas3_metagpt_text_to_image']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.tools.openai_text_to_image"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_image\",\"names\":[\"oas3_openai_text_to_image\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['oas3_openai_text_to_image']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.utils.s3"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['S3']"}, {"id": "{\"lineno\":20,\"end_lineno\":44,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_image\"],\"properties\":{}}"}, {"id": "metagpt/learn/__init__.py"}, {"id": "metagpt/learn/__init__.py:__all__"}, {"id": "metagpt/learn/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:57\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:57\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/__init__.py:module:metagpt.learn.text_to_image"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_image\",\"names\":[\"text_to_image\"]}}"}, {"id": "metagpt/learn/__init__.py:names:['text_to_image']"}, {"id": "metagpt/learn/__init__.py:module:metagpt.learn.text_to_speech"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_speech\",\"names\":[\"text_to_speech\"]}}"}, {"id": "metagpt/learn/__init__.py:names:['text_to_speech']"}, {"id": "metagpt/learn/__init__.py:module:metagpt.learn.google_search"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.google_search\",\"names\":[\"google_search\"]}}"}, {"id": "metagpt/learn/__init__.py:names:['google_search']"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/learn/google_search.py"}, {"id": "metagpt/learn/google_search.py:google_search"}, {"id": "metagpt/learn/google_search.py:module:metagpt.tools.search_engine"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"id": "metagpt/learn/google_search.py:names:['SearchEngine']"}, {"id": "{\"lineno\":4,\"end_lineno\":12,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"google_search\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_speech.py"}, {"id": "metagpt/learn/text_to_speech.py:text_to_speech"}, {"id": "metagpt/learn/text_to_speech.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : text_to_speech.py\n@Desc : Text-to-Speech skill, which provides text-to-speech functionality\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : text_to_speech.py\\n@Desc : Text-to-Speech skill, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_speech.py:metagpt.config2"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.config2"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['Config']"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.const"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['BASE64_FORMAT']"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.tools.azure_tts"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.azure_tts\",\"names\":[\"oas3_azsure_tts\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['oas3_azsure_tts']"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.tools.iflytek_tts"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.iflytek_tts\",\"names\":[\"oas3_iflytek_tts\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['oas3_iflytek_tts']"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.utils.s3"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['S3']"}, {"id": "{\"lineno\":17,\"end_lineno\":69,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_speech\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_embedding.py"}, {"id": "metagpt/learn/text_to_embedding.py:text_to_embedding"}, {"id": "metagpt/learn/text_to_embedding.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : text_to_embedding.py\n@Desc : Text-to-Embedding skill, which provides text-to-embedding functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : text_to_embedding.py\\n@Desc : Text-to-Embedding skill, which provides text-to-embedding functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_embedding.py:metagpt.config2"}, {"id": "metagpt/learn/text_to_embedding.py:module:metagpt.config2"}, {"id": "metagpt/learn/text_to_embedding.py:names:['Config']"}, {"id": "metagpt/learn/text_to_embedding.py:module:metagpt.tools.openai_text_to_embedding"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_embedding\",\"names\":[\"oas3_openai_text_to_embedding\"]}}"}, {"id": "metagpt/learn/text_to_embedding.py:names:['oas3_openai_text_to_embedding']"}, {"id": "{\"lineno\":14,\"end_lineno\":24,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_embedding\"],\"properties\":{}}"}, {"id": "metagpt/learn/skill_loader.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : skill_loader.py\n@Desc : Skill YAML Configuration Loader.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : skill_loader.py\\n@Desc : Skill YAML Configuration Loader.\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/skill_loader.py:module:pathlib"}, {"id": "metagpt/learn/skill_loader.py:names:['Path']"}, {"id": "metagpt/learn/skill_loader.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"id": "metagpt/learn/skill_loader.py:names:['Dict', 'List', 'Optional']"}, {"id": "metagpt/learn/skill_loader.py:aiofiles"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/learn/skill_loader.py:yaml"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"id": "metagpt/learn/skill_loader.py:module:pydantic"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"id": "metagpt/learn/skill_loader.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/learn/skill_loader.py:module:metagpt.context"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"id": "metagpt/learn/skill_loader.py:names:['Context']"}, {"id": "{\"lineno\":19,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Example\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Returns\"],\"properties\":{}}"}, {"id": "{\"lineno\":29,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Parameter\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":50,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Skill\"],\"properties\":{}}"}, {"id": "{\"lineno\":53,\"end_lineno\":55,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Entity\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":59,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Components\"],\"properties\":{}}"}, {"id": "{\"lineno\":62,\"end_lineno\":101,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillsDeclaration\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:_search_from_ddgs"}, {"id": "metagpt/tools/search_engine_ddg.py:module:__future__"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/tools/search_engine_ddg.py:names:['annotations']"}, {"id": "metagpt/tools/search_engine_ddg.py:asyncio"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_ddg.py:json"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_ddg.py:module:concurrent"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"id": "metagpt/tools/search_engine_ddg.py:names:['futures']"}, {"id": "metagpt/tools/search_engine_ddg.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\",\"overload\"]}}"}, {"id": "metagpt/tools/search_engine_ddg.py:names:['Literal', 'Optional', 'overload']"}, {"id": "metagpt/tools/search_engine_ddg.py:module:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\"]}}"}, {"id": "metagpt/tools/search_engine_ddg.py:names:['BaseModel', 'ConfigDict']"}, {"id": "{\"lineno\":21,\"end_lineno\":88,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DDGAPIWrapper\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_ddg.py:__name__:__main__"}, {"id": "{\"lineno\":91,\"end_lineno\":94,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:oas_http_svc"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : metagpt_oas3_api_svc.py\n@Desc : MetaGPT OpenAPI Specification 3.0 REST API service\n\n curl -X 'POST' 'http://localhost:8080/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\n"}, {"id": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : metagpt_oas3_api_svc.py\\n@Desc : MetaGPT OpenAPI Specification 3.0 REST API service\\n\\n curl -X 'POST' 'http://localhost:8080/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:module:pathlib"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:names:['Path']"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:connexion"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"connexion\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"oas_http_svc\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:__name__:__main__"}, {"id": "{\"lineno\":31,\"end_lineno\":32,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:DataSource:__init__"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:__init__"}, {"id": "metagpt/tools/search_engine_meilisearch.py:ast.Constant:\n@Time : 2023/5/22 21:33\n@Author : alexanderwu\n@File : search_engine_meilisearch.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/22 21:33\\n@Author : alexanderwu\\n@File : search_engine_meilisearch.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:names:['List']"}, {"id": "metagpt/tools/search_engine_meilisearch.py:meilisearch"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"meilisearch\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:module:meilisearch.index"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"meilisearch.index\",\"names\":[\"Index\"]}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:names:['Index']"}, {"id": "metagpt/tools/search_engine_meilisearch.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:names:['handle_exception']"}, {"id": "{\"lineno\":17,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DataSource\"],\"properties\":{}}"}, {"id": "{\"lineno\":23,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MeilisearchEngine\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:__init__"}, {"id": "metagpt/tools/openai_text_to_embedding.py:oas3_openai_text_to_embedding"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : openai_text_to_embedding.py\n@Desc : OpenAI Text-to-Embedding OAS3 api, which provides text-to-embedding functionality.\n For more details, checkout: `https://platform.openai.com/docs/api-reference/embeddings/object`\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : openai_text_to_embedding.py\\n@Desc : OpenAI Text-to-Embedding OAS3 api, which provides text-to-embedding functionality.\\n For more details, checkout: `https://platform.openai.com/docs/api-reference/embeddings/object`\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:names:['List']"}, {"id": "metagpt/tools/openai_text_to_embedding.py:aiohttp"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:requests"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:module:pydantic"}, {"id": "metagpt/tools/openai_text_to_embedding.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/tools/openai_text_to_embedding.py:module:metagpt.logs"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:names:['logger']"}, {"id": "{\"lineno\":19,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Embedding\"],\"properties\":{}}"}, {"id": "{\"lineno\":29,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Usage\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ResultEmbedding\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":71,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIText2Embedding\"],\"properties\":{}}"}, {"id": "{\"lineno\":75,\"end_lineno\":85,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_openai_text_to_embedding\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:_process_response"}, {"id": "metagpt/tools/search_engine_serpapi.py:ast.Constant:\n@Time : 2023/5/23 18:27\n@Author : alexanderwu\n@File : search_engine_serpapi.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 18:27\\n@Author : alexanderwu\\n@File : search_engine_serpapi.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:warnings"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:names:['Any', 'Dict', 'Optional', 'Tuple']"}, {"id": "metagpt/tools/search_engine_serpapi.py:aiohttp"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']"}, {"id": "{\"lineno\":15,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerpAPIWrapper\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:__name__:__main__"}, {"id": "{\"lineno\":115,\"end_lineno\":118,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:__init__"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_scrape"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_run_precheck"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_get_install_lock"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_install_browsers"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_log_stream"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_install_lock"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_install_cache"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:__future__"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['annotations']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:asyncio"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:sys"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:pathlib"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['Path']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['Literal', 'Optional']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:playwright.async_api"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['async_playwright']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"PrivateAttr\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['BaseModel', 'Field', 'PrivateAttr']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.logs"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['logger']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.utils.parse_html"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['WebPage']"}, {"id": "{\"lineno\":18,\"end_lineno\":94,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PlaywrightWrapper\"],\"properties\":{}}"}, {"id": "{\"lineno\":97,\"end_lineno\":101,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_get_install_lock\"],\"properties\":{}}"}, {"id": "{\"lineno\":104,\"end_lineno\":127,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"_install_browsers\"],\"properties\":{}}"}, {"id": "{\"lineno\":130,\"end_lineno\":135,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"_log_stream\"],\"properties\":{}}"}, {"id": "{\"lineno\":138,\"end_lineno\":138,\"type_name\":\"ast.AnnAssign\",\"tokens\":[\"_install_lock\"],\"properties\":{}}"}, {"id": "{\"lineno\":139,\"end_lineno\":139,\"type_name\":\"ast.Assign\",\"tokens\":[\"_install_cache\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine.py:SkSearchEngine:__init__"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:_process_extra"}, {"id": "metagpt/tools/search_engine.py:ast.Constant:\n@Time : 2023/5/6 20:15\n@Author : alexanderwu\n@File : search_engine.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/6 20:15\\n@Author : alexanderwu\\n@File : search_engine.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine.py:importlib"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Coroutine\",\"Literal\",\"Optional\",\"Union\",\"overload\"]}}"}, {"id": "metagpt/tools/search_engine.py:names:['Callable', 'Coroutine', 'Literal', 'Optional', 'Union', 'overload']"}, {"id": "metagpt/tools/search_engine.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"model_validator\"]}}"}, {"id": "metagpt/tools/search_engine.py:names:['BaseModel', 'ConfigDict', 'model_validator']"}, {"id": "metagpt/tools/search_engine.py:module:semantic_kernel.skill_definition"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.skill_definition\",\"names\":[\"sk_function\"]}}"}, {"id": "metagpt/tools/search_engine.py:names:['sk_function']"}, {"id": "metagpt/tools/search_engine.py:module:metagpt.configs.search_config"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.search_config\",\"names\":[\"SearchConfig\"]}}"}, {"id": "metagpt/tools/search_engine.py:names:['SearchConfig']"}, {"id": "metagpt/tools/search_engine.py:module:metagpt.logs"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/search_engine.py:names:['logger']"}, {"id": "metagpt/tools/search_engine.py:module:metagpt.tools"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"id": "metagpt/tools/search_engine.py:names:['SearchEngineType']"}, {"id": "{\"lineno\":19,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkSearchEngine\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":162,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchEngine\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:_process_extra"}, {"id": "metagpt/tools/web_browser_engine.py:module:__future__"}, {"id": "metagpt/tools/web_browser_engine.py:names:['annotations']"}, {"id": "metagpt/tools/web_browser_engine.py:importlib"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Coroutine\",\"Optional\",\"Union\",\"overload\"]}}"}, {"id": "metagpt/tools/web_browser_engine.py:names:['Any', 'Callable', 'Coroutine', 'Optional', 'Union', 'overload']"}, {"id": "metagpt/tools/web_browser_engine.py:module:pydantic"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"model_validator\"]}}"}, {"id": "metagpt/tools/web_browser_engine.py:names:['BaseModel', 'ConfigDict', 'model_validator']"}, {"id": "metagpt/tools/web_browser_engine.py:module:metagpt.configs.browser_config"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.browser_config\",\"names\":[\"BrowserConfig\"]}}"}, {"id": "metagpt/tools/web_browser_engine.py:names:['BrowserConfig']"}, {"id": "metagpt/tools/web_browser_engine.py:module:metagpt.tools"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"id": "metagpt/tools/web_browser_engine.py:names:['WebBrowserEngineType']"}, {"id": "metagpt/tools/web_browser_engine.py:module:metagpt.utils.parse_html"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"id": "metagpt/tools/web_browser_engine.py:names:['WebPage']"}, {"id": "{\"lineno\":15,\"end_lineno\":115,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowserEngine\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:_process_response"}, {"id": "metagpt/tools/search_engine_serper.py:ast.Constant:\n@Time : 2023/5/23 18:27\n@Author : alexanderwu\n@File : search_engine_serpapi.py\n"}, {"id": "metagpt/tools/search_engine_serper.py:json"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serper.py:warnings"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serper.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"id": "metagpt/tools/search_engine_serper.py:names:['Any', 'Dict', 'Optional', 'Tuple']"}, {"id": "metagpt/tools/search_engine_serper.py:aiohttp"}, {"id": "metagpt/tools/search_engine_serper.py:module:pydantic"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"id": "metagpt/tools/search_engine_serper.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']"}, {"id": "{\"lineno\":16,\"end_lineno\":115,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerperWrapper\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serper.py:__name__:__main__"}, {"id": "{\"lineno\":118,\"end_lineno\":121,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/moderation.py:Moderation:__init__"}, {"id": "metagpt/tools/moderation.py:ast.Constant:\n@Time : 2023/9/26 14:27\n@Author : zhanglei\n@File : moderation.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/26 14:27\\n@Author : zhanglei\\n@File : moderation.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/moderation.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"id": "metagpt/tools/moderation.py:names:['Union']"}, {"id": "metagpt/tools/moderation.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/tools/moderation.py:names:['BaseLLM']"}, {"id": "{\"lineno\":13,\"end_lineno\":40,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Moderation\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_registry.py:register_tool"}, {"id": "metagpt/tools/tool_registry.py:make_schema"}, {"id": "metagpt/tools/tool_registry.py:validate_tool_names"}, {"id": "metagpt/tools/tool_registry.py:TOOL_REGISTRY"}, {"id": "metagpt/tools/tool_registry.py:ast.Constant:\n@Time : 2023/01/12 17:07\n@Author : garylin2099\n@File : tool_registry.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/01/12 17:07\\n@Author : garylin2099\\n@File : tool_registry.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_registry.py:module:__future__"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/tools/tool_registry.py:names:['annotations']"}, {"id": "metagpt/tools/tool_registry.py:inspect"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"inspect\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_registry.py:os"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_registry.py:re"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_registry.py:module:collections"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"id": "metagpt/tools/tool_registry.py:names:['defaultdict']"}, {"id": "metagpt/tools/tool_registry.py:yaml"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_registry.py:module:pydantic"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"field_validator\"]}}"}, {"id": "metagpt/tools/tool_registry.py:names:['BaseModel', 'field_validator']"}, {"id": "metagpt/tools/tool_registry.py:module:metagpt.const"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TOOL_SCHEMA_PATH\"]}}"}, {"id": "metagpt/tools/tool_registry.py:names:['TOOL_SCHEMA_PATH']"}, {"id": "metagpt/tools/tool_registry.py:module:metagpt.logs"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/tool_registry.py:names:['logger']"}, {"id": "metagpt/tools/tool_registry.py:module:metagpt.tools.tool_convert"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_convert\",\"names\":[\"convert_code_to_tool_schema\"]}}"}, {"id": "metagpt/tools/tool_registry.py:names:['convert_code_to_tool_schema']"}, {"id": "metagpt/tools/tool_registry.py:module:metagpt.tools.tool_data_type"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_data_type\",\"names\":[\"Tool\",\"ToolSchema\",\"ToolTypeDef\"]}}"}, {"id": "metagpt/tools/tool_registry.py:names:['Tool', 'ToolSchema', 'ToolTypeDef']"}, {"id": "metagpt/tools/tool_registry.py:module:metagpt.tools.tool_type"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"id": "metagpt/tools/tool_registry.py:names:['ToolType']"}, {"id": "{\"lineno\":25,\"end_lineno\":98,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolRegistry\"],\"properties\":{}}"}, {"id": "{\"lineno\":102,\"end_lineno\":102,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_REGISTRY\"],\"properties\":{}}"}, {"id": "{\"lineno\":105,\"end_lineno\":126,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_tool\"],\"properties\":{}}"}, {"id": "{\"lineno\":129,\"end_lineno\":142,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"make_schema\"],\"properties\":{}}"}, {"id": "{\"lineno\":145,\"end_lineno\":155,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"validate_tool_names\"],\"properties\":{}}"}, {"id": "metagpt/tools/__init__.py"}, {"id": "metagpt/tools/__init__.py:SearchEngineType"}, {"id": "metagpt/tools/__init__.py:WebBrowserEngineType"}, {"id": "metagpt/tools/__init__.py:WebBrowserEngineType:__missing__"}, {"id": "metagpt/tools/__init__.py:_"}, {"id": "metagpt/tools/__init__.py:ast.Constant:\n@Time : 2023/4/29 15:35\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:35\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/__init__.py:module:enum"}, {"id": "metagpt/tools/__init__.py:names:['Enum']"}, {"id": "metagpt/tools/__init__.py:module:metagpt.tools"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"libs\"]}}"}, {"id": "metagpt/tools/__init__.py:names:['libs']"}, {"id": "metagpt/tools/__init__.py:module:metagpt.tools.tool_registry"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"TOOL_REGISTRY\"]}}"}, {"id": "metagpt/tools/__init__.py:names:['TOOL_REGISTRY']"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"_\"],\"properties\":{}}"}, {"id": "{\"lineno\":16,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchEngineType\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowserEngineType\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:safe_google_results"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:__future__"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['annotations']"}, {"id": "metagpt/tools/search_engine_googleapi.py:asyncio"}, {"id": "metagpt/tools/search_engine_googleapi.py:json"}, {"id": "metagpt/tools/search_engine_googleapi.py:warnings"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:concurrent"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['futures']"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['Optional']"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:urllib.parse"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlparse\"]}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['urlparse']"}, {"id": "metagpt/tools/search_engine_googleapi.py:httplib2"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"httplib2\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:pydantic"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"model_validator\"]}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['BaseModel', 'ConfigDict', 'model_validator']"}, {"id": "{\"lineno\":24,\"end_lineno\":109,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GoogleAPIWrapper\"],\"properties\":{}}"}, {"id": "{\"lineno\":112,\"end_lineno\":125,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"safe_google_results\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:__name__:__main__"}, {"id": "{\"lineno\":128,\"end_lineno\":131,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_type.py:ToolType:__missing__"}, {"id": "metagpt/tools/tool_type.py:module:enum"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/tools/tool_type.py:names:['Enum']"}, {"id": "metagpt/tools/tool_type.py:module:metagpt.prompts.tool_types"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.tool_types\",\"names\":[\"DATA_PREPROCESS_PROMPT\",\"FEATURE_ENGINEERING_PROMPT\",\"IMAGE2WEBPAGE_PROMPT\",\"MODEL_EVALUATE_PROMPT\",\"MODEL_TRAIN_PROMPT\"]}}"}, {"id": "metagpt/tools/tool_type.py:names:['DATA_PREPROCESS_PROMPT', 'FEATURE_ENGINEERING_PROMPT', 'IMAGE2WEBPAGE_PROMPT', 'MODEL_EVALUATE_PROMPT', 'MODEL_TRAIN_PROMPT']"}, {"id": "metagpt/tools/tool_type.py:module:metagpt.tools.tool_data_type"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_data_type\",\"names\":[\"ToolTypeDef\"]}}"}, {"id": "metagpt/tools/tool_type.py:names:['ToolTypeDef']"}, {"id": "{\"lineno\":13,\"end_lineno\":55,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolType\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:__init__"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_run_precheck"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_scrape_website"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:__init__"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:_gen_get_driver_func"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:_webdriver_manager_types"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:__future__"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['annotations']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:asyncio"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:importlib"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:concurrent"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['futures']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:copy"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['deepcopy']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Literal\",\"Optional\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['Callable', 'Literal', 'Optional']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"PrivateAttr\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['BaseModel', 'ConfigDict', 'Field', 'PrivateAttr']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.common.by"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.common.by\",\"names\":[\"By\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['By']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.support"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support\",\"names\":[\"expected_conditions as EC\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['expected_conditions as EC']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.support.wait"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support.wait\",\"names\":[\"WebDriverWait\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['WebDriverWait']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:webdriver_manager.core.download_manager"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.download_manager\",\"names\":[\"WDMDownloadManager\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['WDMDownloadManager']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:webdriver_manager.core.http"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.http\",\"names\":[\"WDMHttpClient\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['WDMHttpClient']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:metagpt.utils.parse_html"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['WebPage']"}, {"id": "{\"lineno\":22,\"end_lineno\":88,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SeleniumWrapper\"],\"properties\":{}}"}, {"id": "{\"lineno\":91,\"end_lineno\":96,\"type_name\":\"ast.Assign\",\"tokens\":[\"_webdriver_manager_types\"],\"properties\":{}}"}, {"id": "{\"lineno\":99,\"end_lineno\":107,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WDMHttpProxyClient\"],\"properties\":{}}"}, {"id": "{\"lineno\":110,\"end_lineno\":134,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_gen_get_driver_func\"],\"properties\":{}}"}, {"id": "metagpt/tools/openapi_v3_hello.py"}, {"id": "metagpt/tools/openapi_v3_hello.py:post_greeting"}, {"id": "metagpt/tools/openapi_v3_hello.py:ast.Constant:\n@Time : 2023/5/2 16:03\n@Author : mashenquan\n@File : openapi_v3_hello.py\n@Desc : Implement the OpenAPI Specification 3.0 demo and use the following command to test the HTTP service:\n\n curl -X 'POST' 'http://localhost:8082/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\n"}, {"id": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/2 16:03\\n@Author : mashenquan\\n@File : openapi_v3_hello.py\\n@Desc : Implement the OpenAPI Specification 3.0 demo and use the following command to test the HTTP service:\\n\\n curl -X 'POST' 'http://localhost:8082/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/openapi_v3_hello.py:module:pathlib"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/tools/openapi_v3_hello.py:names:['Path']"}, {"id": "metagpt/tools/openapi_v3_hello.py:connexion"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"connexion\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":22,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"post_greeting\"],\"properties\":{}}"}, {"id": "metagpt/tools/openapi_v3_hello.py:__name__:__main__"}, {"id": "{\"lineno\":25,\"end_lineno\":29,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:__init__"}, {"id": "metagpt/tools/azure_tts.py:oas3_azsure_tts"}, {"id": "metagpt/tools/azure_tts.py:ast.Constant:\n@Time : 2023/6/9 22:22\n@Author : Leo Xiao\n@File : azure_tts.py\n@Modified by: mashenquan, 2023/8/17. Azure TTS OAS3 api, which provides text-to-speech functionality\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/9 22:22\\n@Author : Leo Xiao\\n@File : azure_tts.py\\n@Modified by: mashenquan, 2023/8/17. Azure TTS OAS3 api, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/azure_tts.py:base64"}, {"id": "metagpt/tools/azure_tts.py:module:pathlib"}, {"id": "metagpt/tools/azure_tts.py:names:['Path']"}, {"id": "metagpt/tools/azure_tts.py:module:uuid"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"id": "metagpt/tools/azure_tts.py:names:['uuid4']"}, {"id": "metagpt/tools/azure_tts.py:aiofiles"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/tools/azure_tts.py:module:azure.cognitiveservices.speech"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"azure.cognitiveservices.speech\",\"names\":[\"AudioConfig\",\"SpeechConfig\",\"SpeechSynthesizer\"]}}"}, {"id": "metagpt/tools/azure_tts.py:names:['AudioConfig', 'SpeechConfig', 'SpeechSynthesizer']"}, {"id": "metagpt/tools/azure_tts.py:module:metagpt.logs"}, {"id": "metagpt/tools/azure_tts.py:names:['logger']"}, {"id": "{\"lineno\":19,\"end_lineno\":56,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AzureTTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":100,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_azsure_tts\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_convert.py"}, {"id": "metagpt/tools/tool_convert.py:convert_code_to_tool_schema"}, {"id": "metagpt/tools/tool_convert.py:function_docstring_to_schema"}, {"id": "metagpt/tools/tool_convert.py:docstring_to_schema"}, {"id": "metagpt/tools/tool_convert.py:get_class_method_docstring"}, {"id": "metagpt/tools/tool_convert.py:inspect"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"inspect\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_convert.py:module:metagpt.utils.parse_docstring"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_docstring\",\"names\":[\"GoogleDocstringParser\",\"remove_spaces\"]}}"}, {"id": "metagpt/tools/tool_convert.py:names:['GoogleDocstringParser', 'remove_spaces']"}, {"id": "{\"lineno\":6,\"end_lineno\":23,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"convert_code_to_tool_schema\"],\"properties\":{}}"}, {"id": "{\"lineno\":26,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"function_docstring_to_schema\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":73,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"docstring_to_schema\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":83,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_class_method_docstring\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:__init__"}, {"id": "metagpt/tools/openai_text_to_image.py:oas3_openai_text_to_image"}, {"id": "metagpt/tools/openai_text_to_image.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : openai_text_to_image.py\n@Desc : OpenAI Text-to-Image OAS3 api, which provides text-to-image functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : openai_text_to_image.py\\n@Desc : OpenAI Text-to-Image OAS3 api, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_image.py:aiohttp"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_image.py:requests"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_image.py:module:metagpt.logs"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/openai_text_to_image.py:names:['logger']"}, {"id": "metagpt/tools/openai_text_to_image.py:module:metagpt.provider.base_llm"}, {"id": "metagpt/tools/openai_text_to_image.py:names:['BaseLLM']"}, {"id": "{\"lineno\":17,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIText2Image\"],\"properties\":{}}"}, {"id": "{\"lineno\":57,\"end_lineno\":67,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_openai_text_to_image\"],\"properties\":{}}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:__init__"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:__para_to_str"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:_para_to_str"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:_generate_ut"}, {"id": "metagpt/tools/ut_writer.py:ICL_SAMPLE"}, {"id": "metagpt/tools/ut_writer.py:ACT_PROMPT_PREFIX"}, {"id": "metagpt/tools/ut_writer.py:YFT_PROMPT_PREFIX"}, {"id": "metagpt/tools/ut_writer.py:OCR_API_DOC"}, {"id": "metagpt/tools/ut_writer.py:json"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/ut_writer.py:module:pathlib"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/tools/ut_writer.py:names:['Path']"}, {"id": "metagpt/tools/ut_writer.py:module:metagpt.config2"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/tools/ut_writer.py:names:['config']"}, {"id": "metagpt/tools/ut_writer.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM as GPTAPI\"]}}"}, {"id": "metagpt/tools/ut_writer.py:names:['OpenAILLM as GPTAPI']"}, {"id": "metagpt/tools/ut_writer.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"awrite\"]}}"}, {"id": "metagpt/tools/ut_writer.py:names:['awrite']"}, {"id": "{\"lineno\":11,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"ICL_SAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":67,\"end_lineno\":70,\"type_name\":\"ast.Assign\",\"tokens\":[\"ACT_PROMPT_PREFIX\"],\"properties\":{}}"}, {"id": "{\"lineno\":72,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"YFT_PROMPT_PREFIX\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"OCR_API_DOC\"],\"properties\":{}}"}, {"id": "{\"lineno\":104,\"end_lineno\":287,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UTGenerator\"],\"properties\":{}}"}, {"id": "metagpt/tools/translator.py:prompt"}, {"id": "metagpt/tools/translator.py:ast.Constant:\n@Time : 2023/4/29 15:36\n@Author : alexanderwu\n@File : translator.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:36\\n@Author : alexanderwu\\n@File : translator.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":9,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"prompt\"],\"properties\":{}}"}, {"id": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Translator\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:__init__"}, {"id": "metagpt/tools/metagpt_text_to_image.py:oas3_metagpt_text_to_image"}, {"id": "metagpt/tools/metagpt_text_to_image.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : metagpt_text_to_image.py\n@Desc : MetaGPT Text-to-Image OAS3 api, which provides text-to-image functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : metagpt_text_to_image.py\\n@Desc : MetaGPT Text-to-Image OAS3 api, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:base64"}, {"id": "metagpt/tools/metagpt_text_to_image.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:names:['Dict', 'List']"}, {"id": "metagpt/tools/metagpt_text_to_image.py:aiohttp"}, {"id": "metagpt/tools/metagpt_text_to_image.py:requests"}, {"id": "metagpt/tools/metagpt_text_to_image.py:module:pydantic"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:names:['BaseModel']"}, {"id": "metagpt/tools/metagpt_text_to_image.py:module:metagpt.logs"}, {"id": "metagpt/tools/metagpt_text_to_image.py:names:['logger']"}, {"id": "{\"lineno\":19,\"end_lineno\":81,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MetaGPTText2Image\"],\"properties\":{}}"}, {"id": "{\"lineno\":85,\"end_lineno\":95,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_metagpt_text_to_image\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:__init__"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:_create_url"}, {"id": "metagpt/tools/iflytek_tts.py:oas3_iflytek_tts"}, {"id": "metagpt/tools/iflytek_tts.py:DEFAULT_IFLYTEK_VOICE"}, {"id": "metagpt/tools/iflytek_tts.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : iflytek_tts.py\n@Desc : iFLYTEK TTS OAS3 api, which provides text-to-speech functionality\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : iflytek_tts.py\\n@Desc : iFLYTEK TTS OAS3 api, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:base64"}, {"id": "metagpt/tools/iflytek_tts.py:hashlib"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:hmac"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"hmac\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:json"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:uuid"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:module:datetime"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['datetime']"}, {"id": "metagpt/tools/iflytek_tts.py:module:enum"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['Enum']"}, {"id": "metagpt/tools/iflytek_tts.py:module:pathlib"}, {"id": "metagpt/tools/iflytek_tts.py:names:['Path']"}, {"id": "metagpt/tools/iflytek_tts.py:module:time"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['mktime']"}, {"id": "metagpt/tools/iflytek_tts.py:module:typing"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['Optional']"}, {"id": "metagpt/tools/iflytek_tts.py:module:urllib.parse"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['urlencode']"}, {"id": "metagpt/tools/iflytek_tts.py:module:wsgiref.handlers"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['format_date_time']"}, {"id": "metagpt/tools/iflytek_tts.py:aiofiles"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:websockets as websockets"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"websockets as websockets\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:module:pydantic"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['BaseModel']"}, {"id": "metagpt/tools/iflytek_tts.py:module:metagpt.logs"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['logger']"}, {"id": "{\"lineno\":29,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTSStatus\"],\"properties\":{}}"}, {"id": "{\"lineno\":35,\"end_lineno\":38,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AudioData\"],\"properties\":{}}"}, {"id": "{\"lineno\":41,\"end_lineno\":45,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTSResponse\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_IFLYTEK_VOICE\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":113,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":117,\"end_lineno\":143,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_iflytek_tts\"],\"properties\":{}}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:__init__"}, {"id": "metagpt/tools/prompt_writer.py:WikiHowTemplate:__init__"}, {"id": "metagpt/tools/prompt_writer.py:EnronTemplate:__init__"}, {"id": "metagpt/tools/prompt_writer.py:BEAGECTemplate:__init__"}, {"id": "metagpt/tools/prompt_writer.py:ast.Constant:\n@Time : 2023/5/2 16:03\n@Author : alexanderwu\n@File : prompt_writer.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/2 16:03\\n@Author : alexanderwu\\n@File : prompt_writer.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/prompt_writer.py:module:typing"}, {"id": "metagpt/tools/prompt_writer.py:names:['Union']"}, {"id": "{\"lineno\":11,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GPTPromptGenerator\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WikiHowTemplate\"],\"properties\":{}}"}, {"id": "{\"lineno\":77,\"end_lineno\":92,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnronTemplate\"],\"properties\":{}}"}, {"id": "{\"lineno\":95,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BEAGECTemplate\"],\"properties\":{}}"}, {"id": "metagpt/tools/tool_data_type.py:module:pydantic"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/tools/tool_data_type.py:names:['BaseModel']"}, {"id": "{\"lineno\":4,\"end_lineno\":7,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolTypeDef\"],\"properties\":{}}"}, {"id": "{\"lineno\":10,\"end_lineno\":11,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolSchema\"],\"properties\":{}}"}, {"id": "{\"lineno\":14,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Tool\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCount:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCross:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:CatCross:_cross_two"}, {"id": "metagpt/tools/libs/feature_engineering.py:GroupStat:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:SplitBins:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:__init__"}, {"id": "metagpt/tools/libs/feature_engineering.py:TOOL_TYPE"}, {"id": "metagpt/tools/libs/feature_engineering.py:module:__future__"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:names:['annotations']"}, {"id": "metagpt/tools/libs/feature_engineering.py:itertools"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"itertools\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:numpy as np"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"numpy as np\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:pandas as pd"}, {"id": "metagpt/tools/libs/feature_engineering.py:module:joblib"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"joblib\",\"names\":[\"Parallel\",\"delayed\"]}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:names:['Parallel', 'delayed']"}, {"id": "metagpt/tools/libs/feature_engineering.py:module:pandas.core.dtypes.common"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pandas.core.dtypes.common\",\"names\":[\"is_object_dtype\"]}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:names:['is_object_dtype']"}, {"id": "metagpt/tools/libs/feature_engineering.py:module:sklearn.feature_selection"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.feature_selection\",\"names\":[\"VarianceThreshold\"]}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:names:['VarianceThreshold']"}, {"id": "metagpt/tools/libs/feature_engineering.py:module:sklearn.model_selection"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.model_selection\",\"names\":[\"KFold\"]}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:names:['KFold']"}, {"id": "metagpt/tools/libs/feature_engineering.py:module:sklearn.preprocessing"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.preprocessing\",\"names\":[\"KBinsDiscretizer\",\"PolynomialFeatures\"]}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:names:['KBinsDiscretizer', 'PolynomialFeatures']"}, {"id": "metagpt/tools/libs/feature_engineering.py:module:metagpt.tools.libs.data_preprocess"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.libs.data_preprocess\",\"names\":[\"MLProcess\"]}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:names:['MLProcess']"}, {"id": "metagpt/tools/libs/feature_engineering.py:module:metagpt.tools.tool_registry"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"id": "metagpt/tools/libs/feature_engineering.py:names:['register_tool']"}, {"id": "metagpt/tools/libs/feature_engineering.py:module:metagpt.tools.tool_type"}, {"id": "metagpt/tools/libs/feature_engineering.py:names:['ToolType']"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_TYPE\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":67,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PolynomialExpansion\"],\"properties\":{}}"}, {"id": "{\"lineno\":71,\"end_lineno\":92,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CatCount\"],\"properties\":{}}"}, {"id": "{\"lineno\":96,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TargetMeanEncoder\"],\"properties\":{}}"}, {"id": "{\"lineno\":123,\"end_lineno\":159,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"KFoldTargetMeanEncoder\"],\"properties\":{}}"}, {"id": "{\"lineno\":163,\"end_lineno\":216,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CatCross\"],\"properties\":{}}"}, {"id": "{\"lineno\":220,\"end_lineno\":248,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GroupStat\"],\"properties\":{}}"}, {"id": "{\"lineno\":252,\"end_lineno\":276,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SplitBins\"],\"properties\":{}}"}, {"id": "{\"lineno\":280,\"end_lineno\":316,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExtractTimeComps\"],\"properties\":{}}"}, {"id": "{\"lineno\":320,\"end_lineno\":348,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeneralSelection\"],\"properties\":{}}"}, {"id": "{\"lineno\":353,\"end_lineno\":403,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TreeBasedSelection\"],\"properties\":{}}"}, {"id": "{\"lineno\":407,\"end_lineno\":435,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VarianceBasedSelection\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:__init__"}, {"id": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:__init__"}, {"id": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:__init__"}, {"id": "metagpt/tools/libs/data_preprocess.py:StandardScale:__init__"}, {"id": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:__init__"}, {"id": "metagpt/tools/libs/data_preprocess.py:RobustScale:__init__"}, {"id": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:__init__"}, {"id": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:__init__"}, {"id": "metagpt/tools/libs/data_preprocess.py:LabelEncode:__init__"}, {"id": "metagpt/tools/libs/data_preprocess.py:get_column_info"}, {"id": "metagpt/tools/libs/data_preprocess.py:TOOL_TYPE"}, {"id": "metagpt/tools/libs/data_preprocess.py:module:__future__"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/tools/libs/data_preprocess.py:names:['annotations']"}, {"id": "metagpt/tools/libs/data_preprocess.py:json"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/data_preprocess.py:numpy as np"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"numpy as np\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/data_preprocess.py:pandas as pd"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/data_preprocess.py:module:sklearn.impute"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.impute\",\"names\":[\"SimpleImputer\"]}}"}, {"id": "metagpt/tools/libs/data_preprocess.py:names:['SimpleImputer']"}, {"id": "metagpt/tools/libs/data_preprocess.py:module:sklearn.preprocessing"}, {"id": "{\"lineno\":8,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.preprocessing\",\"names\":[\"LabelEncoder\",\"MaxAbsScaler\",\"MinMaxScaler\",\"OneHotEncoder\",\"OrdinalEncoder\",\"RobustScaler\",\"StandardScaler\"]}}"}, {"id": "metagpt/tools/libs/data_preprocess.py:names:['LabelEncoder', 'MaxAbsScaler', 'MinMaxScaler', 'OneHotEncoder', 'OrdinalEncoder', 'RobustScaler', 'StandardScaler']"}, {"id": "metagpt/tools/libs/data_preprocess.py:module:metagpt.tools.tool_registry"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"id": "metagpt/tools/libs/data_preprocess.py:names:['register_tool']"}, {"id": "metagpt/tools/libs/data_preprocess.py:module:metagpt.tools.tool_type"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"id": "metagpt/tools/libs/data_preprocess.py:names:['ToolType']"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_TYPE\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":57,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MLProcess\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":85,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DataPreprocessTool\"],\"properties\":{}}"}, {"id": "{\"lineno\":89,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FillMissingValue\"],\"properties\":{}}"}, {"id": "{\"lineno\":110,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MinMaxScale\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":128,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"StandardScale\"],\"properties\":{}}"}, {"id": "{\"lineno\":132,\"end_lineno\":139,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MaxAbsScale\"],\"properties\":{}}"}, {"id": "{\"lineno\":143,\"end_lineno\":150,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RobustScale\"],\"properties\":{}}"}, {"id": "{\"lineno\":154,\"end_lineno\":161,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OrdinalEncode\"],\"properties\":{}}"}, {"id": "{\"lineno\":165,\"end_lineno\":180,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OneHotEncode\"],\"properties\":{}}"}, {"id": "{\"lineno\":184,\"end_lineno\":216,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LabelEncode\"],\"properties\":{}}"}, {"id": "{\"lineno\":219,\"end_lineno\":249,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_column_info\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/__init__.py"}, {"id": "metagpt/tools/libs/__init__.py:_"}, {"id": "metagpt/tools/libs/__init__.py:module:metagpt.tools.libs"}, {"id": "{\"lineno\":7,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.libs\",\"names\":[\"data_preprocess\",\"feature_engineering\",\"sd_engine\",\"gpt_v_generator\",\"web_scraping\"]}}"}, {"id": "metagpt/tools/libs/__init__.py:names:['data_preprocess', 'feature_engineering', 'sd_engine', 'gpt_v_generator', 'web_scraping']"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Assign\",\"tokens\":[\"_\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:__init__"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:ANALYZE_LAYOUT_PROMPT"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:GENERATE_PROMPT"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:ast.Constant:\n@Time : 2024/01/12\n@Author : mannaandpoem\n@File : gpt_v_generator.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/01/12\\n@Author : mannaandpoem\\n@File : gpt_v_generator.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:os"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:module:pathlib"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:names:['Path']"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:module:metagpt.const"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_WORKSPACE_ROOT\"]}}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:names:['DEFAULT_WORKSPACE_ROOT']"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:module:metagpt.tools.tool_registry"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:names:['register_tool']"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:module:metagpt.tools.tool_type"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:names:['ToolType']"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"encode_image\"]}}"}, {"id": "metagpt/tools/libs/gpt_v_generator.py:names:['encode_image']"}, {"id": "{\"lineno\":16,\"end_lineno\":19,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANALYZE_LAYOUT_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERATE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":124,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GPTvGenerator\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/sd_engine.py:SDEngine:__init__"}, {"id": "metagpt/tools/libs/sd_engine.py:decode_base64_to_image"}, {"id": "metagpt/tools/libs/sd_engine.py:batch_decode_base64_to_image"}, {"id": "metagpt/tools/libs/sd_engine.py:payload"}, {"id": "metagpt/tools/libs/sd_engine.py:default_negative_prompt"}, {"id": "metagpt/tools/libs/sd_engine.py:module:__future__"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/tools/libs/sd_engine.py:names:['annotations']"}, {"id": "metagpt/tools/libs/sd_engine.py:base64"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/sd_engine.py:hashlib"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/sd_engine.py:io"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"io\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/sd_engine.py:json"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/sd_engine.py:module:os.path"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"os.path\",\"names\":[\"join\"]}}"}, {"id": "metagpt/tools/libs/sd_engine.py:names:['join']"}, {"id": "metagpt/tools/libs/sd_engine.py:requests"}, {"id": "metagpt/tools/libs/sd_engine.py:module:aiohttp"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp\",\"names\":[\"ClientSession\"]}}"}, {"id": "metagpt/tools/libs/sd_engine.py:names:['ClientSession']"}, {"id": "metagpt/tools/libs/sd_engine.py:module:PIL"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"PIL\",\"names\":[\"Image\",\"PngImagePlugin\"]}}"}, {"id": "metagpt/tools/libs/sd_engine.py:names:['Image', 'PngImagePlugin']"}, {"id": "metagpt/tools/libs/sd_engine.py:module:metagpt.const"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"SD_OUTPUT_FILE_REPO\",\"SOURCE_ROOT\"]}}"}, {"id": "metagpt/tools/libs/sd_engine.py:names:['SD_OUTPUT_FILE_REPO', 'SOURCE_ROOT']"}, {"id": "metagpt/tools/libs/sd_engine.py:module:metagpt.logs"}, {"id": "metagpt/tools/libs/sd_engine.py:names:['logger']"}, {"id": "metagpt/tools/libs/sd_engine.py:module:metagpt.tools.tool_registry"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"id": "metagpt/tools/libs/sd_engine.py:names:['register_tool']"}, {"id": "metagpt/tools/libs/sd_engine.py:module:metagpt.tools.tool_type"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"id": "metagpt/tools/libs/sd_engine.py:names:['ToolType']"}, {"id": "{\"lineno\":23,\"end_lineno\":52,\"type_name\":\"ast.Assign\",\"tokens\":[\"payload\"],\"properties\":{}}"}, {"id": "{\"lineno\":54,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"default_negative_prompt\"],\"properties\":{}}"}, {"id": "{\"lineno\":61,\"end_lineno\":169,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SDEngine\"],\"properties\":{}}"}, {"id": "{\"lineno\":172,\"end_lineno\":177,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"decode_base64_to_image\"],\"properties\":{}}"}, {"id": "{\"lineno\":180,\"end_lineno\":183,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"batch_decode_base64_to_image\"],\"properties\":{}}"}, {"id": "metagpt/tools/libs/web_scraping.py"}, {"id": "metagpt/tools/libs/web_scraping.py:scrape_web_playwright"}, {"id": "metagpt/tools/libs/web_scraping.py:module:metagpt.tools.tool_registry"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"id": "metagpt/tools/libs/web_scraping.py:names:['register_tool']"}, {"id": "metagpt/tools/libs/web_scraping.py:module:metagpt.tools.tool_type"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"id": "metagpt/tools/libs/web_scraping.py:names:['ToolType']"}, {"id": "metagpt/tools/libs/web_scraping.py:module:metagpt.tools.web_browser_engine_playwright"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.web_browser_engine_playwright\",\"names\":[\"PlaywrightWrapper\"]}}"}, {"id": "metagpt/tools/libs/web_scraping.py:names:['PlaywrightWrapper']"}, {"id": "{\"lineno\":7,\"end_lineno\":21,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"scrape_web_playwright\"],\"properties\":{}}"}, {"id": "metagpt/memory/memory.py:ast.Constant:\n@Time : 2023/5/20 12:15\n@Author : alexanderwu\n@File : memory.py\n@Modified By: mashenquan, 2023-11-1. According to RFC 116: Updated the type of index key.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/20 12:15\\n@Author : alexanderwu\\n@File : memory.py\\n@Modified By: mashenquan, 2023-11-1. According to RFC 116: Updated the type of index key.\\n\"],\"properties\":{}}"}, {"id": "metagpt/memory/memory.py:module:collections"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"id": "metagpt/memory/memory.py:names:['defaultdict']"}, {"id": "metagpt/memory/memory.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"DefaultDict\",\"Iterable\",\"Set\"]}}"}, {"id": "metagpt/memory/memory.py:names:['DefaultDict', 'Iterable', 'Set']"}, {"id": "metagpt/memory/memory.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"SerializeAsAny\"]}}"}, {"id": "metagpt/memory/memory.py:names:['BaseModel', 'Field', 'SerializeAsAny']"}, {"id": "metagpt/memory/memory.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"IGNORED_MESSAGE_ID\"]}}"}, {"id": "metagpt/memory/memory.py:names:['IGNORED_MESSAGE_ID']"}, {"id": "metagpt/memory/memory.py:module:metagpt.schema"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/memory/memory.py:names:['Message']"}, {"id": "metagpt/memory/memory.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\"]}}"}, {"id": "metagpt/memory/memory.py:names:['any_to_str', 'any_to_str_set']"}, {"id": "{\"lineno\":19,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Memory\"],\"properties\":{}}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_openai_summarize"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_summarize"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_is_related"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_openai_is_related"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_rewrite"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_openai_rewrite"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_summarize"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_get_summary"}, {"id": "metagpt/memory/brain_memory.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : brain_memory.py\n@Desc : Used by AgentStore. Used for long-term storage and automatic compression.\n@Modified By: mashenquan, 2023/9/4. + redis memory cache.\n@Modified By: mashenquan, 2023/12/25. Simplify Functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : brain_memory.py\\n@Desc : Used by AgentStore. Used for long-term storage and automatic compression.\\n@Modified By: mashenquan, 2023/9/4. + redis memory cache.\\n@Modified By: mashenquan, 2023/12/25. Simplify Functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/memory/brain_memory.py:json"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/memory/brain_memory.py:re"}, {"id": "metagpt/memory/brain_memory.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['Dict', 'List', 'Optional']"}, {"id": "metagpt/memory/brain_memory.py:module:pydantic"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.config2"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['config']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.const"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_MAX_TOKENS\",\"DEFAULT_TOKEN_SIZE\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['DEFAULT_MAX_TOKENS', 'DEFAULT_TOKEN_SIZE']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.logs"}, {"id": "metagpt/memory/brain_memory.py:names:['logger']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.provider"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"MetaGPTLLM\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['MetaGPTLLM']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['BaseLLM']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.schema"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"SimpleMessage\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['Message', 'SimpleMessage']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.utils.redis"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.redis\",\"names\":[\"Redis\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['Redis']"}, {"id": "{\"lineno\":26,\"end_lineno\":338,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BrainMemory\"],\"properties\":{}}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:__init__"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:_load"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:_get_index_and_store_fname"}, {"id": "metagpt/memory/memory_storage.py:ast.Constant:\n@Desc : the implement of memory storage\n"}, {"id": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Desc : the implement of memory storage\\n\"],\"properties\":{}}"}, {"id": "metagpt/memory/memory_storage.py:module:pathlib"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['Path']"}, {"id": "metagpt/memory/memory_storage.py:module:typing"}, {"id": "metagpt/memory/memory_storage.py:names:['Optional']"}, {"id": "metagpt/memory/memory_storage.py:module:langchain.embeddings"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['OpenAIEmbeddings']"}, {"id": "metagpt/memory/memory_storage.py:module:langchain.vectorstores.faiss"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores.faiss\",\"names\":[\"FAISS\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['FAISS']"}, {"id": "metagpt/memory/memory_storage.py:module:langchain_core.embeddings"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['Embeddings']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\",\"MEM_TTL\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['DATA_PATH', 'MEM_TTL']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.document_store.faiss_store"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['FaissStore']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.logs"}, {"id": "metagpt/memory/memory_storage.py:names:['logger']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.schema"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['Message']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.utils.serialize"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"deserialize_message\",\"serialize_message\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['deserialize_message', 'serialize_message']"}, {"id": "{\"lineno\":21,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MemoryStorage\"],\"properties\":{}}"}, {"id": "metagpt/memory/__init__.py"}, {"id": "metagpt/memory/__init__.py:__all__"}, {"id": "metagpt/memory/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:57\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "metagpt/memory/__init__.py:module:metagpt.memory.memory"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory\",\"names\":[\"Memory\"]}}"}, {"id": "metagpt/memory/__init__.py:names:['Memory']"}, {"id": "{\"lineno\":14,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/memory/longterm_memory.py:ast.Constant:\n@Desc : the implement of Long-term memory\n"}, {"id": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Desc : the implement of Long-term memory\\n\"],\"properties\":{}}"}, {"id": "metagpt/memory/longterm_memory.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['Optional']"}, {"id": "metagpt/memory/longterm_memory.py:module:pydantic"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['ConfigDict', 'Field']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.logs"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['logger']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.memory"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['Memory']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.memory.memory_storage"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory_storage\",\"names\":[\"MemoryStorage\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['MemoryStorage']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"RoleContext\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['RoleContext']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.schema"}, {"id": "metagpt/memory/longterm_memory.py:names:['Message']"}, {"id": "{\"lineno\":18,\"end_lineno\":77,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LongTermMemory\"],\"properties\":{}}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:__init__"}, {"id": "metagpt/document_store/qdrant_store.py:module:dataclasses"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"dataclasses\",\"names\":[\"dataclass\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['dataclass']"}, {"id": "metagpt/document_store/qdrant_store.py:module:typing"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['List']"}, {"id": "metagpt/document_store/qdrant_store.py:module:qdrant_client"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client\",\"names\":[\"QdrantClient\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['QdrantClient']"}, {"id": "metagpt/document_store/qdrant_store.py:module:qdrant_client.models"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client.models\",\"names\":[\"Filter\",\"PointStruct\",\"VectorParams\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['Filter', 'PointStruct', 'VectorParams']"}, {"id": "metagpt/document_store/qdrant_store.py:module:metagpt.document_store.base_store"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['BaseStore']"}, {"id": "{\"lineno\":11,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QdrantConnection\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":124,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QdrantStore\"],\"properties\":{}}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:__init__"}, {"id": "metagpt/document_store/chromadb_store.py:ast.Constant:\n@Time : 2023/5/29 14:46\n@Author : alexanderwu\n@File : chromadb_store.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/29 14:46\\n@Author : alexanderwu\\n@File : chromadb_store.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/chromadb_store.py:chromadb"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"chromadb\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ChromaStore\"],\"properties\":{}}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:__init__"}, {"id": "metagpt/document_store/lancedb_store.py:ast.Constant:\n@Time : 2023/8/9 15:42\n@Author : unkn-wn (Leon Yee)\n@File : lancedb_store.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/9 15:42\\n@Author : unkn-wn (Leon Yee)\\n@File : lancedb_store.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/lancedb_store.py:os"}, {"id": "metagpt/document_store/lancedb_store.py:shutil"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"id": "metagpt/document_store/lancedb_store.py:lancedb"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"lancedb\"],\"properties\":{}}"}, {"id": "{\"lineno\":14,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LanceStore\"],\"properties\":{}}"}, {"id": "metagpt/document_store/__init__.py"}, {"id": "metagpt/document_store/__init__.py:__all__"}, {"id": "metagpt/document_store/__init__.py:ast.Constant:\n@Time : 2023/5/25 10:20\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 10:20\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/__init__.py:module:metagpt.document_store.faiss_store"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"id": "metagpt/document_store/__init__.py:names:['FaissStore']"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:__init__"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:_load"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:_write"}, {"id": "metagpt/document_store/faiss_store.py:ast.Constant:\n@Time : 2023/5/25 10:20\n@Author : alexanderwu\n@File : faiss_store.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 10:20\\n@Author : alexanderwu\\n@File : faiss_store.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/faiss_store.py:asyncio"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/document_store/faiss_store.py:module:pathlib"}, {"id": "metagpt/document_store/faiss_store.py:names:['Path']"}, {"id": "metagpt/document_store/faiss_store.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['Optional']"}, {"id": "metagpt/document_store/faiss_store.py:module:langchain.vectorstores"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores\",\"names\":[\"FAISS\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['FAISS']"}, {"id": "metagpt/document_store/faiss_store.py:module:langchain_core.embeddings"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['Embeddings']"}, {"id": "metagpt/document_store/faiss_store.py:module:metagpt.document"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document\",\"names\":[\"IndexableDocument\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['IndexableDocument']"}, {"id": "metagpt/document_store/faiss_store.py:module:metagpt.document_store.base_store"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"LocalStore\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['LocalStore']"}, {"id": "metagpt/document_store/faiss_store.py:module:metagpt.logs"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['logger']"}, {"id": "metagpt/document_store/faiss_store.py:module:metagpt.utils.embedding"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.embedding\",\"names\":[\"get_embedding\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['get_embedding']"}, {"id": "{\"lineno\":21,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FaissStore\"],\"properties\":{}}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:__init__"}, {"id": "metagpt/document_store/base_store.py:LocalStore:_get_index_and_store_fname"}, {"id": "metagpt/document_store/base_store.py:LocalStore:_load"}, {"id": "metagpt/document_store/base_store.py:LocalStore:_write"}, {"id": "metagpt/document_store/base_store.py:ast.Constant:\n@Time : 2023/5/28 00:01\n@Author : alexanderwu\n@File : base_store.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/28 00:01\\n@Author : alexanderwu\\n@File : base_store.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/base_store.py:module:abc"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"id": "metagpt/document_store/base_store.py:names:['ABC', 'abstractmethod']"}, {"id": "metagpt/document_store/base_store.py:module:pathlib"}, {"id": "metagpt/document_store/base_store.py:names:['Path']"}, {"id": "{\"lineno\":12,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseStore\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LocalStore\"],\"properties\":{}}"}, {"id": "metagpt/provider/anthropic_api.py:Claude2:__init__"}, {"id": "metagpt/provider/anthropic_api.py:ast.Constant:\n@Time : 2023/7/21 11:15\n@Author : Leo Xiao\n@File : anthropic_api.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/21 11:15\\n@Author : Leo Xiao\\n@File : anthropic_api.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/anthropic_api.py:anthropic"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"anthropic\"],\"properties\":{}}"}, {"id": "metagpt/provider/anthropic_api.py:module:anthropic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anthropic\",\"names\":[\"Anthropic\",\"AsyncAnthropic\"]}}"}, {"id": "metagpt/provider/anthropic_api.py:names:['Anthropic', 'AsyncAnthropic']"}, {"id": "metagpt/provider/anthropic_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"id": "metagpt/provider/anthropic_api.py:names:['LLMConfig']"}, {"id": "{\"lineno\":15,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Claude2\"],\"properties\":{}}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init__"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init_gemini"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_user_msg"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_assistant_msg"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_const_kwargs"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion_stream"}, {"id": "metagpt/provider/google_gemini_api.py:module:typing"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['Optional', 'Union']"}, {"id": "metagpt/provider/google_gemini_api.py:google.generativeai as genai"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"google.generativeai as genai\"],\"properties\":{}}"}, {"id": "metagpt/provider/google_gemini_api.py:module:google.ai"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.ai\",\"names\":[\"generativelanguage as glm\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['generativelanguage as glm']"}, {"id": "metagpt/provider/google_gemini_api.py:module:google.generativeai.generative_models"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.generative_models\",\"names\":[\"GenerativeModel\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['GenerativeModel']"}, {"id": "metagpt/provider/google_gemini_api.py:module:google.generativeai.types"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types\",\"names\":[\"content_types\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['content_types']"}, {"id": "metagpt/provider/google_gemini_api.py:module:google.generativeai.types.generation_types"}, {"id": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types.generation_types\",\"names\":[\"AsyncGenerateContentResponse\",\"GenerateContentResponse\",\"GenerationConfig\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['AsyncGenerateContentResponse', 'GenerateContentResponse', 'GenerationConfig']"}, {"id": "metagpt/provider/google_gemini_api.py:module:tenacity"}, {"id": "{\"lineno\":16,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['log_llm_stream', 'logger']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['register_provider']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['log_and_reraise']"}, {"id": "{\"lineno\":31,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeminiGenerativeModel\"],\"properties\":{}}"}, {"id": "{\"lineno\":47,\"end_lineno\":136,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeminiLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_init_client"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_make_client_kwargs"}, {"id": "metagpt/provider/azure_openai_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : openai.py\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\n"}, {"id": "{\"lineno\":2,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : openai.py\\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/azure_openai_api.py:module:openai"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncAzureOpenAI\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['AsyncAzureOpenAI']"}, {"id": "metagpt/provider/azure_openai_api.py:module:openai._base_client"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['AsyncHttpxClientWrapper']"}, {"id": "metagpt/provider/azure_openai_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['LLMType']"}, {"id": "metagpt/provider/azure_openai_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['register_provider']"}, {"id": "metagpt/provider/azure_openai_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['OpenAILLM']"}, {"id": "{\"lineno\":18,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AzureOpenAILLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:__init__"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:_make_client_kwargs"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:_achat_completion_stream"}, {"id": "metagpt/provider/fireworks_api.py:MODEL_GRADE_TOKEN_COSTS"}, {"id": "metagpt/provider/fireworks_api.py:re"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/provider/fireworks_api.py:module:openai"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncStream\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['APIConnectionError', 'AsyncStream']"}, {"id": "metagpt/provider/fireworks_api.py:module:openai.types"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['CompletionUsage']"}, {"id": "metagpt/provider/fireworks_api.py:module:openai.types.chat"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletionChunk\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['ChatCompletionChunk']"}, {"id": "metagpt/provider/fireworks_api.py:module:tenacity"}, {"id": "{\"lineno\":10,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.logs"}, {"id": "metagpt/provider/fireworks_api.py:names:['logger']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['register_provider']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\",\"log_and_reraise\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['OpenAILLM', 'log_and_reraise']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['CostManager', 'Costs']"}, {"id": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"MODEL_GRADE_TOKEN_COSTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":32,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FireworksCostManager\"],\"properties\":{}}"}, {"id": "{\"lineno\":74,\"end_lineno\":123,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FireworksLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:__init__"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:__init_ollama"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_const_kwargs"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_decode_and_load"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion_stream"}, {"id": "metagpt/provider/ollama_api.py:json"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/provider/ollama_api.py:module:requests"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['ConnectionError']"}, {"id": "metagpt/provider/ollama_api.py:module:tenacity"}, {"id": "{\"lineno\":8,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.const"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"LLM_API_TIMEOUT\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['LLM_API_TIMEOUT']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['log_llm_stream', 'logger']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.provider.general_api_requestor"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['GeneralAPIRequestor']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['register_provider']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['log_and_reraise']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"TokenCostManager\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['TokenCostManager']"}, {"id": "{\"lineno\":27,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OllamaLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/__init__.py"}, {"id": "metagpt/provider/__init__.py:__all__"}, {"id": "metagpt/provider/__init__.py:ast.Constant:\n@Time : 2023/5/5 22:59\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 22:59\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.fireworks_api"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.fireworks_api\",\"names\":[\"FireworksLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['FireworksLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.google_gemini_api"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.google_gemini_api\",\"names\":[\"GeminiLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['GeminiLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.ollama_api"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.ollama_api\",\"names\":[\"OllamaLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['OllamaLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.open_llm_api"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.open_llm_api\",\"names\":[\"OpenLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['OpenLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['OpenAILLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.zhipuai_api"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai_api\",\"names\":[\"ZhiPuAILLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['ZhiPuAILLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.azure_openai_api"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.azure_openai_api\",\"names\":[\"AzureOpenAILLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['AzureOpenAILLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.metagpt_api"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.metagpt_api\",\"names\":[\"MetaGPTLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['MetaGPTLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.human_provider"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.human_provider\",\"names\":[\"HumanProvider\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['HumanProvider']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.spark_api"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.spark_api\",\"names\":[\"SparkLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['SparkLLM']"}, {"id": "{\"lineno\":20,\"end_lineno\":31,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:__init__"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_init_model"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_init_client"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_make_client_kwargs"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_get_proxy_params"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_stream"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_cons_kwargs"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_func_configs"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_process_message"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_function"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_calc_usage"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_get_max_tokens"}, {"id": "metagpt/provider/openai_api.py:log_and_reraise"}, {"id": "metagpt/provider/openai_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : openai.py\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\n"}, {"id": "metagpt/provider/openai_api.py:module:__future__"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['annotations']"}, {"id": "metagpt/provider/openai_api.py:json"}, {"id": "metagpt/provider/openai_api.py:module:typing"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncIterator\",\"Optional\",\"Union\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['AsyncIterator', 'Optional', 'Union']"}, {"id": "metagpt/provider/openai_api.py:module:openai"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncOpenAI\",\"AsyncStream\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['APIConnectionError', 'AsyncOpenAI', 'AsyncStream']"}, {"id": "metagpt/provider/openai_api.py:module:openai._base_client"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['AsyncHttpxClientWrapper']"}, {"id": "metagpt/provider/openai_api.py:module:openai.types"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['CompletionUsage']"}, {"id": "metagpt/provider/openai_api.py:module:openai.types.chat"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletion\",\"ChatCompletionChunk\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['ChatCompletion', 'ChatCompletionChunk']"}, {"id": "metagpt/provider/openai_api.py:module:tenacity"}, {"id": "{\"lineno\":18,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['log_llm_stream', 'logger']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.provider.constant"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.constant\",\"names\":[\"GENERAL_FUNCTION_SCHEMA\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['GENERAL_FUNCTION_SCHEMA']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['register_provider']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.schema"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['Message']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\",\"decode_image\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['CodeParser', 'decode_image']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['CostManager', 'Costs']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['handle_exception']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":35,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\",\"get_max_completion_tokens\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['count_message_tokens', 'count_string_tokens', 'get_max_completion_tokens']"}, {"id": "{\"lineno\":42,\"end_lineno\":50,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_and_reraise\"],\"properties\":{}}"}, {"id": "{\"lineno\":54,\"end_lineno\":287,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAILLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:__init__"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:__init__"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:_run"}, {"id": "metagpt/provider/spark_api.py:ast.Constant:\n@File : spark_api.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@File : spark_api.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:_thread as thread"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"_thread as thread\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:base64"}, {"id": "metagpt/provider/spark_api.py:datetime"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"datetime\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:hashlib"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:hmac"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"hmac\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:json"}, {"id": "metagpt/provider/spark_api.py:ssl"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"ssl\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:module:time"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['mktime']"}, {"id": "metagpt/provider/spark_api.py:module:urllib.parse"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlparse\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['urlencode', 'urlparse']"}, {"id": "metagpt/provider/spark_api.py:module:wsgiref.handlers"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['format_date_time']"}, {"id": "metagpt/provider/spark_api.py:websocket"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"websocket\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/spark_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['logger']"}, {"id": "metagpt/provider/spark_api.py:module:metagpt.provider.base_llm"}, {"id": "metagpt/provider/spark_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/spark_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['register_provider']"}, {"id": "{\"lineno\":26,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SparkLLM\"],\"properties\":{}}"}, {"id": "{\"lineno\":46,\"end_lineno\":168,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GetMessageFromWeb\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response_line"}, {"id": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response"}, {"id": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_async_response"}, {"id": "metagpt/provider/general_api_requestor.py:parse_stream_helper"}, {"id": "metagpt/provider/general_api_requestor.py:parse_stream"}, {"id": "metagpt/provider/general_api_requestor.py:asyncio"}, {"id": "metagpt/provider/general_api_requestor.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Generator\",\"Iterator\",\"Tuple\",\"Union\"]}}"}, {"id": "metagpt/provider/general_api_requestor.py:names:['AsyncGenerator', 'Generator', 'Iterator', 'Tuple', 'Union']"}, {"id": "metagpt/provider/general_api_requestor.py:aiohttp"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_requestor.py:requests"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_requestor.py:module:metagpt.logs"}, {"id": "metagpt/provider/general_api_requestor.py:names:['logger']"}, {"id": "metagpt/provider/general_api_requestor.py:module:metagpt.provider.general_api_base"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_base\",\"names\":[\"APIRequestor\"]}}"}, {"id": "metagpt/provider/general_api_requestor.py:names:['APIRequestor']"}, {"id": "{\"lineno\":15,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream_helper\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":35,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream\"],\"properties\":{}}"}, {"id": "{\"lineno\":38,\"end_lineno\":104,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeneralAPIRequestor\"],\"properties\":{}}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:__init__"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_user_msg"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_user_msg_with_imgs"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_assistant_msg"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_system_msg"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_system_msgs"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_default_system_msg"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_extract_assistant_rsp"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_update_costs"}, {"id": "metagpt/provider/base_llm.py:ast.Constant:\n@Time : 2023/5/5 23:04\n@Author : alexanderwu\n@File : base_llm.py\n@Desc : mashenquan, 2023/8/22. + try catch\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:04\\n@Author : alexanderwu\\n@File : base_llm.py\\n@Desc : mashenquan, 2023/8/22. + try catch\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/base_llm.py:module:__future__"}, {"id": "metagpt/provider/base_llm.py:names:['annotations']"}, {"id": "metagpt/provider/base_llm.py:json"}, {"id": "metagpt/provider/base_llm.py:module:abc"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"id": "metagpt/provider/base_llm.py:names:['ABC', 'abstractmethod']"}, {"id": "metagpt/provider/base_llm.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\",\"Union\"]}}"}, {"id": "metagpt/provider/base_llm.py:names:['Dict', 'Optional', 'Union']"}, {"id": "metagpt/provider/base_llm.py:module:openai"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncOpenAI\"]}}"}, {"id": "metagpt/provider/base_llm.py:names:['AsyncOpenAI']"}, {"id": "metagpt/provider/base_llm.py:module:openai.types"}, {"id": "metagpt/provider/base_llm.py:names:['CompletionUsage']"}, {"id": "metagpt/provider/base_llm.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"id": "metagpt/provider/base_llm.py:names:['LLMConfig']"}, {"id": "metagpt/provider/base_llm.py:module:metagpt.logs"}, {"id": "metagpt/provider/base_llm.py:names:['logger']"}, {"id": "metagpt/provider/base_llm.py:module:metagpt.schema"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/provider/base_llm.py:names:['Message']"}, {"id": "metagpt/provider/base_llm.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"id": "metagpt/provider/base_llm.py:names:['CostManager']"}, {"id": "metagpt/provider/base_llm.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/provider/base_llm.py:names:['handle_exception']"}, {"id": "{\"lineno\":25,\"end_lineno\":197,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/constant.py"}, {"id": "metagpt/provider/constant.py:GENERAL_FUNCTION_SCHEMA"}, {"id": "metagpt/provider/constant.py:GENERAL_TOOL_CHOICE"}, {"id": "{\"lineno\":3,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERAL_FUNCTION_SCHEMA\"],\"properties\":{}}"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERAL_TOOL_CHOICE\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init__"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init_zhipuai"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_const_kwargs"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion_stream"}, {"id": "metagpt/provider/zhipuai_api.py:module:enum"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['Enum']"}, {"id": "metagpt/provider/zhipuai_api.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['Optional']"}, {"id": "metagpt/provider/zhipuai_api.py:openai"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"openai\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai_api.py:zhipuai"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"zhipuai\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai_api.py:module:requests"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['ConnectionError']"}, {"id": "metagpt/provider/zhipuai_api.py:module:tenacity"}, {"id": "{\"lineno\":11,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.configs.llm_config"}, {"id": "metagpt/provider/zhipuai_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['log_llm_stream', 'logger']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.base_llm"}, {"id": "metagpt/provider/zhipuai_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "metagpt/provider/zhipuai_api.py:names:['register_provider']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['log_and_reraise']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.zhipuai.zhipu_model_api"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.zhipu_model_api\",\"names\":[\"ZhiPuModelAPI\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['ZhiPuModelAPI']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['CostManager']"}, {"id": "{\"lineno\":28,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuEvent\"],\"properties\":{}}"}, {"id": "{\"lineno\":36,\"end_lineno\":110,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuAILLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:__init__"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:__init__"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_validate_headers"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_prepare_request_raw"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_async_response"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response_line"}, {"id": "metagpt/provider/general_api_base.py:_console_log_level"}, {"id": "metagpt/provider/general_api_base.py:log_debug"}, {"id": "metagpt/provider/general_api_base.py:log_info"}, {"id": "metagpt/provider/general_api_base.py:log_warn"}, {"id": "metagpt/provider/general_api_base.py:logfmt"}, {"id": "metagpt/provider/general_api_base.py:_build_api_url"}, {"id": "metagpt/provider/general_api_base.py:_requests_proxies_arg"}, {"id": "metagpt/provider/general_api_base.py:_aiohttp_proxies_arg"}, {"id": "metagpt/provider/general_api_base.py:_make_session"}, {"id": "metagpt/provider/general_api_base.py:parse_stream_helper"}, {"id": "metagpt/provider/general_api_base.py:parse_stream"}, {"id": "metagpt/provider/general_api_base.py:parse_stream_async"}, {"id": "metagpt/provider/general_api_base.py:aiohttp_session"}, {"id": "metagpt/provider/general_api_base.py:logger"}, {"id": "metagpt/provider/general_api_base.py:TIMEOUT_SECS"}, {"id": "metagpt/provider/general_api_base.py:MAX_SESSION_LIFETIME_SECS"}, {"id": "metagpt/provider/general_api_base.py:MAX_CONNECTION_RETRIES"}, {"id": "metagpt/provider/general_api_base.py:_thread_context"}, {"id": "metagpt/provider/general_api_base.py:LLM_LOG"}, {"id": "metagpt/provider/general_api_base.py:api_key_to_header"}, {"id": "metagpt/provider/general_api_base.py:asyncio"}, {"id": "metagpt/provider/general_api_base.py:json"}, {"id": "metagpt/provider/general_api_base.py:os"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:platform"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:re"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:sys"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:threading"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"threading\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:time"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"time\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:module:contextlib"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"contextlib\",\"names\":[\"asynccontextmanager\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['asynccontextmanager']"}, {"id": "metagpt/provider/general_api_base.py:module:enum"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['Enum']"}, {"id": "metagpt/provider/general_api_base.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"AsyncIterator\",\"Dict\",\"Iterator\",\"Optional\",\"Tuple\",\"Union\",\"overload\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['AsyncGenerator', 'AsyncIterator', 'Dict', 'Iterator', 'Optional', 'Tuple', 'Union', 'overload']"}, {"id": "metagpt/provider/general_api_base.py:module:urllib.parse"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlsplit\",\"urlunsplit\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['urlencode', 'urlsplit', 'urlunsplit']"}, {"id": "metagpt/provider/general_api_base.py:aiohttp"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:requests"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:sys.version_info:[3, 8]"}, {"id": "{\"lineno\":30,\"end_lineno\":33,\"type_name\":\"ast.If\",\"tokens\":[\"sys.version_info\",[3,8]],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:logging"}, {"id": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.Import\",\"tokens\":[\"logging\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:openai"}, {"id": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.Import\",\"tokens\":[\"openai\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:module:openai"}, {"id": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"version\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['version']"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"logger\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"TIMEOUT_SECS\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"MAX_SESSION_LIFETIME_SECS\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"MAX_CONNECTION_RETRIES\"],\"properties\":{}}"}, {"id": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"_thread_context\"],\"properties\":{}}"}, {"id": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_LOG\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":68,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ApiType\"],\"properties\":{}}"}, {"id": "{\"lineno\":71,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"api_key_to_header\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":82,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_console_log_level\"],\"properties\":{}}"}, {"id": "{\"lineno\":85,\"end_lineno\":89,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_debug\"],\"properties\":{}}"}, {"id": "{\"lineno\":92,\"end_lineno\":96,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_info\"],\"properties\":{}}"}, {"id": "{\"lineno\":99,\"end_lineno\":102,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_warn\"],\"properties\":{}}"}, {"id": "{\"lineno\":105,\"end_lineno\":120,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"logfmt\"],\"properties\":{}}"}, {"id": "{\"lineno\":123,\"end_lineno\":150,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIResponse\"],\"properties\":{}}"}, {"id": "{\"lineno\":153,\"end_lineno\":159,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_build_api_url\"],\"properties\":{}}"}, {"id": "{\"lineno\":162,\"end_lineno\":173,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_requests_proxies_arg\"],\"properties\":{}}"}, {"id": "{\"lineno\":176,\"end_lineno\":187,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_aiohttp_proxies_arg\"],\"properties\":{}}"}, {"id": "{\"lineno\":190,\"end_lineno\":196,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_make_session\"],\"properties\":{}}"}, {"id": "{\"lineno\":199,\"end_lineno\":210,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream_helper\"],\"properties\":{}}"}, {"id": "{\"lineno\":213,\"end_lineno\":217,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream\"],\"properties\":{}}"}, {"id": "{\"lineno\":220,\"end_lineno\":224,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"parse_stream_async\"],\"properties\":{}}"}, {"id": "{\"lineno\":227,\"end_lineno\":616,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"APIRequestor\"],\"properties\":{}}"}, {"id": "{\"lineno\":620,\"end_lineno\":622,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aiohttp_session\"],\"properties\":{}}"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:__init__"}, {"id": "metagpt/provider/llm_provider_registry.py:register_provider"}, {"id": "metagpt/provider/llm_provider_registry.py:create_llm_instance"}, {"id": "metagpt/provider/llm_provider_registry.py:LLM_REGISTRY"}, {"id": "metagpt/provider/llm_provider_registry.py:ast.Constant:\n@Time : 2023/12/19 17:26\n@Author : alexanderwu\n@File : llm_provider_registry.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19 17:26\\n@Author : alexanderwu\\n@File : llm_provider_registry.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/llm_provider_registry.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/llm_provider_registry.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/llm_provider_registry.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/provider/llm_provider_registry.py:names:['BaseLLM']"}, {"id": "{\"lineno\":12,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMProviderRegistry\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":31,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_provider\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":36,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"create_llm_instance\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_REGISTRY\"],\"properties\":{}}"}, {"id": "metagpt/provider/metagpt_api.py:MetaGPTLLM:_calc_usage"}, {"id": "metagpt/provider/metagpt_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : metagpt_api.py\n@Desc : MetaGPT LLM provider.\n"}, {"id": "{\"lineno\":2,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : metagpt_api.py\\n@Desc : MetaGPT LLM provider.\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/metagpt_api.py:module:openai.types"}, {"id": "metagpt/provider/metagpt_api.py:names:['CompletionUsage']"}, {"id": "metagpt/provider/metagpt_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"id": "metagpt/provider/metagpt_api.py:names:['LLMType']"}, {"id": "metagpt/provider/metagpt_api.py:module:metagpt.provider"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"OpenAILLM\"]}}"}, {"id": "metagpt/provider/metagpt_api.py:names:['OpenAILLM']"}, {"id": "metagpt/provider/metagpt_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/metagpt_api.py:names:['register_provider']"}, {"id": "{\"lineno\":16,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MetaGPTLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:__init__"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:_make_client_kwargs"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:_calc_usage"}, {"id": "metagpt/provider/open_llm_api.py:module:openai.types"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['CompletionUsage']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['logger']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['register_provider']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['OpenAILLM']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"Costs\",\"TokenCostManager\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['Costs', 'TokenCostManager']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['count_message_tokens', 'count_string_tokens']"}, {"id": "{\"lineno\":16,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:__init__"}, {"id": "metagpt/provider/human_provider.py:ast.Constant:\nFilename: MetaGPT/metagpt/provider/human_provider.py\nCreated Date: Wednesday, November 8th 2023, 11:55:46 pm\nAuthor: garylin2099\n"}, {"id": "{\"lineno\":1,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\nFilename: MetaGPT/metagpt/provider/human_provider.py\\nCreated Date: Wednesday, November 8th 2023, 11:55:46 pm\\nAuthor: garylin2099\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/human_provider.py:module:typing"}, {"id": "metagpt/provider/human_provider.py:names:['Optional']"}, {"id": "metagpt/provider/human_provider.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"id": "metagpt/provider/human_provider.py:names:['LLMConfig']"}, {"id": "metagpt/provider/human_provider.py:module:metagpt.logs"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/provider/human_provider.py:names:['logger']"}, {"id": "metagpt/provider/human_provider.py:module:metagpt.provider.base_llm"}, {"id": "metagpt/provider/human_provider.py:names:['BaseLLM']"}, {"id": "{\"lineno\":13,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"HumanProvider\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:__init__"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:json"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterator\"]}}"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:names:['Any', 'Iterator']"}, {"id": "{\"lineno\":10,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AsyncSSEClient\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai/__init__.py"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:json"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:module:zhipuai"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai\",\"names\":[\"ZhipuAI\"]}}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['ZhipuAI']"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:module:zhipuai.core._http_client"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai.core._http_client\",\"names\":[\"ZHIPUAI_DEFAULT_TIMEOUT\"]}}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['ZHIPUAI_DEFAULT_TIMEOUT']"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:module:metagpt.provider.general_api_requestor"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['GeneralAPIRequestor']"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:module:metagpt.provider.zhipuai.async_sse_client"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.async_sse_client\",\"names\":[\"AsyncSSEClient\"]}}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['AsyncSSEClient']"}, {"id": "{\"lineno\":14,\"end_lineno\":54,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuModelAPI\"],\"properties\":{}}"}, {"id": "metagpt/provider/postprocess/__init__.py"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:module:typing"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:names:['Union']"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:module:metagpt.utils.repair_llm_raw_output"}, {"id": "{\"lineno\":7,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"RepairType\",\"extract_content_from_output\",\"repair_llm_raw_output\",\"retry_parse_json_text\"]}}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:names:['RepairType', 'extract_content_from_output', 'repair_llm_raw_output', 'retry_parse_json_text']"}, {"id": "{\"lineno\":15,\"end_lineno\":69,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BasePostProcessPlugin\"],\"properties\":{}}"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:llm_output_postprocess"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:module:typing"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:names:['Union']"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:module:metagpt.provider.postprocess.base_postprocess_plugin"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.base_postprocess_plugin\",\"names\":[\"BasePostProcessPlugin\"]}}"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:names:['BasePostProcessPlugin']"}, {"id": "{\"lineno\":10,\"end_lineno\":20,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"llm_output_postprocess\"],\"properties\":{}}"}, {"id": "metagpt/management/__init__.py"}, {"id": "metagpt/management/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:58\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:58\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:__init__"}, {"id": "metagpt/management/skill_manager.py:Skill"}, {"id": "metagpt/management/skill_manager.py:ast.Constant:\n@Time : 2023/6/5 01:44\n@Author : alexanderwu\n@File : skill_manager.py\n@Modified By: mashenquan, 2023/8/20. Remove useless `llm`\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/5 01:44\\n@Author : alexanderwu\\n@File : skill_manager.py\\n@Modified By: mashenquan, 2023/8/20. Remove useless `llm`\\n\"],\"properties\":{}}"}, {"id": "metagpt/management/skill_manager.py:module:metagpt.actions"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/management/skill_manager.py:names:['Action']"}, {"id": "metagpt/management/skill_manager.py:module:metagpt.const"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PROMPT_PATH\"]}}"}, {"id": "metagpt/management/skill_manager.py:names:['PROMPT_PATH']"}, {"id": "metagpt/management/skill_manager.py:module:metagpt.document_store.chromadb_store"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.chromadb_store\",\"names\":[\"ChromaStore\"]}}"}, {"id": "metagpt/management/skill_manager.py:names:['ChromaStore']"}, {"id": "metagpt/management/skill_manager.py:module:metagpt.logs"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/management/skill_manager.py:names:['logger']"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Assign\",\"tokens\":[\"Skill\"],\"properties\":{}}"}, {"id": "{\"lineno\":17,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillManager\"],\"properties\":{}}"}, {"id": "metagpt/management/skill_manager.py:__name__:__main__"}, {"id": "{\"lineno\":77,\"end_lineno\":79,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/roles/engineer.py:Engineer:__init__"}, {"id": "metagpt/roles/engineer.py:Engineer:_parse_tasks"}, {"id": "metagpt/roles/engineer.py:Engineer:_act_sp_with_cr"}, {"id": "metagpt/roles/engineer.py:Engineer:_act"}, {"id": "metagpt/roles/engineer.py:Engineer:_act_write_code"}, {"id": "metagpt/roles/engineer.py:Engineer:_act_summarize"}, {"id": "metagpt/roles/engineer.py:Engineer:_act_code_plan_and_change"}, {"id": "metagpt/roles/engineer.py:Engineer:_is_pass"}, {"id": "metagpt/roles/engineer.py:Engineer:_think"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_coding_context"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_coding_doc"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_code_actions"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_summarize_actions"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_code_plan_and_change_action"}, {"id": "metagpt/roles/engineer.py:IS_PASS_PROMPT"}, {"id": "metagpt/roles/engineer.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : engineer.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116:\n 1. Modify the data type of the `cause_by` value in the `Message` to a string, and utilize the new message\n distribution feature for message filtering.\n 2. Consolidate message reception and processing logic within `_observe`.\n 3. Fix bug: Add logic for handling asynchronous message processing when messages are not ready.\n 4. Supplemented the external transmission of internal messages.\n@Modified By: mashenquan, 2023-11-27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.5 of RFC 135, add incremental iteration functionality.\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\n of SummarizeCode.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":18,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : engineer.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116:\\n 1. Modify the data type of the `cause_by` value in the `Message` to a string, and utilize the new message\\n distribution feature for message filtering.\\n 2. Consolidate message reception and processing logic within `_observe`.\\n 3. Fix bug: Add logic for handling asynchronous message processing when messages are not ready.\\n 4. Supplemented the external transmission of internal messages.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.5 of RFC 135, add incremental iteration functionality.\\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\\n of SummarizeCode.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/engineer.py:module:__future__"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['annotations']"}, {"id": "metagpt/roles/engineer.py:json"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/roles/engineer.py:module:collections"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['defaultdict']"}, {"id": "metagpt/roles/engineer.py:module:pathlib"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['Path']"}, {"id": "metagpt/roles/engineer.py:module:typing"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['Set']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"WriteCode\",\"WriteCodeReview\",\"WriteTasks\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['Action', 'WriteCode', 'WriteCodeReview', 'WriteTasks']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions.fix_bug"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['FixBug']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions.project_management_an"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['REFINED_TASK_LIST', 'TASK_LIST']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions.summarize_code"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['SummarizeCode']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions.write_code_plan_and_change_an"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"WriteCodePlanAndChange\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['WriteCodePlanAndChange']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.const"}, {"id": "{\"lineno\":32,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"REQUIREMENT_FILENAME\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['CODE_PLAN_AND_CHANGE_FILE_REPO', 'REQUIREMENT_FILENAME', 'SYSTEM_DESIGN_FILE_REPO', 'TASK_FILE_REPO']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.logs"}, {"id": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['logger']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.roles"}, {"id": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['Role']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.schema"}, {"id": "{\"lineno\":40,\"end_lineno\":47,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['CodePlanAndChangeContext', 'CodeSummarizeContext', 'CodingContext', 'Document', 'Documents', 'Message']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"any_to_str_set\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['any_to_name', 'any_to_str', 'any_to_str_set']"}, {"id": "{\"lineno\":50,\"end_lineno\":57,\"type_name\":\"ast.Assign\",\"tokens\":[\"IS_PASS_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":386,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Engineer\"],\"properties\":{}}"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:__init__"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_write_test"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_run_code"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_debug_error"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_act"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_observe"}, {"id": "metagpt/roles/qa_engineer.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : qa_engineer.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, modify the data\n type of the `cause_by` value in the `Message` to a string, and utilize the new message filtering feature.\n@Modified By: mashenquan, 2023-11-27.\n 1. Following the think-act principle, solidify the task parameters when creating the\n WriteTest/RunCode/DebugError object, rather than passing them in when calling the run function.\n 2. According to Section 2.2.3.5.7 of RFC 135, change the method of transferring files from using the Message\n to using file references.\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\n of SummarizeCode.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : qa_engineer.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, modify the data\\n type of the `cause_by` value in the `Message` to a string, and utilize the new message filtering feature.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. Following the think-act principle, solidify the task parameters when creating the\\n WriteTest/RunCode/DebugError object, rather than passing them in when calling the run function.\\n 2. According to Section 2.2.3.5.7 of RFC 135, change the method of transferring files from using the Message\\n to using file references.\\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\\n of SummarizeCode.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.actions"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"DebugError\",\"RunCode\",\"WriteTest\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['DebugError', 'RunCode', 'WriteTest']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.actions.summarize_code"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['SummarizeCode']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.const"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_NONE\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['MESSAGE_ROUTE_TO_NONE']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.logs"}, {"id": "metagpt/roles/qa_engineer.py:names:['logger']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.roles"}, {"id": "metagpt/roles/qa_engineer.py:names:['Role']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.schema"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Message\",\"RunCodeContext\",\"TestingContext\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['Document', 'Message', 'RunCodeContext', 'TestingContext']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str_set\",\"parse_recipient\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['any_to_str_set', 'parse_recipient']"}, {"id": "{\"lineno\":27,\"end_lineno\":181,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QaEngineer\"],\"properties\":{}}"}, {"id": "metagpt/roles/teacher.py:Teacher:__init__"}, {"id": "metagpt/roles/teacher.py:Teacher:_think"}, {"id": "metagpt/roles/teacher.py:Teacher:_react"}, {"id": "metagpt/roles/teacher.py:ast.Constant:\n@Time : 2023/7/27\n@Author : mashenquan\n@File : teacher.py\n@Desc : Used by Agent Store\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/27\\n@Author : mashenquan\\n@File : teacher.py\\n@Desc : Used by Agent Store\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/teacher.py:re"}, {"id": "metagpt/roles/teacher.py:module:metagpt.actions"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['UserRequirement']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.actions.write_teaching_plan"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_teaching_plan\",\"names\":[\"TeachingPlanBlock\",\"WriteTeachingPlanPart\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['TeachingPlanBlock', 'WriteTeachingPlanPart']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.logs"}, {"id": "metagpt/roles/teacher.py:names:['logger']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.roles"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['Role']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.schema"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['Message']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"awrite\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['any_to_str', 'awrite']"}, {"id": "{\"lineno\":22,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Teacher\"],\"properties\":{}}"}, {"id": "metagpt/roles/product_manager.py:ProductManager:__init__"}, {"id": "metagpt/roles/product_manager.py:ProductManager:_think"}, {"id": "metagpt/roles/product_manager.py:ProductManager:_observe"}, {"id": "metagpt/roles/product_manager.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : product_manager.py\n@Modified By: mashenquan, 2023/11/27. Add `PrepareDocuments` action according to Section 2.2.3.5.1 of RFC 135.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : product_manager.py\\n@Modified By: mashenquan, 2023/11/27. Add `PrepareDocuments` action according to Section 2.2.3.5.1 of RFC 135.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/product_manager.py:module:metagpt.actions"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\",\"WritePRD\"]}}"}, {"id": "metagpt/roles/product_manager.py:names:['UserRequirement', 'WritePRD']"}, {"id": "metagpt/roles/product_manager.py:module:metagpt.actions.prepare_documents"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.prepare_documents\",\"names\":[\"PrepareDocuments\"]}}"}, {"id": "metagpt/roles/product_manager.py:names:['PrepareDocuments']"}, {"id": "metagpt/roles/product_manager.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/product_manager.py:names:['Role']"}, {"id": "metagpt/roles/product_manager.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\"]}}"}, {"id": "metagpt/roles/product_manager.py:names:['any_to_name']"}, {"id": "{\"lineno\":16,\"end_lineno\":51,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProductManager\"],\"properties\":{}}"}, {"id": "metagpt/roles/sales.py:ast.Constant:\n@Time : 2023/5/25 17:21\n@Author : alexanderwu\n@File : sales.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 17:21\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/sales.py:module:typing"}, {"id": "metagpt/roles/sales.py:names:['Optional']"}, {"id": "metagpt/roles/sales.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\",\"model_validator\"]}}"}, {"id": "metagpt/roles/sales.py:names:['Field', 'model_validator']"}, {"id": "metagpt/roles/sales.py:module:metagpt.actions"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\",\"UserRequirement\"]}}"}, {"id": "metagpt/roles/sales.py:names:['SearchAndSummarize', 'UserRequirement']"}, {"id": "metagpt/roles/sales.py:module:metagpt.document_store.base_store"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"id": "metagpt/roles/sales.py:names:['BaseStore']"}, {"id": "metagpt/roles/sales.py:module:metagpt.roles"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/sales.py:names:['Role']"}, {"id": "metagpt/roles/sales.py:module:metagpt.tools.search_engine"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"id": "metagpt/roles/sales.py:names:['SearchEngine']"}, {"id": "{\"lineno\":19,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Sales\"],\"properties\":{}}"}, {"id": "metagpt/roles/searcher.py:Searcher:_act_sp"}, {"id": "metagpt/roles/searcher.py:Searcher:_act"}, {"id": "metagpt/roles/searcher.py:ast.Constant:\n@Time : 2023/5/23 17:25\n@Author : alexanderwu\n@File : searcher.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 17:25\\n@Author : alexanderwu\\n@File : searcher.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/searcher.py:module:typing"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['Optional']"}, {"id": "metagpt/roles/searcher.py:module:pydantic"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\",\"model_validator\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['Field', 'model_validator']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.actions"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['SearchAndSummarize']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['ActionNode']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.actions.action_output"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['ActionOutput']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.logs"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['logger']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.roles"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['Role']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.schema"}, {"id": "metagpt/roles/searcher.py:names:['Message']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.tools.search_engine"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['SearchEngine']"}, {"id": "{\"lineno\":24,\"end_lineno\":69,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Searcher\"],\"properties\":{}}"}, {"id": "metagpt/roles/assistant.py:Assistant:__init__"}, {"id": "metagpt/roles/assistant.py:Assistant:_plan"}, {"id": "metagpt/roles/assistant.py:ast.Constant:\n@Time : 2023/8/7\n@Author : mashenquan\n@File : assistant.py\n@Desc : I am attempting to incorporate certain symbol concepts from UML into MetaGPT, enabling it to have the\n ability to freely construct flows through symbol concatenation. Simultaneously, I am also striving to\n make these symbols configurable and standardized, making the process of building flows more convenient.\n For more about `fork` node in activity diagrams, see: `https://www.uml-diagrams.org/activity-diagrams.html`\n This file defines a `fork` style meta role capable of generating arbitrary roles at runtime based on a\n configuration file.\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false\n indicates that further reasoning cannot continue.\n\n"}, {"id": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/7\\n@Author : mashenquan\\n@File : assistant.py\\n@Desc : I am attempting to incorporate certain symbol concepts from UML into MetaGPT, enabling it to have the\\n ability to freely construct flows through symbol concatenation. Simultaneously, I am also striving to\\n make these symbols configurable and standardized, making the process of building flows more convenient.\\n For more about `fork` node in activity diagrams, see: `https://www.uml-diagrams.org/activity-diagrams.html`\\n This file defines a `fork` style meta role capable of generating arbitrary roles at runtime based on a\\n configuration file.\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false\\n indicates that further reasoning cannot continue.\\n\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/assistant.py:module:enum"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Enum']"}, {"id": "metagpt/roles/assistant.py:module:pathlib"}, {"id": "metagpt/roles/assistant.py:names:['Path']"}, {"id": "metagpt/roles/assistant.py:module:typing"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Optional']"}, {"id": "metagpt/roles/assistant.py:module:pydantic"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Field']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.actions.skill_action"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.skill_action\",\"names\":[\"ArgumentsParingAction\",\"SkillAction\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['ArgumentsParingAction', 'SkillAction']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.actions.talk_action"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.talk_action\",\"names\":[\"TalkAction\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['TalkAction']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.learn.skill_loader"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"SkillsDeclaration\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['SkillsDeclaration']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.logs"}, {"id": "metagpt/roles/assistant.py:names:['logger']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.memory.brain_memory"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.brain_memory\",\"names\":[\"BrainMemory\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['BrainMemory']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.roles"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Role']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.schema"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Message']"}, {"id": "{\"lineno\":32,\"end_lineno\":34,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MessageType\"],\"properties\":{}}"}, {"id": "{\"lineno\":37,\"end_lineno\":139,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Assistant\"],\"properties\":{}}"}, {"id": "metagpt/roles/__init__.py"}, {"id": "metagpt/roles/__init__.py:__all__"}, {"id": "metagpt/roles/__init__.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Role']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.architect"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.architect\",\"names\":[\"Architect\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Architect']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.project_manager"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.project_manager\",\"names\":[\"ProjectManager\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['ProjectManager']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.product_manager"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.product_manager\",\"names\":[\"ProductManager\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['ProductManager']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.engineer"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.engineer\",\"names\":[\"Engineer\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Engineer']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.qa_engineer"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.qa_engineer\",\"names\":[\"QaEngineer\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['QaEngineer']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.searcher"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.searcher\",\"names\":[\"Searcher\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Searcher']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.sales"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.sales\",\"names\":[\"Sales\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Sales']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.customer_service"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.customer_service\",\"names\":[\"CustomerService\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['CustomerService']"}, {"id": "{\"lineno\":20,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/roles/role.py:Role:_process_role_extra"}, {"id": "metagpt/roles/role.py:Role:_reset"}, {"id": "metagpt/roles/role.py:Role:_setting"}, {"id": "metagpt/roles/role.py:Role:_check_actions"}, {"id": "metagpt/roles/role.py:Role:_init_action"}, {"id": "metagpt/roles/role.py:Role:_set_react_mode"}, {"id": "metagpt/roles/role.py:Role:_watch"}, {"id": "metagpt/roles/role.py:Role:_set_state"}, {"id": "metagpt/roles/role.py:Role:_get_prefix"}, {"id": "metagpt/roles/role.py:Role:_think"}, {"id": "metagpt/roles/role.py:Role:_act"}, {"id": "metagpt/roles/role.py:Role:_observe"}, {"id": "metagpt/roles/role.py:Role:_react"}, {"id": "metagpt/roles/role.py:Role:_act_by_order"}, {"id": "metagpt/roles/role.py:Role:_plan_and_act"}, {"id": "metagpt/roles/role.py:Role:_act_on_task"}, {"id": "metagpt/roles/role.py:PREFIX_TEMPLATE"}, {"id": "metagpt/roles/role.py:CONSTRAINT_TEMPLATE"}, {"id": "metagpt/roles/role.py:STATE_TEMPLATE"}, {"id": "metagpt/roles/role.py:ROLE_TEMPLATE"}, {"id": "metagpt/roles/role.py:ast.Constant:\n@Time : 2023/5/11 14:42\n@Author : alexanderwu\n@File : role.py\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116:\n 1. Merge the `recv` functionality into the `_observe` function. Future message reading operations will be\n consolidated within the `_observe` function.\n 2. Standardize the message filtering for string label matching. Role objects can access the message labels\n they've subscribed to through the `subscribed_tags` property.\n 3. Move the message receive buffer from the global variable `self.rc.env.memory` to the role's private variable\n `self.rc.msg_buffer` for easier message identification and asynchronous appending of messages.\n 4. Standardize the way messages are passed: `publish_message` sends messages out, while `put_message` places\n messages into the Role object's private message receive buffer. There are no other message transmit methods.\n 5. Standardize the parameters for the `run` function: the `test_message` parameter is used for testing purposes\n only. In the normal workflow, you should use `publish_message` or `put_message` to transmit messages.\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\n functionality is to be consolidated into the `Environment` class.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":21,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:42\\n@Author : alexanderwu\\n@File : role.py\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116:\\n 1. Merge the `recv` functionality into the `_observe` function. Future message reading operations will be\\n consolidated within the `_observe` function.\\n 2. Standardize the message filtering for string label matching. Role objects can access the message labels\\n they've subscribed to through the `subscribed_tags` property.\\n 3. Move the message receive buffer from the global variable `self.rc.env.memory` to the role's private variable\\n `self.rc.msg_buffer` for easier message identification and asynchronous appending of messages.\\n 4. Standardize the way messages are passed: `publish_message` sends messages out, while `put_message` places\\n messages into the Role object's private message receive buffer. There are no other message transmit methods.\\n 5. Standardize the parameters for the `run` function: the `test_message` parameter is used for testing purposes\\n only. In the normal workflow, you should use `publish_message` or `put_message` to transmit messages.\\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\\n functionality is to be consolidated into the `Environment` class.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/role.py:module:__future__"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/roles/role.py:names:['annotations']"}, {"id": "metagpt/roles/role.py:module:enum"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/roles/role.py:names:['Enum']"}, {"id": "metagpt/roles/role.py:module:typing"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"TYPE_CHECKING\",\"Iterable\",\"Optional\",\"Set\",\"Type\",\"Union\"]}}"}, {"id": "metagpt/roles/role.py:names:['TYPE_CHECKING', 'Iterable', 'Optional', 'Set', 'Type', 'Union']"}, {"id": "metagpt/roles/role.py:module:pydantic"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"id": "metagpt/roles/role.py:names:['BaseModel', 'ConfigDict', 'Field', 'SerializeAsAny', 'model_validator']"}, {"id": "metagpt/roles/role.py:module:metagpt.actions"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"id": "metagpt/roles/role.py:names:['Action', 'ActionOutput']"}, {"id": "metagpt/roles/role.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/roles/role.py:names:['ActionNode']"}, {"id": "metagpt/roles/role.py:module:metagpt.actions.add_requirement"}, {"id": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/roles/role.py:names:['UserRequirement']"}, {"id": "metagpt/roles/role.py:module:metagpt.context_mixin"}, {"id": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"id": "metagpt/roles/role.py:names:['ContextMixin']"}, {"id": "metagpt/roles/role.py:module:metagpt.logs"}, {"id": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/roles/role.py:names:['logger']"}, {"id": "metagpt/roles/role.py:module:metagpt.memory"}, {"id": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"id": "metagpt/roles/role.py:names:['Memory']"}, {"id": "metagpt/roles/role.py:module:metagpt.provider"}, {"id": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"HumanProvider\"]}}"}, {"id": "metagpt/roles/role.py:names:['HumanProvider']"}, {"id": "metagpt/roles/role.py:module:metagpt.schema"}, {"id": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"MessageQueue\",\"SerializationMixin\"]}}"}, {"id": "metagpt/roles/role.py:names:['Message', 'MessageQueue', 'SerializationMixin']"}, {"id": "metagpt/roles/role.py:module:metagpt.strategy.planner"}, {"id": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.planner\",\"names\":[\"Planner\"]}}"}, {"id": "metagpt/roles/role.py:names:['Planner']"}, {"id": "metagpt/roles/role.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"role_raise_decorator\"]}}"}, {"id": "metagpt/roles/role.py:names:['any_to_name', 'any_to_str', 'role_raise_decorator']"}, {"id": "metagpt/roles/role.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/roles/role.py:names:['ProjectRepo']"}, {"id": "metagpt/roles/role.py:module:metagpt.utils.repair_llm_raw_output"}, {"id": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"extract_state_value_from_output\"]}}"}, {"id": "metagpt/roles/role.py:names:['extract_state_value_from_output']"}, {"id": "metagpt/roles/role.py:TYPE_CHECKING"}, {"id": "{\"lineno\":43,\"end_lineno\":44,\"type_name\":\"ast.If\",\"tokens\":[\"TYPE_CHECKING\"],\"properties\":{}}"}, {"id": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"PREFIX_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONSTRAINT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":50,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"STATE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":67,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"ROLE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":85,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleReactMode\"],\"properties\":{}}"}, {"id": "{\"lineno\":88,\"end_lineno\":130,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":133,\"end_lineno\":602,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Role\"],\"properties\":{}}"}, {"id": "metagpt/roles/role.py:ast.Call:RoleContext.model_rebuild"}, {"id": "{\"lineno\":605,\"end_lineno\":605,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Call\",\"RoleContext.model_rebuild\"],\"properties\":{}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:__init__"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:_act"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:ast.Constant:\n@Time : 2023/9/21 14:10:05\n@Author : Stitch-z\n@File : invoice_ocr_assistant.py\n"}, {"id": "{\"lineno\":4,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 14:10:05\\n@Author : Stitch-z\\n@File : invoice_ocr_assistant.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:json"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:pathlib"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['Path']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:typing"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['Optional']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:pandas as pd"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:pydantic"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['BaseModel']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.actions.invoice_ocr"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.invoice_ocr\",\"names\":[\"GenerateTable\",\"InvoiceOCR\",\"ReplyQuestion\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['GenerateTable', 'InvoiceOCR', 'ReplyQuestion']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.prompts.invoice_ocr"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"INVOICE_OCR_SUCCESS\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['INVOICE_OCR_SUCCESS']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['Role', 'RoleReactMode']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.schema"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['Message']"}, {"id": "{\"lineno\":23,\"end_lineno\":24,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoicePath\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":28,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OCRResults\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceData\"],\"properties\":{}}"}, {"id": "{\"lineno\":35,\"end_lineno\":36,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReplyData\"],\"properties\":{}}"}, {"id": "{\"lineno\":39,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceOCRAssistant\"],\"properties\":{}}"}, {"id": "metagpt/roles/architect.py:Architect:__init__"}, {"id": "metagpt/roles/architect.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : architect.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : architect.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/architect.py:module:metagpt.actions"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WritePRD\"]}}"}, {"id": "metagpt/roles/architect.py:names:['WritePRD']"}, {"id": "metagpt/roles/architect.py:module:metagpt.actions.design_api"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"id": "metagpt/roles/architect.py:names:['WriteDesign']"}, {"id": "metagpt/roles/architect.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/architect.py:names:['Role']"}, {"id": "{\"lineno\":14,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Architect\"],\"properties\":{}}"}, {"id": "metagpt/roles/customer_service.py:DESC"}, {"id": "metagpt/roles/customer_service.py:ast.Constant:\n@Time : 2023/5/25 17:21\n@Author : alexanderwu\n@File : sales.py\n"}, {"id": "metagpt/roles/customer_service.py:module:typing"}, {"id": "metagpt/roles/customer_service.py:names:['Optional']"}, {"id": "metagpt/roles/customer_service.py:module:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/roles/customer_service.py:names:['Field']"}, {"id": "metagpt/roles/customer_service.py:module:metagpt.document_store.base_store"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"id": "metagpt/roles/customer_service.py:names:['BaseStore']"}, {"id": "metagpt/roles/customer_service.py:module:metagpt.roles"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Sales\"]}}"}, {"id": "metagpt/roles/customer_service.py:names:['Sales']"}, {"id": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"DESC\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CustomerService\"],\"properties\":{}}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:__init__"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:_think"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:_act"}, {"id": "metagpt/roles/sk_agent.py:ast.Constant:\n@Time : 2023/9/13 12:23\n@Author : femto Zheng\n@File : sk_agent.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, utilize the new message\n distribution feature for message filtering.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:23\\n@Author : femto Zheng\\n@File : sk_agent.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, utilize the new message\\n distribution feature for message filtering.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/sk_agent.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Union\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['Any', 'Callable', 'Union']"}, {"id": "metagpt/roles/sk_agent.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['Field']"}, {"id": "metagpt/roles/sk_agent.py:module:semantic_kernel"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel\",\"names\":[\"Kernel\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['Kernel']"}, {"id": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning\",\"names\":[\"SequentialPlanner\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['SequentialPlanner']"}, {"id": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning.action_planner.action_planner"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.action_planner.action_planner\",\"names\":[\"ActionPlanner\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['ActionPlanner']"}, {"id": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning.basic_planner"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.basic_planner\",\"names\":[\"BasicPlanner\",\"Plan\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['BasicPlanner', 'Plan']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.actions"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['UserRequirement']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.actions.execute_task"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.execute_task\",\"names\":[\"ExecuteTask\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['ExecuteTask']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.logs"}, {"id": "metagpt/roles/sk_agent.py:names:['logger']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.roles"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['Role']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.schema"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['Message']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.utils.make_sk_kernel"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.make_sk_kernel\",\"names\":[\"make_sk_kernel\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['make_sk_kernel']"}, {"id": "{\"lineno\":26,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkAgent\"],\"properties\":{}}"}, {"id": "metagpt/roles/prompt.py:PREFIX"}, {"id": "metagpt/roles/prompt.py:FORMAT_INSTRUCTIONS"}, {"id": "metagpt/roles/prompt.py:SUFFIX"}, {"id": "metagpt/roles/prompt.py:ast.Constant:\n@Time : 2023/5/18 22:43\n@Author : alexanderwu\n@File : prompt.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/18 22:43\\n@Author : alexanderwu\\n@File : prompt.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/prompt.py:module:enum"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/roles/prompt.py:names:['Enum']"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Assign\",\"tokens\":[\"PREFIX\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_INSTRUCTIONS\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUFFIX\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":46,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PromptString\"],\"properties\":{}}"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:__init__"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_handle_directory"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_act"}, {"id": "metagpt/roles/tutorial_assistant.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/tutorial_assistant.py:module:datetime"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['datetime']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['Dict']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.actions.write_tutorial"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_tutorial\",\"names\":[\"WriteContent\",\"WriteDirectory\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['WriteContent', 'WriteDirectory']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.const"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TUTORIAL_PATH\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['TUTORIAL_PATH']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.logs"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['logger']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['Role', 'RoleReactMode']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.schema"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['Message']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.utils.file"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['File']"}, {"id": "{\"lineno\":20,\"end_lineno\":94,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TutorialAssistant\"],\"properties\":{}}"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:__init__"}, {"id": "metagpt/roles/project_manager.py:ast.Constant:\n@Time : 2023/5/11 15:04\n@Author : alexanderwu\n@File : project_manager.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 15:04\\n@Author : alexanderwu\\n@File : project_manager.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/project_manager.py:module:metagpt.actions"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteTasks\"]}}"}, {"id": "metagpt/roles/project_manager.py:names:['WriteTasks']"}, {"id": "metagpt/roles/project_manager.py:module:metagpt.actions.design_api"}, {"id": "metagpt/roles/project_manager.py:names:['WriteDesign']"}, {"id": "metagpt/roles/project_manager.py:module:metagpt.roles.role"}, {"id": "metagpt/roles/project_manager.py:names:['Role']"}, {"id": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProjectManager\"],\"properties\":{}}"}, {"id": "metagpt/roles/researcher.py:Researcher:__init__"}, {"id": "metagpt/roles/researcher.py:Researcher:_think"}, {"id": "metagpt/roles/researcher.py:Researcher:_act"}, {"id": "metagpt/roles/researcher.py:ast.Constant:\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\n"}, {"id": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/researcher.py:asyncio"}, {"id": "metagpt/roles/researcher.py:re"}, {"id": "metagpt/roles/researcher.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['BaseModel']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.actions"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"CollectLinks\",\"ConductResearch\",\"WebBrowseAndSummarize\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['Action', 'CollectLinks', 'ConductResearch', 'WebBrowseAndSummarize']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.actions.research"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"get_research_system_text\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['get_research_system_text']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.const"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"RESEARCH_PATH\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['RESEARCH_PATH']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.logs"}, {"id": "metagpt/roles/researcher.py:names:['logger']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['Role', 'RoleReactMode']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.schema"}, {"id": "metagpt/roles/researcher.py:names:['Message']"}, {"id": "{\"lineno\":21,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Report\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":116,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Researcher\"],\"properties\":{}}"}, {"id": "metagpt/roles/researcher.py:__name__:__main__"}, {"id": "{\"lineno\":119,\"end_lineno\":126,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/roles/ci/code_interpreter.py"}, {"id": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter"}, {"id": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:__init__"}, {"id": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:working_memory"}, {"id": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:_act_on_task"}, {"id": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:_write_and_exec_code"}, {"id": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:_write_code"}, {"id": "metagpt/roles/ci/code_interpreter.py:module:__future__"}, {"id": "metagpt/roles/ci/code_interpreter.py:names:['annotations']"}, {"id": "metagpt/roles/ci/code_interpreter.py:module:pydantic"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/roles/ci/code_interpreter.py:names:['Field']"}, {"id": "metagpt/roles/ci/code_interpreter.py:module:metagpt.actions.ci.ask_review"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.ask_review\",\"names\":[\"ReviewConst\"]}}"}, {"id": "metagpt/roles/ci/code_interpreter.py:names:['ReviewConst']"}, {"id": "metagpt/roles/ci/code_interpreter.py:module:metagpt.actions.ci.execute_nb_code"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.execute_nb_code\",\"names\":[\"ExecuteNbCode\"]}}"}, {"id": "metagpt/roles/ci/code_interpreter.py:names:['ExecuteNbCode']"}, {"id": "metagpt/roles/ci/code_interpreter.py:module:metagpt.actions.ci.write_analysis_code"}, {"id": "{\"lineno\":7,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"WriteCodeWithoutTools\",\"WriteCodeWithTools\"]}}"}, {"id": "metagpt/roles/ci/code_interpreter.py:names:['WriteCodeWithoutTools', 'WriteCodeWithTools']"}, {"id": "metagpt/roles/ci/code_interpreter.py:module:metagpt.logs"}, {"id": "metagpt/roles/ci/code_interpreter.py:names:['logger']"}, {"id": "metagpt/roles/ci/code_interpreter.py:module:metagpt.roles"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/ci/code_interpreter.py:names:['Role']"}, {"id": "metagpt/roles/ci/code_interpreter.py:module:metagpt.schema"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Task\",\"TaskResult\"]}}"}, {"id": "metagpt/roles/ci/code_interpreter.py:names:['Message', 'Task', 'TaskResult']"}, {"id": "{\"lineno\":16,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeInterpreter\"],\"properties\":{}}"}, {"id": "metagpt/roles/ci/ml_engineer.py"}, {"id": "metagpt/roles/ci/ml_engineer.py:MLEngineer"}, {"id": "metagpt/roles/ci/ml_engineer.py:MLEngineer:_write_code"}, {"id": "metagpt/roles/ci/ml_engineer.py:MLEngineer:_update_data_columns"}, {"id": "metagpt/roles/ci/ml_engineer.py:module:metagpt.actions.ci.debug_code"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.debug_code\",\"names\":[\"DebugCode\"]}}"}, {"id": "metagpt/roles/ci/ml_engineer.py:names:['DebugCode']"}, {"id": "metagpt/roles/ci/ml_engineer.py:module:metagpt.actions.ci.execute_nb_code"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.execute_nb_code\",\"names\":[\"ExecuteNbCode\"]}}"}, {"id": "metagpt/roles/ci/ml_engineer.py:names:['ExecuteNbCode']"}, {"id": "metagpt/roles/ci/ml_engineer.py:module:metagpt.actions.ci.ml_action"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.ml_action\",\"names\":[\"UpdateDataColumns\",\"WriteCodeWithToolsML\"]}}"}, {"id": "metagpt/roles/ci/ml_engineer.py:names:['UpdateDataColumns', 'WriteCodeWithToolsML']"}, {"id": "metagpt/roles/ci/ml_engineer.py:module:metagpt.logs"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/roles/ci/ml_engineer.py:names:['logger']"}, {"id": "metagpt/roles/ci/ml_engineer.py:module:metagpt.roles.ci.code_interpreter"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.ci.code_interpreter\",\"names\":[\"CodeInterpreter\"]}}"}, {"id": "metagpt/roles/ci/ml_engineer.py:names:['CodeInterpreter']"}, {"id": "metagpt/roles/ci/ml_engineer.py:module:metagpt.tools.tool_type"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"id": "metagpt/roles/ci/ml_engineer.py:names:['ToolType']"}, {"id": "metagpt/roles/ci/ml_engineer.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\"]}}"}, {"id": "metagpt/roles/ci/ml_engineer.py:names:['any_to_str']"}, {"id": "{\"lineno\":10,\"end_lineno\":64,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MLEngineer\"],\"properties\":{}}"}, {"id": "metagpt/utils/serialize.py"}, {"id": "metagpt/utils/serialize.py:actionoutout_schema_to_mapping"}, {"id": "metagpt/utils/serialize.py:actionoutput_mapping_to_str"}, {"id": "metagpt/utils/serialize.py:actionoutput_str_to_mapping"}, {"id": "metagpt/utils/serialize.py:serialize_message"}, {"id": "metagpt/utils/serialize.py:deserialize_message"}, {"id": "metagpt/utils/serialize.py:copy"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"copy\"],\"properties\":{}}"}, {"id": "metagpt/utils/serialize.py:pickle"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"pickle\"],\"properties\":{}}"}, {"id": "metagpt/utils/serialize.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"id": "metagpt/utils/serialize.py:names:['import_class']"}, {"id": "{\"lineno\":11,\"end_lineno\":40,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutout_schema_to_mapping\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":47,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutput_mapping_to_str\"],\"properties\":{}}"}, {"id": "{\"lineno\":50,\"end_lineno\":57,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutput_str_to_mapping\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":71,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"serialize_message\"],\"properties\":{}}"}, {"id": "{\"lineno\":74,\"end_lineno\":83,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"deserialize_message\"],\"properties\":{}}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:__init__"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:__init__"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:__init__"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:__str__"}, {"id": "metagpt/utils/project_repo.py:ast.Constant:\n@Time : 2024/1/8\n@Author : mashenquan\n@File : project_repo.py\n@Desc : Wrapper for GitRepository and FileRepository of project.\n Implementation of Chapter 4.6 of https://deepwisdom.feishu.cn/wiki/CUK4wImd7id9WlkQBNscIe9cnqh\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/8\\n@Author : mashenquan\\n@File : project_repo.py\\n@Desc : Wrapper for GitRepository and FileRepository of project.\\n Implementation of Chapter 4.6 of https://deepwisdom.feishu.cn/wiki/CUK4wImd7id9WlkQBNscIe9cnqh\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/project_repo.py:module:__future__"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/utils/project_repo.py:names:['annotations']"}, {"id": "metagpt/utils/project_repo.py:module:pathlib"}, {"id": "metagpt/utils/project_repo.py:names:['Path']"}, {"id": "metagpt/utils/project_repo.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CLASS_VIEW_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\",\"CODE_SUMMARIES_FILE_REPO\",\"CODE_SUMMARIES_PDF_FILE_REPO\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"DATA_API_DESIGN_FILE_REPO\",\"DOCS_FILE_REPO\",\"GRAPH_REPO_FILE_REPO\",\"PRD_PDF_FILE_REPO\",\"PRDS_FILE_REPO\",\"REQUIREMENT_FILENAME\",\"RESOURCES_FILE_REPO\",\"SD_OUTPUT_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"SYSTEM_DESIGN_PDF_FILE_REPO\",\"TASK_FILE_REPO\",\"TASK_PDF_FILE_REPO\",\"TEST_CODES_FILE_REPO\",\"TEST_OUTPUTS_FILE_REPO\",\"VISUAL_GRAPH_REPO_FILE_REPO\"]}}"}, {"id": "metagpt/utils/project_repo.py:names:['CLASS_VIEW_FILE_REPO', 'CODE_PLAN_AND_CHANGE_FILE_REPO', 'CODE_PLAN_AND_CHANGE_PDF_FILE_REPO', 'CODE_SUMMARIES_FILE_REPO', 'CODE_SUMMARIES_PDF_FILE_REPO', 'COMPETITIVE_ANALYSIS_FILE_REPO', 'DATA_API_DESIGN_FILE_REPO', 'DOCS_FILE_REPO', 'GRAPH_REPO_FILE_REPO', 'PRD_PDF_FILE_REPO', 'PRDS_FILE_REPO', 'REQUIREMENT_FILENAME', 'RESOURCES_FILE_REPO', 'SD_OUTPUT_FILE_REPO', 'SEQ_FLOW_FILE_REPO', 'SYSTEM_DESIGN_FILE_REPO', 'SYSTEM_DESIGN_PDF_FILE_REPO', 'TASK_FILE_REPO', 'TASK_PDF_FILE_REPO', 'TEST_CODES_FILE_REPO', 'TEST_OUTPUTS_FILE_REPO', 'VISUAL_GRAPH_REPO_FILE_REPO']"}, {"id": "metagpt/utils/project_repo.py:module:metagpt.utils.file_repository"}, {"id": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"id": "metagpt/utils/project_repo.py:names:['FileRepository']"}, {"id": "metagpt/utils/project_repo.py:module:metagpt.utils.git_repository"}, {"id": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"id": "metagpt/utils/project_repo.py:names:['GitRepository']"}, {"id": "{\"lineno\":42,\"end_lineno\":60,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocFileRepositories\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ResourceFileRepositories\"],\"properties\":{}}"}, {"id": "{\"lineno\":90,\"end_lineno\":149,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProjectRepo\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_playwright.py"}, {"id": "metagpt/utils/mmdc_playwright.py:mermaid_to_file"}, {"id": "metagpt/utils/mmdc_playwright.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : Steven Lee\n@File : mmdc_playwright.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : Steven Lee\\n@File : mmdc_playwright.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_playwright.py:os"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_playwright.py:module:urllib.parse"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"id": "metagpt/utils/mmdc_playwright.py:names:['urljoin']"}, {"id": "metagpt/utils/mmdc_playwright.py:module:playwright.async_api"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"id": "metagpt/utils/mmdc_playwright.py:names:['async_playwright']"}, {"id": "metagpt/utils/mmdc_playwright.py:module:metagpt.logs"}, {"id": "metagpt/utils/mmdc_playwright.py:names:['logger']"}, {"id": "{\"lineno\":17,\"end_lineno\":121,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:__init__"}, {"id": "metagpt/utils/dependency_file.py:ast.Constant:\n@Time : 2023/11/22\n@Author : mashenquan\n@File : dependency_file.py\n@Desc: Implementation of the dependency file described in Section 2.2.3.2 of RFC 135.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/22\\n@Author : mashenquan\\n@File : dependency_file.py\\n@Desc: Implementation of the dependency file described in Section 2.2.3.2 of RFC 135.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/dependency_file.py:module:__future__"}, {"id": "metagpt/utils/dependency_file.py:names:['annotations']"}, {"id": "metagpt/utils/dependency_file.py:json"}, {"id": "metagpt/utils/dependency_file.py:re"}, {"id": "metagpt/utils/dependency_file.py:module:pathlib"}, {"id": "metagpt/utils/dependency_file.py:names:['Path']"}, {"id": "metagpt/utils/dependency_file.py:module:typing"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"id": "metagpt/utils/dependency_file.py:names:['Set']"}, {"id": "metagpt/utils/dependency_file.py:aiofiles"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/dependency_file.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"id": "metagpt/utils/dependency_file.py:names:['aread']"}, {"id": "metagpt/utils/dependency_file.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/utils/dependency_file.py:names:['handle_exception']"}, {"id": "{\"lineno\":22,\"end_lineno\":107,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DependencyFile\"],\"properties\":{}}"}, {"id": "metagpt/utils/make_sk_kernel.py"}, {"id": "metagpt/utils/make_sk_kernel.py:make_sk_kernel"}, {"id": "metagpt/utils/make_sk_kernel.py:ast.Constant:\n@Time : 2023/9/13 12:29\n@Author : femto Zheng\n@File : make_sk_kernel.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:29\\n@Author : femto Zheng\\n@File : make_sk_kernel.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/make_sk_kernel.py:semantic_kernel as sk"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"semantic_kernel as sk\"],\"properties\":{}}"}, {"id": "metagpt/utils/make_sk_kernel.py:module:semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion"}, {"id": "{\"lineno\":9,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion\",\"names\":[\"AzureChatCompletion\"]}}"}, {"id": "metagpt/utils/make_sk_kernel.py:names:['AzureChatCompletion']"}, {"id": "metagpt/utils/make_sk_kernel.py:module:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion"}, {"id": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion\",\"names\":[\"OpenAIChatCompletion\"]}}"}, {"id": "metagpt/utils/make_sk_kernel.py:names:['OpenAIChatCompletion']"}, {"id": "metagpt/utils/make_sk_kernel.py:module:metagpt.config2"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/utils/make_sk_kernel.py:names:['config']"}, {"id": "{\"lineno\":19,\"end_lineno\":32,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"make_sk_kernel\"],\"properties\":{}}"}, {"id": "metagpt/utils/token_counter.py"}, {"id": "metagpt/utils/token_counter.py:count_message_tokens"}, {"id": "metagpt/utils/token_counter.py:count_string_tokens"}, {"id": "metagpt/utils/token_counter.py:get_max_completion_tokens"}, {"id": "metagpt/utils/token_counter.py:TOKEN_COSTS"}, {"id": "metagpt/utils/token_counter.py:TOKEN_MAX"}, {"id": "metagpt/utils/token_counter.py:ast.Constant:\n@Time : 2023/5/18 00:40\n@Author : alexanderwu\n@File : token_counter.py\nref1: https://openai.com/pricing\nref2: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\nref3: https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/llm/token_counter.py\nref4: https://github.com/hwchase17/langchain/blob/master/langchain/chat_models/openai.py\nref5: https://ai.google.dev/models/gemini\n"}, {"id": "{\"lineno\":3,\"end_lineno\":12,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/18 00:40\\n@Author : alexanderwu\\n@File : token_counter.py\\nref1: https://openai.com/pricing\\nref2: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\\nref3: https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/llm/token_counter.py\\nref4: https://github.com/hwchase17/langchain/blob/master/langchain/chat_models/openai.py\\nref5: https://ai.google.dev/models/gemini\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/token_counter.py:tiktoken"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"tiktoken\"],\"properties\":{}}"}, {"id": "{\"lineno\":15,\"end_lineno\":38,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOKEN_COSTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":62,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOKEN_MAX\"],\"properties\":{}}"}, {"id": "{\"lineno\":65,\"end_lineno\":127,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"count_message_tokens\"],\"properties\":{}}"}, {"id": "{\"lineno\":130,\"end_lineno\":146,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"count_string_tokens\"],\"properties\":{}}"}, {"id": "{\"lineno\":149,\"end_lineno\":161,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_max_completion_tokens\"],\"properties\":{}}"}, {"id": "metagpt/utils/embedding.py"}, {"id": "metagpt/utils/embedding.py:get_embedding"}, {"id": "metagpt/utils/embedding.py:ast.Constant:\n@Time : 2024/1/4 20:58\n@Author : alexanderwu\n@File : embedding.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 20:58\\n@Author : alexanderwu\\n@File : embedding.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/embedding.py:module:langchain_community.embeddings"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_community.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"id": "metagpt/utils/embedding.py:names:['OpenAIEmbeddings']"}, {"id": "metagpt/utils/embedding.py:module:metagpt.config2"}, {"id": "metagpt/utils/embedding.py:names:['config']"}, {"id": "{\"lineno\":13,\"end_lineno\":16,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_embedding\"],\"properties\":{}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_case_sensitivity"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_special_character_missing"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_required_key_pair_missing"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_json_format"}, {"id": "metagpt/utils/repair_llm_raw_output.py:_repair_llm_raw_output"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_llm_raw_output"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_invalid_json"}, {"id": "metagpt/utils/repair_llm_raw_output.py:run_after_exp_and_passon_next_retry"}, {"id": "metagpt/utils/repair_llm_raw_output.py:retry_parse_json_text"}, {"id": "metagpt/utils/repair_llm_raw_output.py:extract_content_from_output"}, {"id": "metagpt/utils/repair_llm_raw_output.py:extract_state_value_from_output"}, {"id": "metagpt/utils/repair_llm_raw_output.py:copy"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:enum"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['Enum']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Union\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['Callable', 'Union']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:regex as re"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"regex as re\"],\"properties\":{}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:tenacity"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"retry\",\"stop_after_attempt\",\"wait_fixed\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['RetryCallState', 'retry', 'stop_after_attempt', 'wait_fixed']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.config2"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['config']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.logs"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['logger']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.utils.custom_decoder"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.custom_decoder\",\"names\":[\"CustomDecoder\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['CustomDecoder']"}, {"id": "{\"lineno\":17,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepairType\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":41,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_case_sensitivity\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":64,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_special_character_missing\"],\"properties\":{}}"}, {"id": "{\"lineno\":67,\"end_lineno\":105,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_required_key_pair_missing\"],\"properties\":{}}"}, {"id": "{\"lineno\":108,\"end_lineno\":139,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_json_format\"],\"properties\":{}}"}, {"id": "{\"lineno\":142,\"end_lineno\":153,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_repair_llm_raw_output\"],\"properties\":{}}"}, {"id": "{\"lineno\":156,\"end_lineno\":177,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_llm_raw_output\"],\"properties\":{}}"}, {"id": "{\"lineno\":180,\"end_lineno\":227,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_invalid_json\"],\"properties\":{}}"}, {"id": "{\"lineno\":230,\"end_lineno\":264,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"run_after_exp_and_passon_next_retry\"],\"properties\":{}}"}, {"id": "{\"lineno\":272,\"end_lineno\":286,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"retry_parse_json_text\"],\"properties\":{}}"}, {"id": "{\"lineno\":289,\"end_lineno\":319,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"extract_content_from_output\"],\"properties\":{}}"}, {"id": "{\"lineno\":322,\"end_lineno\":335,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"extract_state_value_from_output\"],\"properties\":{}}"}, {"id": "metagpt/utils/mermaid.py"}, {"id": "metagpt/utils/mermaid.py:mermaid_to_file"}, {"id": "metagpt/utils/mermaid.py:MMC1"}, {"id": "metagpt/utils/mermaid.py:MMC2"}, {"id": "metagpt/utils/mermaid.py:ast.Constant:\n@Time : 2023/7/4 10:53\n@Author : alexanderwu alitrack\n@File : mermaid.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/4 10:53\\n@Author : alexanderwu alitrack\\n@File : mermaid.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/mermaid.py:asyncio"}, {"id": "metagpt/utils/mermaid.py:os"}, {"id": "metagpt/utils/mermaid.py:module:pathlib"}, {"id": "metagpt/utils/mermaid.py:names:['Path']"}, {"id": "metagpt/utils/mermaid.py:aiofiles"}, {"id": "metagpt/utils/mermaid.py:module:metagpt.config2"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/utils/mermaid.py:names:['config']"}, {"id": "metagpt/utils/mermaid.py:module:metagpt.logs"}, {"id": "metagpt/utils/mermaid.py:names:['logger']"}, {"id": "metagpt/utils/mermaid.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"check_cmd_exists\"]}}"}, {"id": "metagpt/utils/mermaid.py:names:['check_cmd_exists']"}, {"id": "{\"lineno\":19,\"end_lineno\":90,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"id": "{\"lineno\":93,\"end_lineno\":125,\"type_name\":\"ast.Assign\",\"tokens\":[\"MMC1\"],\"properties\":{}}"}, {"id": "{\"lineno\":127,\"end_lineno\":145,\"type_name\":\"ast.Assign\",\"tokens\":[\"MMC2\"],\"properties\":{}}"}, {"id": "metagpt/utils/parse_html.py:get_html_content"}, {"id": "metagpt/utils/parse_html.py:_get_soup"}, {"id": "metagpt/utils/parse_html.py:module:__future__"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['annotations']"}, {"id": "metagpt/utils/parse_html.py:module:typing"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Optional\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['Generator', 'Optional']"}, {"id": "metagpt/utils/parse_html.py:module:urllib.parse"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\",\"urlparse\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['urljoin', 'urlparse']"}, {"id": "metagpt/utils/parse_html.py:module:bs4"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"bs4\",\"names\":[\"BeautifulSoup\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['BeautifulSoup']"}, {"id": "metagpt/utils/parse_html.py:module:pydantic"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"PrivateAttr\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['BaseModel', 'PrivateAttr']"}, {"id": "{\"lineno\":11,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebPage\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":45,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_html_content\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":54,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_get_soup\"],\"properties\":{}}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:__init__"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_get_class_view"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_refine_name"}, {"id": "metagpt/utils/visual_graph_repo.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : visualize_graph.py\n@Desc : Visualization tool to visualize the class diagrams or sequence diagrams of the graph repository.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : visualize_graph.py\\n@Desc : Visualization tool to visualize the class diagrams or sequence diagrams of the graph repository.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/visual_graph_repo.py:module:__future__"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['annotations']"}, {"id": "metagpt/utils/visual_graph_repo.py:re"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/utils/visual_graph_repo.py:module:abc"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['ABC']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:pathlib"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['Path']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:typing"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['List', 'Optional']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:pydantic"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.const"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['AGGREGATION', 'COMPOSITION', 'GENERALIZATION']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.schema"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['UMLClassView']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"split_namespace\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['split_namespace']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.di_graph_repository"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['DiGraphRepository']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.graph_repository"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['GraphKeyword', 'GraphRepository']"}, {"id": "{\"lineno\":25,\"end_lineno\":67,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"_VisualClassView\"],\"properties\":{}}"}, {"id": "{\"lineno\":70,\"end_lineno\":81,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VisualGraphRepo\"],\"properties\":{}}"}, {"id": "{\"lineno\":84,\"end_lineno\":187,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VisualDiGraphRepo\"],\"properties\":{}}"}, {"id": "metagpt/utils/special_tokens.py"}, {"id": "metagpt/utils/special_tokens.py:MSG_SEP"}, {"id": "metagpt/utils/special_tokens.py:FILENAME_CODE_SEP"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Assign\",\"tokens\":[\"MSG_SEP\"],\"properties\":{}}"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Assign\",\"tokens\":[\"FILENAME_CODE_SEP\"],\"properties\":{}}"}, {"id": "metagpt/utils/ahttp_client.py"}, {"id": "metagpt/utils/ahttp_client.py:apost"}, {"id": "metagpt/utils/ahttp_client.py:apost_stream"}, {"id": "metagpt/utils/ahttp_client.py:module:typing"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Mapping\",\"Optional\",\"Union\"]}}"}, {"id": "metagpt/utils/ahttp_client.py:names:['Any', 'Mapping', 'Optional', 'Union']"}, {"id": "metagpt/utils/ahttp_client.py:aiohttp"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/utils/ahttp_client.py:module:aiohttp.client"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp.client\",\"names\":[\"DEFAULT_TIMEOUT\"]}}"}, {"id": "metagpt/utils/ahttp_client.py:names:['DEFAULT_TIMEOUT']"}, {"id": "{\"lineno\":11,\"end_lineno\":28,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"apost\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":49,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"apost_stream\"],\"properties\":{}}"}, {"id": "metagpt/utils/__init__.py"}, {"id": "metagpt/utils/__init__.py:__all__"}, {"id": "metagpt/utils/__init__.py:ast.Constant:\n@Time : 2023/4/29 15:50\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:50\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/__init__.py:module:metagpt.utils.read_document"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.read_document\",\"names\":[\"read_docx\"]}}"}, {"id": "metagpt/utils/__init__.py:names:['read_docx']"}, {"id": "metagpt/utils/__init__.py:module:metagpt.utils.singleton"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.singleton\",\"names\":[\"Singleton\"]}}"}, {"id": "metagpt/utils/__init__.py:names:['Singleton']"}, {"id": "metagpt/utils/__init__.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\",\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"id": "metagpt/utils/__init__.py:names:['TOKEN_COSTS', 'count_message_tokens', 'count_string_tokens']"}, {"id": "{\"lineno\":18,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_ink.py"}, {"id": "metagpt/utils/mmdc_ink.py:mermaid_to_file"}, {"id": "metagpt/utils/mmdc_ink.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : alitrack\n@File : mermaid.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : alitrack\\n@File : mermaid.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_ink.py:base64"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_ink.py:module:aiohttp"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp\",\"names\":[\"ClientError\",\"ClientSession\"]}}"}, {"id": "metagpt/utils/mmdc_ink.py:names:['ClientError', 'ClientSession']"}, {"id": "metagpt/utils/mmdc_ink.py:module:metagpt.logs"}, {"id": "metagpt/utils/mmdc_ink.py:names:['logger']"}, {"id": "{\"lineno\":15,\"end_lineno\":41,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:__init__"}, {"id": "metagpt/utils/di_graph_repository.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : di_graph_repository.py\n@Desc : Graph repository based on DiGraph.\n This script defines a graph repository class based on a directed graph (DiGraph), providing functionalities\n specific to handling directed relationships between entities.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : di_graph_repository.py\\n@Desc : Graph repository based on DiGraph.\\n This script defines a graph repository class based on a directed graph (DiGraph), providing functionalities\\n specific to handling directed relationships between entities.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/di_graph_repository.py:module:__future__"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/utils/di_graph_repository.py:names:['annotations']"}, {"id": "metagpt/utils/di_graph_repository.py:json"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/utils/di_graph_repository.py:module:pathlib"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/utils/di_graph_repository.py:names:['Path']"}, {"id": "metagpt/utils/di_graph_repository.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/utils/di_graph_repository.py:names:['List']"}, {"id": "metagpt/utils/di_graph_repository.py:networkx"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"networkx\"],\"properties\":{}}"}, {"id": "metagpt/utils/di_graph_repository.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\",\"awrite\"]}}"}, {"id": "metagpt/utils/di_graph_repository.py:names:['aread', 'awrite']"}, {"id": "metagpt/utils/di_graph_repository.py:module:metagpt.utils.graph_repository"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphRepository\"]}}"}, {"id": "metagpt/utils/di_graph_repository.py:names:['SPO', 'GraphRepository']"}, {"id": "{\"lineno\":23,\"end_lineno\":299,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DiGraphRepository\"],\"properties\":{}}"}, {"id": "metagpt/utils/yaml_model.py:ast.Constant:\n@Time : 2024/1/4 10:18\n@Author : alexanderwu\n@File : YamlModel.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 10:18\\n@Author : alexanderwu\\n@File : YamlModel.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/yaml_model.py:module:pathlib"}, {"id": "metagpt/utils/yaml_model.py:names:['Path']"}, {"id": "metagpt/utils/yaml_model.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"id": "metagpt/utils/yaml_model.py:names:['Dict', 'Optional']"}, {"id": "metagpt/utils/yaml_model.py:yaml"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"id": "metagpt/utils/yaml_model.py:module:pydantic"}, {"id": "metagpt/utils/yaml_model.py:names:['BaseModel', 'model_validator']"}, {"id": "{\"lineno\":15,\"end_lineno\":36,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"YamlModel\"],\"properties\":{}}"}, {"id": "{\"lineno\":39,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"YamlModelWithoutDefault\"],\"properties\":{}}"}, {"id": "metagpt/utils/cost_manager.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : openai.py\n@Desc : mashenquan, 2023/8/28. Separate the `CostManager` class to support user-level cost accounting.\n"}, {"id": "{\"lineno\":2,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : openai.py\\n@Desc : mashenquan, 2023/8/28. Separate the `CostManager` class to support user-level cost accounting.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/cost_manager.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"NamedTuple\"]}}"}, {"id": "metagpt/utils/cost_manager.py:names:['NamedTuple']"}, {"id": "metagpt/utils/cost_manager.py:module:pydantic"}, {"id": "metagpt/utils/cost_manager.py:names:['BaseModel']"}, {"id": "metagpt/utils/cost_manager.py:module:metagpt.logs"}, {"id": "metagpt/utils/cost_manager.py:names:['logger']"}, {"id": "metagpt/utils/cost_manager.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\"]}}"}, {"id": "metagpt/utils/cost_manager.py:names:['TOKEN_COSTS']"}, {"id": "{\"lineno\":17,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Costs\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":84,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CostManager\"],\"properties\":{}}"}, {"id": "{\"lineno\":87,\"end_lineno\":101,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TokenCostManager\"],\"properties\":{}}"}, {"id": "metagpt/utils/file.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : file.py\n@Describe : General file operations.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : file.py\\n@Describe : General file operations.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/file.py:module:pathlib"}, {"id": "metagpt/utils/file.py:names:['Path']"}, {"id": "metagpt/utils/file.py:aiofiles"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/file.py:module:metagpt.logs"}, {"id": "metagpt/utils/file.py:names:['logger']"}, {"id": "metagpt/utils/file.py:module:metagpt.utils.exceptions"}, {"id": "metagpt/utils/file.py:names:['handle_exception']"}, {"id": "{\"lineno\":17,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"File\"],\"properties\":{}}"}, {"id": "metagpt/utils/save_code.py"}, {"id": "metagpt/utils/save_code.py:save_code_file"}, {"id": "metagpt/utils/save_code.py:os"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/utils/save_code.py:nbformat"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"nbformat\"],\"properties\":{}}"}, {"id": "metagpt/utils/save_code.py:module:metagpt.const"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\"]}}"}, {"id": "metagpt/utils/save_code.py:names:['DATA_PATH']"}, {"id": "metagpt/utils/save_code.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"write_json_file\"]}}"}, {"id": "metagpt/utils/save_code.py:names:['write_json_file']"}, {"id": "{\"lineno\":13,\"end_lineno\":40,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"save_code_file\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:NoMoneyException:__init__"}, {"id": "metagpt/utils/common.py:NoMoneyException:__str__"}, {"id": "metagpt/utils/common.py:check_cmd_exists"}, {"id": "metagpt/utils/common.py:require_python_version"}, {"id": "metagpt/utils/common.py:print_members"}, {"id": "metagpt/utils/common.py:get_function_schema"}, {"id": "metagpt/utils/common.py:parse_recipient"}, {"id": "metagpt/utils/common.py:create_func_call_config"}, {"id": "metagpt/utils/common.py:remove_comments"}, {"id": "metagpt/utils/common.py:get_class_name"}, {"id": "metagpt/utils/common.py:any_to_str"}, {"id": "metagpt/utils/common.py:any_to_str_set"}, {"id": "metagpt/utils/common.py:is_send_to"}, {"id": "metagpt/utils/common.py:any_to_name"}, {"id": "metagpt/utils/common.py:concat_namespace"}, {"id": "metagpt/utils/common.py:split_namespace"}, {"id": "metagpt/utils/common.py:auto_namespace"}, {"id": "metagpt/utils/common.py:add_affix"}, {"id": "metagpt/utils/common.py:remove_affix"}, {"id": "metagpt/utils/common.py:general_after_log"}, {"id": "metagpt/utils/common.py:read_json_file"}, {"id": "metagpt/utils/common.py:write_json_file"}, {"id": "metagpt/utils/common.py:read_csv_to_list"}, {"id": "metagpt/utils/common.py:import_class"}, {"id": "metagpt/utils/common.py:import_class_inst"}, {"id": "metagpt/utils/common.py:format_trackback_info"}, {"id": "metagpt/utils/common.py:serialize_decorator"}, {"id": "metagpt/utils/common.py:role_raise_decorator"}, {"id": "metagpt/utils/common.py:aread"}, {"id": "metagpt/utils/common.py:awrite"}, {"id": "metagpt/utils/common.py:read_file_block"}, {"id": "metagpt/utils/common.py:list_files"}, {"id": "metagpt/utils/common.py:parse_json_code_block"}, {"id": "metagpt/utils/common.py:remove_white_spaces"}, {"id": "metagpt/utils/common.py:aread_bin"}, {"id": "metagpt/utils/common.py:awrite_bin"}, {"id": "metagpt/utils/common.py:is_coroutine_func"}, {"id": "metagpt/utils/common.py:load_mc_skills_code"}, {"id": "metagpt/utils/common.py:encode_image"}, {"id": "metagpt/utils/common.py:decode_image"}, {"id": "metagpt/utils/common.py:ast.Constant:\n@Time : 2023/4/29 16:07\n@Author : alexanderwu\n@File : common.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\n Add generic class-to-string and object-to-string conversion functionality.\n@Modified By: mashenquan, 2023/11/27. Bug fix: `parse_recipient` failed to parse the recipient in certain GPT-3.5\n responses.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 16:07\\n@Author : alexanderwu\\n@File : common.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\\n Add generic class-to-string and object-to-string conversion functionality.\\n@Modified By: mashenquan, 2023/11/27. Bug fix: `parse_recipient` failed to parse the recipient in certain GPT-3.5\\n responses.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:module:__future__"}, {"id": "metagpt/utils/common.py:names:['annotations']"}, {"id": "metagpt/utils/common.py:ast"}, {"id": "metagpt/utils/common.py:base64"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:contextlib"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"contextlib\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:csv"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"csv\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:importlib"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:inspect"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.Import\",\"tokens\":[\"inspect\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:json"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:os"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:platform"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:re"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:sys"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:traceback"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:typing"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.Import\",\"tokens\":[\"typing\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:module:io"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"io\",\"names\":[\"BytesIO\"]}}"}, {"id": "metagpt/utils/common.py:names:['BytesIO']"}, {"id": "metagpt/utils/common.py:module:pathlib"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/utils/common.py:names:['Path']"}, {"id": "metagpt/utils/common.py:module:typing"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"List\",\"Tuple\",\"Union\"]}}"}, {"id": "metagpt/utils/common.py:names:['Any', 'Callable', 'List', 'Tuple', 'Union']"}, {"id": "metagpt/utils/common.py:module:urllib.parse"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"quote\",\"unquote\"]}}"}, {"id": "metagpt/utils/common.py:names:['quote', 'unquote']"}, {"id": "metagpt/utils/common.py:aiofiles"}, {"id": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:loguru"}, {"id": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.Import\",\"tokens\":[\"loguru\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:requests"}, {"id": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:module:PIL"}, {"id": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"PIL\",\"names\":[\"Image\"]}}"}, {"id": "metagpt/utils/common.py:names:['Image']"}, {"id": "metagpt/utils/common.py:module:pydantic_core"}, {"id": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic_core\",\"names\":[\"to_jsonable_python\"]}}"}, {"id": "metagpt/utils/common.py:names:['to_jsonable_python']"}, {"id": "metagpt/utils/common.py:module:tenacity"}, {"id": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"RetryError\",\"_utils\"]}}"}, {"id": "metagpt/utils/common.py:names:['RetryCallState', 'RetryError', '_utils']"}, {"id": "metagpt/utils/common.py:module:metagpt.const"}, {"id": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\"]}}"}, {"id": "metagpt/utils/common.py:names:['MESSAGE_ROUTE_TO_ALL']"}, {"id": "metagpt/utils/common.py:module:metagpt.logs"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/utils/common.py:names:['logger']"}, {"id": "metagpt/utils/common.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/utils/common.py:names:['handle_exception']"}, {"id": "{\"lineno\":44,\"end_lineno\":54,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"check_cmd_exists\"],\"properties\":{}}"}, {"id": "{\"lineno\":57,\"end_lineno\":60,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"require_python_version\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":237,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OutputParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":240,\"end_lineno\":310,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":313,\"end_lineno\":322,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"NoMoneyException\"],\"properties\":{}}"}, {"id": "{\"lineno\":325,\"end_lineno\":341,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"print_members\"],\"properties\":{}}"}, {"id": "{\"lineno\":344,\"end_lineno\":349,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_function_schema\"],\"properties\":{}}"}, {"id": "{\"lineno\":352,\"end_lineno\":362,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_recipient\"],\"properties\":{}}"}, {"id": "{\"lineno\":365,\"end_lineno\":372,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"create_func_call_config\"],\"properties\":{}}"}, {"id": "{\"lineno\":375,\"end_lineno\":387,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_comments\"],\"properties\":{}}"}, {"id": "{\"lineno\":390,\"end_lineno\":392,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_class_name\"],\"properties\":{}}"}, {"id": "{\"lineno\":395,\"end_lineno\":402,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_str\"],\"properties\":{}}"}, {"id": "{\"lineno\":405,\"end_lineno\":420,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_str_set\"],\"properties\":{}}"}, {"id": "{\"lineno\":423,\"end_lineno\":431,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_send_to\"],\"properties\":{}}"}, {"id": "{\"lineno\":434,\"end_lineno\":442,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_name\"],\"properties\":{}}"}, {"id": "{\"lineno\":445,\"end_lineno\":458,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"concat_namespace\"],\"properties\":{}}"}, {"id": "{\"lineno\":461,\"end_lineno\":478,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"split_namespace\"],\"properties\":{}}"}, {"id": "{\"lineno\":481,\"end_lineno\":512,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"auto_namespace\"],\"properties\":{}}"}, {"id": "{\"lineno\":515,\"end_lineno\":541,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"add_affix\"],\"properties\":{}}"}, {"id": "{\"lineno\":544,\"end_lineno\":567,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_affix\"],\"properties\":{}}"}, {"id": "{\"lineno\":570,\"end_lineno\":600,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"general_after_log\"],\"properties\":{}}"}, {"id": "{\"lineno\":603,\"end_lineno\":612,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_json_file\"],\"properties\":{}}"}, {"id": "{\"lineno\":615,\"end_lineno\":621,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"write_json_file\"],\"properties\":{}}"}, {"id": "{\"lineno\":624,\"end_lineno\":644,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_csv_to_list\"],\"properties\":{}}"}, {"id": "{\"lineno\":647,\"end_lineno\":650,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"import_class\"],\"properties\":{}}"}, {"id": "{\"lineno\":653,\"end_lineno\":656,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"import_class_inst\"],\"properties\":{}}"}, {"id": "{\"lineno\":659,\"end_lineno\":660,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"format_trackback_info\"],\"properties\":{}}"}, {"id": "{\"lineno\":663,\"end_lineno\":674,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"serialize_decorator\"],\"properties\":{}}"}, {"id": "{\"lineno\":677,\"end_lineno\":704,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"role_raise_decorator\"],\"properties\":{}}"}, {"id": "{\"lineno\":708,\"end_lineno\":712,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aread\"],\"properties\":{}}"}, {"id": "{\"lineno\":715,\"end_lineno\":720,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"awrite\"],\"properties\":{}}"}, {"id": "{\"lineno\":723,\"end_lineno\":737,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"read_file_block\"],\"properties\":{}}"}, {"id": "{\"lineno\":740,\"end_lineno\":754,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"list_files\"],\"properties\":{}}"}, {"id": "{\"lineno\":757,\"end_lineno\":759,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_json_code_block\"],\"properties\":{}}"}, {"id": "{\"lineno\":762,\"end_lineno\":772,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_white_spaces\"],\"properties\":{}}"}, {"id": "{\"lineno\":775,\"end_lineno\":793,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aread_bin\"],\"properties\":{}}"}, {"id": "{\"lineno\":796,\"end_lineno\":811,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"awrite_bin\"],\"properties\":{}}"}, {"id": "{\"lineno\":814,\"end_lineno\":815,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_coroutine_func\"],\"properties\":{}}"}, {"id": "{\"lineno\":818,\"end_lineno\":825,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"load_mc_skills_code\"],\"properties\":{}}"}, {"id": "{\"lineno\":828,\"end_lineno\":839,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"encode_image\"],\"properties\":{}}"}, {"id": "{\"lineno\":842,\"end_lineno\":853,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"decode_image\"],\"properties\":{}}"}, {"id": "metagpt/utils/redis.py:Redis:__init__"}, {"id": "metagpt/utils/redis.py:Redis:_connect"}, {"id": "metagpt/utils/redis.py:ast.Constant:\n@Time : 2023/12/27\n@Author : mashenquan\n@File : redis.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/27\\n@Author : mashenquan\\n@File : redis.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/redis.py:module:__future__"}, {"id": "metagpt/utils/redis.py:names:['annotations']"}, {"id": "metagpt/utils/redis.py:traceback"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/utils/redis.py:module:datetime"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"timedelta\"]}}"}, {"id": "metagpt/utils/redis.py:names:['timedelta']"}, {"id": "metagpt/utils/redis.py:aioredis"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aioredis\"],\"properties\":{}}"}, {"id": "metagpt/utils/redis.py:module:metagpt.configs.redis_config"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"id": "metagpt/utils/redis.py:names:['RedisConfig']"}, {"id": "metagpt/utils/redis.py:module:metagpt.logs"}, {"id": "metagpt/utils/redis.py:names:['logger']"}, {"id": "{\"lineno\":19,\"end_lineno\":63,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Redis\"],\"properties\":{}}"}, {"id": "metagpt/utils/text.py"}, {"id": "metagpt/utils/text.py:reduce_message_length"}, {"id": "metagpt/utils/text.py:generate_prompt_chunk"}, {"id": "metagpt/utils/text.py:split_paragraph"}, {"id": "metagpt/utils/text.py:decode_unicode_escape"}, {"id": "metagpt/utils/text.py:_split_by_count"}, {"id": "metagpt/utils/text.py:_split_text_with_ends"}, {"id": "metagpt/utils/text.py:module:typing"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Sequence\"]}}"}, {"id": "metagpt/utils/text.py:names:['Generator', 'Sequence']"}, {"id": "metagpt/utils/text.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_MAX\",\"count_string_tokens\"]}}"}, {"id": "metagpt/utils/text.py:names:['TOKEN_MAX', 'count_string_tokens']"}, {"id": "{\"lineno\":6,\"end_lineno\":31,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"reduce_message_length\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":76,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"generate_prompt_chunk\"],\"properties\":{}}"}, {"id": "{\"lineno\":79,\"end_lineno\":96,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"split_paragraph\"],\"properties\":{}}"}, {"id": "{\"lineno\":99,\"end_lineno\":108,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"decode_unicode_escape\"],\"properties\":{}}"}, {"id": "{\"lineno\":111,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_split_by_count\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":129,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_split_text_with_ends\"],\"properties\":{}}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:__init__"}, {"id": "metagpt/utils/graph_repository.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : graph_repository.py\n@Desc : Superclass for graph repository. This script defines a superclass for a graph repository, providing a\n foundation for specific implementations.\n\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : graph_repository.py\\n@Desc : Superclass for graph repository. This script defines a superclass for a graph repository, providing a\\n foundation for specific implementations.\\n\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/graph_repository.py:module:abc"}, {"id": "metagpt/utils/graph_repository.py:names:['ABC', 'abstractmethod']"}, {"id": "metagpt/utils/graph_repository.py:module:collections"}, {"id": "metagpt/utils/graph_repository.py:names:['defaultdict']"}, {"id": "metagpt/utils/graph_repository.py:module:pathlib"}, {"id": "metagpt/utils/graph_repository.py:names:['Path']"}, {"id": "metagpt/utils/graph_repository.py:module:typing"}, {"id": "metagpt/utils/graph_repository.py:names:['List']"}, {"id": "metagpt/utils/graph_repository.py:module:pydantic"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/utils/graph_repository.py:names:['BaseModel']"}, {"id": "metagpt/utils/graph_repository.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"DotClassRelationship\",\"RepoFileInfo\"]}}"}, {"id": "metagpt/utils/graph_repository.py:names:['DotClassInfo', 'DotClassRelationship', 'RepoFileInfo']"}, {"id": "metagpt/utils/graph_repository.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"id": "metagpt/utils/graph_repository.py:names:['concat_namespace', 'split_namespace']"}, {"id": "{\"lineno\":23,\"end_lineno\":51,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GraphKeyword\"],\"properties\":{}}"}, {"id": "{\"lineno\":54,\"end_lineno\":78,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":81,\"end_lineno\":499,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GraphRepository\"],\"properties\":{}}"}, {"id": "metagpt/utils/singleton.py:Singleton:__call__"}, {"id": "metagpt/utils/singleton.py:ast.Constant:\n@Time : 2023/5/11 16:15\n@Author : alexanderwu\n@File : singleton.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 16:15\\n@Author : alexanderwu\\n@File : singleton.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/singleton.py:abc"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"abc\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":22,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Singleton\"],\"properties\":{}}"}, {"id": "metagpt/utils/recovery_util.py"}, {"id": "metagpt/utils/recovery_util.py:load_history"}, {"id": "metagpt/utils/recovery_util.py:save_history"}, {"id": "metagpt/utils/recovery_util.py:json"}, {"id": "metagpt/utils/recovery_util.py:module:datetime"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/utils/recovery_util.py:names:['datetime']"}, {"id": "metagpt/utils/recovery_util.py:module:pathlib"}, {"id": "metagpt/utils/recovery_util.py:names:['Path']"}, {"id": "metagpt/utils/recovery_util.py:nbformat"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"nbformat\"],\"properties\":{}}"}, {"id": "metagpt/utils/recovery_util.py:module:metagpt.const"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\"]}}"}, {"id": "metagpt/utils/recovery_util.py:names:['DATA_PATH']"}, {"id": "metagpt/utils/recovery_util.py:module:metagpt.roles.role"}, {"id": "metagpt/utils/recovery_util.py:names:['Role']"}, {"id": "metagpt/utils/recovery_util.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"read_json_file\"]}}"}, {"id": "metagpt/utils/recovery_util.py:names:['read_json_file']"}, {"id": "metagpt/utils/recovery_util.py:module:metagpt.utils.save_code"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.save_code\",\"names\":[\"save_code_file\"]}}"}, {"id": "metagpt/utils/recovery_util.py:names:['save_code_file']"}, {"id": "{\"lineno\":17,\"end_lineno\":32,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"load_history\"],\"properties\":{}}"}, {"id": "{\"lineno\":35,\"end_lineno\":58,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"save_history\"],\"properties\":{}}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:__init__"}, {"id": "metagpt/utils/file_repository.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : git_repository.py\n@Desc: File repository management. RFC 135 2.2.3.2, 2.2.3.4 and 2.2.3.13.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : git_repository.py\\n@Desc: File repository management. RFC 135 2.2.3.2, 2.2.3.4 and 2.2.3.13.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/file_repository.py:module:__future__"}, {"id": "metagpt/utils/file_repository.py:names:['annotations']"}, {"id": "metagpt/utils/file_repository.py:json"}, {"id": "metagpt/utils/file_repository.py:os"}, {"id": "metagpt/utils/file_repository.py:module:datetime"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['datetime']"}, {"id": "metagpt/utils/file_repository.py:module:pathlib"}, {"id": "metagpt/utils/file_repository.py:names:['Path']"}, {"id": "metagpt/utils/file_repository.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Set\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['Dict', 'List', 'Set']"}, {"id": "metagpt/utils/file_repository.py:aiofiles"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/file_repository.py:module:metagpt.logs"}, {"id": "metagpt/utils/file_repository.py:names:['logger']"}, {"id": "metagpt/utils/file_repository.py:module:metagpt.schema"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['Document']"}, {"id": "metagpt/utils/file_repository.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['aread']"}, {"id": "metagpt/utils/file_repository.py:module:metagpt.utils.json_to_markdown"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.json_to_markdown\",\"names\":[\"json_to_markdown\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['json_to_markdown']"}, {"id": "{\"lineno\":25,\"end_lineno\":240,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FileRepository\"],\"properties\":{}}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:__init__"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:_leave"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:__init__"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:_leave"}, {"id": "metagpt/utils/pycst.py:get_docstring_statement"}, {"id": "metagpt/utils/pycst.py:has_decorator"}, {"id": "metagpt/utils/pycst.py:merge_docstring"}, {"id": "metagpt/utils/pycst.py:DocstringNode"}, {"id": "metagpt/utils/pycst.py:module:__future__"}, {"id": "metagpt/utils/pycst.py:names:['annotations']"}, {"id": "metagpt/utils/pycst.py:module:typing"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"id": "metagpt/utils/pycst.py:names:['Union']"}, {"id": "metagpt/utils/pycst.py:libcst as cst"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"libcst as cst\"],\"properties\":{}}"}, {"id": "metagpt/utils/pycst.py:module:libcst._nodes.module"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"libcst._nodes.module\",\"names\":[\"Module\"]}}"}, {"id": "metagpt/utils/pycst.py:names:['Module']"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"DocstringNode\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":49,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_docstring_statement\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":57,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"has_decorator\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":98,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringCollector\"],\"properties\":{}}"}, {"id": "{\"lineno\":101,\"end_lineno\":156,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringTransformer\"],\"properties\":{}}"}, {"id": "{\"lineno\":159,\"end_lineno\":176,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"merge_docstring\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py"}, {"id": "metagpt/utils/exceptions.py:handle_exception"}, {"id": "metagpt/utils/exceptions.py:ReturnType"}, {"id": "metagpt/utils/exceptions.py:ast.Constant:\n@Time : 2023/12/19 14:46\n@Author : alexanderwu\n@File : exceptions.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19 14:46\\n@Author : alexanderwu\\n@File : exceptions.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py:asyncio"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py:functools"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"functools\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py:traceback"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Tuple\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"id": "metagpt/utils/exceptions.py:names:['Any', 'Callable', 'Tuple', 'Type', 'TypeVar', 'Union']"}, {"id": "metagpt/utils/exceptions.py:module:metagpt.logs"}, {"id": "metagpt/utils/exceptions.py:names:['logger']"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"ReturnType\"],\"properties\":{}}"}, {"id": "{\"lineno\":20,\"end_lineno\":61,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"handle_exception\"],\"properties\":{}}"}, {"id": "metagpt/utils/human_interaction.py:json"}, {"id": "metagpt/utils/human_interaction.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Tuple\",\"Type\"]}}"}, {"id": "metagpt/utils/human_interaction.py:names:['Any', 'Tuple', 'Type']"}, {"id": "metagpt/utils/human_interaction.py:module:pydantic"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/utils/human_interaction.py:names:['BaseModel']"}, {"id": "metagpt/utils/human_interaction.py:module:metagpt.logs"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/utils/human_interaction.py:names:['logger']"}, {"id": "metagpt/utils/human_interaction.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"id": "metagpt/utils/human_interaction.py:names:['import_class']"}, {"id": "{\"lineno\":14,\"end_lineno\":107,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"HumanInteraction\"],\"properties\":{}}"}, {"id": "metagpt/utils/highlight.py"}, {"id": "metagpt/utils/highlight.py:highlight"}, {"id": "metagpt/utils/highlight.py:module:pygments"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments\",\"names\":[\"highlight as highlight_\"]}}"}, {"id": "metagpt/utils/highlight.py:names:['highlight as highlight_']"}, {"id": "metagpt/utils/highlight.py:module:pygments.formatters"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.formatters\",\"names\":[\"HtmlFormatter\",\"TerminalFormatter\"]}}"}, {"id": "metagpt/utils/highlight.py:names:['HtmlFormatter', 'TerminalFormatter']"}, {"id": "metagpt/utils/highlight.py:module:pygments.lexers"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.lexers\",\"names\":[\"PythonLexer\",\"SqlLexer\"]}}"}, {"id": "metagpt/utils/highlight.py:names:['PythonLexer', 'SqlLexer']"}, {"id": "{\"lineno\":7,\"end_lineno\":25,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"highlight\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_pyppeteer.py"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:mermaid_to_file"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : alitrack\n@File : mmdc_pyppeteer.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : alitrack\\n@File : mmdc_pyppeteer.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:os"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:module:urllib.parse"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:names:['urljoin']"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:module:pyppeteer"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pyppeteer\",\"names\":[\"launch\"]}}"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:names:['launch']"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:module:metagpt.config2"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:names:['config']"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:module:metagpt.logs"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:names:['logger']"}, {"id": "{\"lineno\":17,\"end_lineno\":128,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:S3:__init__"}, {"id": "metagpt/utils/s3.py:base64"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:os.path"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"os.path\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:traceback"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:uuid"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:module:pathlib"}, {"id": "metagpt/utils/s3.py:names:['Path']"}, {"id": "metagpt/utils/s3.py:module:typing"}, {"id": "metagpt/utils/s3.py:names:['Optional']"}, {"id": "metagpt/utils/s3.py:aioboto3"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"aioboto3\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:aiofiles"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:module:metagpt.config2"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"S3Config\"]}}"}, {"id": "metagpt/utils/s3.py:names:['S3Config']"}, {"id": "metagpt/utils/s3.py:module:metagpt.const"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"id": "metagpt/utils/s3.py:names:['BASE64_FORMAT']"}, {"id": "metagpt/utils/s3.py:module:metagpt.logs"}, {"id": "metagpt/utils/s3.py:names:['logger']"}, {"id": "{\"lineno\":16,\"end_lineno\":154,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"S3\"],\"properties\":{}}"}, {"id": "metagpt/utils/json_to_markdown.py"}, {"id": "metagpt/utils/json_to_markdown.py:json_to_markdown"}, {"id": "metagpt/utils/json_to_markdown.py:ast.Constant:\n@Time : 2023/9/11 11:50\n@Author : femto Zheng\n@File : json_to_markdown.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/11 11:50\\n@Author : femto Zheng\\n@File : json_to_markdown.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":42,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"json_to_markdown\"],\"properties\":{}}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:__init__"}, {"id": "metagpt/utils/custom_decoder.py:py_make_scanner"}, {"id": "metagpt/utils/custom_decoder.py:JSONObject"}, {"id": "metagpt/utils/custom_decoder.py:py_scanstring"}, {"id": "metagpt/utils/custom_decoder.py:NUMBER_RE"}, {"id": "metagpt/utils/custom_decoder.py:FLAGS"}, {"id": "metagpt/utils/custom_decoder.py:STRINGCHUNK"}, {"id": "metagpt/utils/custom_decoder.py:STRINGCHUNK_SINGLEQUOTE"}, {"id": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_DOUBLE_QUOTE"}, {"id": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_SINGLEQUOTE"}, {"id": "metagpt/utils/custom_decoder.py:BACKSLASH"}, {"id": "metagpt/utils/custom_decoder.py:WHITESPACE"}, {"id": "metagpt/utils/custom_decoder.py:WHITESPACE_STR"}, {"id": "metagpt/utils/custom_decoder.py:scanstring"}, {"id": "metagpt/utils/custom_decoder.py:json"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/utils/custom_decoder.py:re"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/utils/custom_decoder.py:module:json"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"id": "metagpt/utils/custom_decoder.py:names:['JSONDecodeError']"}, {"id": "metagpt/utils/custom_decoder.py:module:json.decoder"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json.decoder\",\"names\":[\"_decode_uXXXX\"]}}"}, {"id": "metagpt/utils/custom_decoder.py:names:['_decode_uXXXX']"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Assign\",\"tokens\":[\"NUMBER_RE\"],\"properties\":{}}"}, {"id": "{\"lineno\":9,\"end_lineno\":69,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"py_make_scanner\"],\"properties\":{}}"}, {"id": "{\"lineno\":72,\"end_lineno\":72,\"type_name\":\"ast.Assign\",\"tokens\":[\"FLAGS\"],\"properties\":{}}"}, {"id": "{\"lineno\":73,\"end_lineno\":73,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK\"],\"properties\":{}}"}, {"id": "{\"lineno\":74,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_SINGLEQUOTE\"],\"properties\":{}}"}, {"id": "{\"lineno\":75,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_TRIPLE_DOUBLE_QUOTE\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_TRIPLE_SINGLEQUOTE\"],\"properties\":{}}"}, {"id": "{\"lineno\":77,\"end_lineno\":86,\"type_name\":\"ast.Assign\",\"tokens\":[\"BACKSLASH\"],\"properties\":{}}"}, {"id": "{\"lineno\":87,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"WHITESPACE\"],\"properties\":{}}"}, {"id": "{\"lineno\":88,\"end_lineno\":88,\"type_name\":\"ast.Assign\",\"tokens\":[\"WHITESPACE_STR\"],\"properties\":{}}"}, {"id": "{\"lineno\":91,\"end_lineno\":192,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"JSONObject\"],\"properties\":{}}"}, {"id": "{\"lineno\":195,\"end_lineno\":267,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"py_scanstring\"],\"properties\":{}}"}, {"id": "{\"lineno\":270,\"end_lineno\":270,\"type_name\":\"ast.Assign\",\"tokens\":[\"scanstring\"],\"properties\":{}}"}, {"id": "{\"lineno\":273,\"end_lineno\":297,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CustomDecoder\"],\"properties\":{}}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:__init__"}, {"id": "metagpt/utils/git_repository.py:GitRepository:_init"}, {"id": "metagpt/utils/git_repository.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : git_repository.py\n@Desc: Git repository management. RFC 135 2.2.3.3.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : git_repository.py\\n@Desc: Git repository management. RFC 135 2.2.3.3.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/git_repository.py:module:__future__"}, {"id": "metagpt/utils/git_repository.py:names:['annotations']"}, {"id": "metagpt/utils/git_repository.py:shutil"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"id": "metagpt/utils/git_repository.py:module:enum"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['Enum']"}, {"id": "metagpt/utils/git_repository.py:module:pathlib"}, {"id": "metagpt/utils/git_repository.py:names:['Path']"}, {"id": "metagpt/utils/git_repository.py:module:typing"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['Dict', 'List']"}, {"id": "metagpt/utils/git_repository.py:module:git.repo"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo\",\"names\":[\"Repo\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['Repo']"}, {"id": "metagpt/utils/git_repository.py:module:git.repo.fun"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo.fun\",\"names\":[\"is_git_dir\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['is_git_dir']"}, {"id": "metagpt/utils/git_repository.py:module:gitignore_parser"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"gitignore_parser\",\"names\":[\"parse_gitignore\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['parse_gitignore']"}, {"id": "metagpt/utils/git_repository.py:module:metagpt.logs"}, {"id": "metagpt/utils/git_repository.py:names:['logger']"}, {"id": "metagpt/utils/git_repository.py:module:metagpt.utils.dependency_file"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.dependency_file\",\"names\":[\"DependencyFile\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['DependencyFile']"}, {"id": "metagpt/utils/git_repository.py:module:metagpt.utils.file_repository"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['FileRepository']"}, {"id": "{\"lineno\":25,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ChangeType\"],\"properties\":{}}"}, {"id": "{\"lineno\":35,\"end_lineno\":285,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GitRepository\"],\"properties\":{}}"}, {"id": "metagpt/utils/read_document.py"}, {"id": "metagpt/utils/read_document.py:read_docx"}, {"id": "metagpt/utils/read_document.py:ast.Constant:\n@Time : 2023/4/29 15:45\n@Author : alexanderwu\n@File : read_document.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:45\\n@Author : alexanderwu\\n@File : read_document.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/read_document.py:docx"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"docx\"],\"properties\":{}}"}, {"id": "{\"lineno\":12,\"end_lineno\":23,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_docx\"],\"properties\":{}}"}, {"id": "metagpt/utils/parse_docstring.py:remove_spaces"}, {"id": "metagpt/utils/parse_docstring.py:re"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/utils/parse_docstring.py:module:typing"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"id": "metagpt/utils/parse_docstring.py:names:['Tuple']"}, {"id": "metagpt/utils/parse_docstring.py:module:pydantic"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/utils/parse_docstring.py:names:['BaseModel']"}, {"id": "{\"lineno\":7,\"end_lineno\":8,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_spaces\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":45,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"reSTDocstringParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GoogleDocstringParser\"],\"properties\":{}}"}, {"id": "metagpt/configs/s3_config.py:ast.Constant:\n@Time : 2024/1/4 19:07\n@Author : alexanderwu\n@File : s3_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:07\\n@Author : alexanderwu\\n@File : s3_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/s3_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"id": "metagpt/configs/s3_config.py:names:['YamlModelWithoutDefault']"}, {"id": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"S3Config\"],\"properties\":{}}"}, {"id": "metagpt/configs/browser_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : browser_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : browser_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/browser_config.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"id": "metagpt/configs/browser_config.py:names:['Literal']"}, {"id": "metagpt/configs/browser_config.py:module:metagpt.tools"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"id": "metagpt/configs/browser_config.py:names:['WebBrowserEngineType']"}, {"id": "metagpt/configs/browser_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/configs/browser_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BrowserConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/workspace_config.py:ast.Constant:\n@Time : 2024/1/4 19:09\n@Author : alexanderwu\n@File : workspace_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:09\\n@Author : alexanderwu\\n@File : workspace_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/workspace_config.py:module:datetime"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['datetime']"}, {"id": "metagpt/configs/workspace_config.py:module:pathlib"}, {"id": "metagpt/configs/workspace_config.py:names:['Path']"}, {"id": "metagpt/configs/workspace_config.py:module:uuid"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['uuid4']"}, {"id": "metagpt/configs/workspace_config.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\",\"model_validator\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['field_validator', 'model_validator']"}, {"id": "metagpt/configs/workspace_config.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_WORKSPACE_ROOT\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['DEFAULT_WORKSPACE_ROOT']"}, {"id": "metagpt/configs/workspace_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":18,\"end_lineno\":38,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WorkspaceConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/mermaid_config.py:ast.Constant:\n@Time : 2024/1/4 19:07\n@Author : alexanderwu\n@File : mermaid_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:07\\n@Author : alexanderwu\\n@File : mermaid_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/mermaid_config.py:module:typing"}, {"id": "metagpt/configs/mermaid_config.py:names:['Literal']"}, {"id": "metagpt/configs/mermaid_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/configs/mermaid_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":13,\"end_lineno\":19,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MermaidConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/__init__.py"}, {"id": "metagpt/configs/__init__.py:ast.Constant:\n@Time : 2024/1/4 16:33\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:33\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/llm_config.py:LLMType:__missing__"}, {"id": "metagpt/configs/llm_config.py:ast.Constant:\n@Time : 2024/1/4 16:33\n@Author : alexanderwu\n@File : llm_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:33\\n@Author : alexanderwu\\n@File : llm_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/llm_config.py:module:enum"}, {"id": "metagpt/configs/llm_config.py:names:['Enum']"}, {"id": "metagpt/configs/llm_config.py:module:typing"}, {"id": "metagpt/configs/llm_config.py:names:['Optional']"}, {"id": "metagpt/configs/llm_config.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\"]}}"}, {"id": "metagpt/configs/llm_config.py:names:['field_validator']"}, {"id": "metagpt/configs/llm_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/configs/llm_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":16,\"end_lineno\":29,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMType\"],\"properties\":{}}"}, {"id": "{\"lineno\":32,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/redis_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : redis_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : redis_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/redis_config.py:module:metagpt.utils.yaml_model"}, {"id": "metagpt/configs/redis_config.py:names:['YamlModelWithoutDefault']"}, {"id": "{\"lineno\":11,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RedisConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/search_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : search_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : search_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/search_config.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Optional\"]}}"}, {"id": "metagpt/configs/search_config.py:names:['Callable', 'Optional']"}, {"id": "metagpt/configs/search_config.py:module:metagpt.tools"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"id": "metagpt/configs/search_config.py:names:['SearchEngineType']"}, {"id": "metagpt/configs/search_config.py:module:metagpt.utils.yaml_model"}, {"id": "metagpt/configs/search_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchConfig\"],\"properties\":{}}"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class_views"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_relationship"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_diff_path"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_align_root"}, {"id": "metagpt/actions/rebuild_class_view.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : rebuild_class_view.py\n@Desc : Reconstructs class diagram from a source code project.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : rebuild_class_view.py\\n@Desc : Reconstructs class diagram from a source code project.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/rebuild_class_view.py:module:pathlib"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['Path']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:typing"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Set\",\"Tuple\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['Optional', 'Set', 'Tuple']"}, {"id": "metagpt/actions/rebuild_class_view.py:aiofiles"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.actions"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['Action']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.config2"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['config']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.const"}, {"id": "{\"lineno\":17,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"DATA_API_DESIGN_FILE_REPO\",\"GENERALIZATION\",\"GRAPH_REPO_FILE_REPO\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['AGGREGATION', 'COMPOSITION', 'DATA_API_DESIGN_FILE_REPO', 'GENERALIZATION', 'GRAPH_REPO_FILE_REPO']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.logs"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['logger']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"RepoParser\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['DotClassInfo', 'RepoParser']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.schema"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['UMLClassView']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['concat_namespace', 'split_namespace']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.di_graph_repository"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['DiGraphRepository']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.graph_repository"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['GraphKeyword', 'GraphRepository']"}, {"id": "{\"lineno\":32,\"end_lineno\":209,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RebuildClassView\"],\"properties\":{}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_main_sequence_view"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_sequence_view"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_main_entry"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_use_case"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_sequence_view"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_participants"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_use_cases"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_detail"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_uml_class_view"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_source_code"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_full_filename"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_new_participant"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_participant"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ast.Constant:\n@Time : 2024/1/4\n@Author : mashenquan\n@File : rebuild_sequence_view.py\n@Desc : Reconstruct sequence view information through reverse engineering.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4\\n@Author : mashenquan\\n@File : rebuild_sequence_view.py\\n@Desc : Reconstruct sequence view information through reverse engineering.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:__future__"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['annotations']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:re"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:datetime"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['datetime']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:pathlib"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['Path']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:typing"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['List', 'Optional']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:pydantic"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['BaseModel']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:tenacity"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.actions"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['Action']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.config2"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['config']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.const"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"GRAPH_REPO_FILE_REPO\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['GRAPH_REPO_FILE_REPO']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.logs"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['logger']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"CodeBlockInfo\",\"DotClassInfo\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['CodeBlockInfo', 'DotClassInfo']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.schema"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['UMLClassView']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":25,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"add_affix\",\"aread\",\"auto_namespace\",\"concat_namespace\",\"general_after_log\",\"list_files\",\"parse_json_code_block\",\"read_file_block\",\"split_namespace\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['add_affix', 'aread', 'auto_namespace', 'concat_namespace', 'general_after_log', 'list_files', 'parse_json_code_block', 'read_file_block', 'split_namespace']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.di_graph_repository"}, {"id": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['DiGraphRepository']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.graph_repository"}, {"id": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphKeyword\",\"GraphRepository\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['SPO', 'GraphKeyword', 'GraphRepository']"}, {"id": "{\"lineno\":40,\"end_lineno\":58,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReverseUseCase\"],\"properties\":{}}"}, {"id": "{\"lineno\":61,\"end_lineno\":73,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReverseUseCaseDetails\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":571,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RebuildSequenceView\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/write_code.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_code.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.1.3 of RFC 116, modify the data type of the `cause_by`\n value of the `Message` object.\n@Modified By: mashenquan, 2023-11-27.\n 1. Mark the location of Design, Tasks, Legacy Code and Debug logs in the PROMPT_TEMPLATE with markdown\n code-block formatting to enhance the understanding for the LLM.\n 2. Following the think-act principle, solidify the task parameters when creating the WriteCode object, rather\n than passing them in when calling the run function.\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_code.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.1.3 of RFC 116, modify the data type of the `cause_by`\\n value of the `Message` object.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. Mark the location of Design, Tasks, Legacy Code and Debug logs in the PROMPT_TEMPLATE with markdown\\n code-block formatting to enhance the understanding for the LLM.\\n 2. Following the think-act principle, solidify the task parameters when creating the WriteCode object, rather\\n than passing them in when calling the run function.\\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code.py:json"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code.py:module:pydantic"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['Field']"}, {"id": "metagpt/actions/write_code.py:module:tenacity"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['Action']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.actions.project_management_an"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['REFINED_TASK_LIST', 'TASK_LIST']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.actions.write_code_plan_and_change_an"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"REFINED_TEMPLATE\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['REFINED_TEMPLATE']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.const"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"REQUIREMENT_FILENAME\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['BUGFIX_FILENAME', 'REQUIREMENT_FILENAME']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.logs"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['logger']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.schema"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\",\"Document\",\"RunCodeResult\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['CodingContext', 'Document', 'RunCodeResult']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['CodeParser']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['ProjectRepo']"}, {"id": "{\"lineno\":32,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":83,\"end_lineno\":213,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCode\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd_an.py"}, {"id": "metagpt/actions/write_prd_an.py:LANGUAGE"}, {"id": "metagpt/actions/write_prd_an.py:PROGRAMMING_LANGUAGE"}, {"id": "metagpt/actions/write_prd_an.py:ORIGINAL_REQUIREMENTS"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENTS"}, {"id": "metagpt/actions/write_prd_an.py:PROJECT_NAME"}, {"id": "metagpt/actions/write_prd_an.py:PRODUCT_GOALS"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_PRODUCT_GOALS"}, {"id": "metagpt/actions/write_prd_an.py:USER_STORIES"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_USER_STORIES"}, {"id": "metagpt/actions/write_prd_an.py:COMPETITIVE_ANALYSIS"}, {"id": "metagpt/actions/write_prd_an.py:COMPETITIVE_QUADRANT_CHART"}, {"id": "metagpt/actions/write_prd_an.py:REQUIREMENT_ANALYSIS"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_ANALYSIS"}, {"id": "metagpt/actions/write_prd_an.py:REQUIREMENT_POOL"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_POOL"}, {"id": "metagpt/actions/write_prd_an.py:UI_DESIGN_DRAFT"}, {"id": "metagpt/actions/write_prd_an.py:ANYTHING_UNCLEAR"}, {"id": "metagpt/actions/write_prd_an.py:ISSUE_TYPE"}, {"id": "metagpt/actions/write_prd_an.py:IS_RELATIVE"}, {"id": "metagpt/actions/write_prd_an.py:REASON"}, {"id": "metagpt/actions/write_prd_an.py:NODES"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_NODES"}, {"id": "metagpt/actions/write_prd_an.py:WRITE_PRD_NODE"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_PRD_NODE"}, {"id": "metagpt/actions/write_prd_an.py:WP_ISSUE_TYPE_NODE"}, {"id": "metagpt/actions/write_prd_an.py:WP_IS_RELATIVE_NODE"}, {"id": "metagpt/actions/write_prd_an.py:ast.Constant:\n@Time : 2023/12/14 11:40\n@Author : alexanderwu\n@File : write_prd_an.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/14 11:40\\n@Author : alexanderwu\\n@File : write_prd_an.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd_an.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/actions/write_prd_an.py:names:['List']"}, {"id": "metagpt/actions/write_prd_an.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/write_prd_an.py:names:['ActionNode']"}, {"id": "{\"lineno\":12,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANGUAGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":19,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROGRAMMING_LANGUAGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.Assign\",\"tokens\":[\"ORIGINAL_REQUIREMENTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":38,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":46,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROJECT_NAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRODUCT_GOALS\"],\"properties\":{}}"}, {"id": "{\"lineno\":55,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PRODUCT_GOALS\"],\"properties\":{}}"}, {"id": "{\"lineno\":67,\"end_lineno\":78,\"type_name\":\"ast.Assign\",\"tokens\":[\"USER_STORIES\"],\"properties\":{}}"}, {"id": "{\"lineno\":80,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_USER_STORIES\"],\"properties\":{}}"}, {"id": "{\"lineno\":94,\"end_lineno\":103,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":105,\"end_lineno\":124,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_QUADRANT_CHART\"],\"properties\":{}}"}, {"id": "{\"lineno\":126,\"end_lineno\":131,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":133,\"end_lineno\":140,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENT_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":142,\"end_lineno\":147,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_POOL\"],\"properties\":{}}"}, {"id": "{\"lineno\":149,\"end_lineno\":155,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENT_POOL\"],\"properties\":{}}"}, {"id": "{\"lineno\":157,\"end_lineno\":162,\"type_name\":\"ast.Assign\",\"tokens\":[\"UI_DESIGN_DRAFT\"],\"properties\":{}}"}, {"id": "{\"lineno\":164,\"end_lineno\":169,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR\"],\"properties\":{}}"}, {"id": "{\"lineno\":171,\"end_lineno\":176,\"type_name\":\"ast.Assign\",\"tokens\":[\"ISSUE_TYPE\"],\"properties\":{}}"}, {"id": "{\"lineno\":178,\"end_lineno\":183,\"type_name\":\"ast.Assign\",\"tokens\":[\"IS_RELATIVE\"],\"properties\":{}}"}, {"id": "{\"lineno\":185,\"end_lineno\":187,\"type_name\":\"ast.Assign\",\"tokens\":[\"REASON\"],\"properties\":{}}"}, {"id": "{\"lineno\":190,\"end_lineno\":203,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":205,\"end_lineno\":218,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":220,\"end_lineno\":220,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_PRD_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":221,\"end_lineno\":221,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PRD_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":222,\"end_lineno\":222,\"type_name\":\"ast.Assign\",\"tokens\":[\"WP_ISSUE_TYPE_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":223,\"end_lineno\":223,\"type_name\":\"ast.Assign\",\"tokens\":[\"WP_IS_RELATIVE_NODE\"],\"properties\":{}}"}, {"id": "metagpt/actions/summarize_code.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/summarize_code.py:FORMAT_EXAMPLE"}, {"id": "metagpt/actions/summarize_code.py:ast.Constant:\n@Author : alexanderwu\n@File : summarize_code.py\n@Modified By: mashenquan, 2023/12/5. Archive the summarization content of issue discovery for use in WriteCode.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : summarize_code.py\\n@Modified By: mashenquan, 2023/12/5. Archive the summarization content of issue discovery for use in WriteCode.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/summarize_code.py:module:pathlib"}, {"id": "metagpt/actions/summarize_code.py:names:['Path']"}, {"id": "metagpt/actions/summarize_code.py:module:pydantic"}, {"id": "metagpt/actions/summarize_code.py:names:['Field']"}, {"id": "metagpt/actions/summarize_code.py:module:tenacity"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/actions/summarize_code.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/summarize_code.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/summarize_code.py:names:['Action']"}, {"id": "metagpt/actions/summarize_code.py:module:metagpt.logs"}, {"id": "metagpt/actions/summarize_code.py:names:['logger']"}, {"id": "metagpt/actions/summarize_code.py:module:metagpt.schema"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodeSummarizeContext\"]}}"}, {"id": "metagpt/actions/summarize_code.py:names:['CodeSummarizeContext']"}, {"id": "{\"lineno\":17,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":46,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_EXAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":90,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SummarizeCode\"],\"properties\":{}}"}, {"id": "metagpt/actions/research.py:CollectLinks:_search_and_rank_urls"}, {"id": "metagpt/actions/research.py:ConductResearch:__init__"}, {"id": "metagpt/actions/research.py:get_research_system_text"}, {"id": "metagpt/actions/research.py:LANG_PROMPT"}, {"id": "metagpt/actions/research.py:RESEARCH_BASE_SYSTEM"}, {"id": "metagpt/actions/research.py:RESEARCH_TOPIC_SYSTEM"}, {"id": "metagpt/actions/research.py:SEARCH_TOPIC_PROMPT"}, {"id": "metagpt/actions/research.py:SUMMARIZE_SEARCH_PROMPT"}, {"id": "metagpt/actions/research.py:COLLECT_AND_RANKURLS_PROMPT"}, {"id": "metagpt/actions/research.py:WEB_BROWSE_AND_SUMMARIZE_PROMPT"}, {"id": "metagpt/actions/research.py:CONDUCT_RESEARCH_PROMPT"}, {"id": "metagpt/actions/research.py:module:__future__"}, {"id": "metagpt/actions/research.py:names:['annotations']"}, {"id": "metagpt/actions/research.py:asyncio"}, {"id": "metagpt/actions/research.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Optional\",\"Union\"]}}"}, {"id": "metagpt/actions/research.py:names:['Any', 'Callable', 'Optional', 'Union']"}, {"id": "metagpt/actions/research.py:module:pydantic"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"TypeAdapter\",\"model_validator\"]}}"}, {"id": "metagpt/actions/research.py:names:['TypeAdapter', 'model_validator']"}, {"id": "metagpt/actions/research.py:module:metagpt.actions"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/research.py:names:['Action']"}, {"id": "metagpt/actions/research.py:module:metagpt.config2"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/actions/research.py:names:['config']"}, {"id": "metagpt/actions/research.py:module:metagpt.logs"}, {"id": "metagpt/actions/research.py:names:['logger']"}, {"id": "metagpt/actions/research.py:module:metagpt.tools.search_engine"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"id": "metagpt/actions/research.py:names:['SearchEngine']"}, {"id": "metagpt/actions/research.py:module:metagpt.tools.web_browser_engine"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.web_browser_engine\",\"names\":[\"WebBrowserEngine\"]}}"}, {"id": "metagpt/actions/research.py:names:['WebBrowserEngine']"}, {"id": "metagpt/actions/research.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"id": "metagpt/actions/research.py:names:['OutputParser']"}, {"id": "metagpt/actions/research.py:module:metagpt.utils.text"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.text\",\"names\":[\"generate_prompt_chunk\",\"reduce_message_length\"]}}"}, {"id": "metagpt/actions/research.py:names:['generate_prompt_chunk', 'reduce_message_length']"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANG_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":20,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_BASE_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_TOPIC_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":25,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_TOPIC_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":35,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_SEARCH_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":37,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"COLLECT_AND_RANKURLS_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"WEB_BROWSE_AND_SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONDUCT_RESEARCH_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":177,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CollectLinks\"],\"properties\":{}}"}, {"id": "{\"lineno\":180,\"end_lineno\":245,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowseAndSummarize\"],\"properties\":{}}"}, {"id": "{\"lineno\":248,\"end_lineno\":273,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ConductResearch\"],\"properties\":{}}"}, {"id": "{\"lineno\":276,\"end_lineno\":286,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_research_system_text\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : skill_action.py\n@Desc : Call learned skill\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : skill_action.py\\n@Desc : Call learned skill\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:module:__future__"}, {"id": "metagpt/actions/skill_action.py:names:['annotations']"}, {"id": "metagpt/actions/skill_action.py:ast"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:importlib"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:traceback"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:module:copy"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"id": "metagpt/actions/skill_action.py:names:['deepcopy']"}, {"id": "metagpt/actions/skill_action.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"id": "metagpt/actions/skill_action.py:names:['Dict', 'Optional']"}, {"id": "metagpt/actions/skill_action.py:module:metagpt.actions"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/skill_action.py:names:['Action']"}, {"id": "metagpt/actions/skill_action.py:module:metagpt.learn.skill_loader"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"Skill\"]}}"}, {"id": "metagpt/actions/skill_action.py:names:['Skill']"}, {"id": "metagpt/actions/skill_action.py:module:metagpt.logs"}, {"id": "metagpt/actions/skill_action.py:names:['logger']"}, {"id": "metagpt/actions/skill_action.py:module:metagpt.schema"}, {"id": "metagpt/actions/skill_action.py:names:['Message']"}, {"id": "{\"lineno\":24,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ArgumentsParingAction\"],\"properties\":{}}"}, {"id": "{\"lineno\":82,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillAction\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_test.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/write_test.py:ast.Constant:\n@Time : 2023/5/11 22:12\n@Author : alexanderwu\n@File : write_test.py\n@Modified By: mashenquan, 2023-11-27. Following the think-act principle, solidify the task parameters when creating the\n WriteTest object, rather than passing them in when calling the run function.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 22:12\\n@Author : alexanderwu\\n@File : write_test.py\\n@Modified By: mashenquan, 2023-11-27. Following the think-act principle, solidify the task parameters when creating the\\n WriteTest object, rather than passing them in when calling the run function.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_test.py:module:typing"}, {"id": "metagpt/actions/write_test.py:names:['Optional']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.actions.action"}, {"id": "metagpt/actions/write_test.py:names:['Action']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TEST_CODES_FILE_REPO\"]}}"}, {"id": "metagpt/actions/write_test.py:names:['TEST_CODES_FILE_REPO']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.logs"}, {"id": "metagpt/actions/write_test.py:names:['logger']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.schema"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"TestingContext\"]}}"}, {"id": "metagpt/actions/write_test.py:names:['Document', 'TestingContext']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/write_test.py:names:['CodeParser']"}, {"id": "{\"lineno\":19,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTest\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_graph.py:ActionGraph:__init__"}, {"id": "metagpt/actions/action_graph.py:ast.Constant:\n@Time : 2024/1/30 13:52\n@Author : alexanderwu\n@File : action_graph.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/30 13:52\\n@Author : alexanderwu\\n@File : action_graph.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_graph.py:module:__future__"}, {"id": "metagpt/actions/action_graph.py:names:['annotations']"}, {"id": "{\"lineno\":13,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionGraph\"],\"properties\":{}}"}, {"id": "metagpt/actions/debug_error.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/debug_error.py:ast.Constant:\n@Time : 2023/5/11 17:46\n@Author : alexanderwu\n@File : debug_error.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Divide the context into three components: legacy code, unit test code, and console log.\n 2. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:46\\n@Author : alexanderwu\\n@File : debug_error.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Divide the context into three components: legacy code, unit test code, and console log.\\n 2. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/debug_error.py:re"}, {"id": "metagpt/actions/debug_error.py:module:pydantic"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/actions/debug_error.py:names:['Field']"}, {"id": "metagpt/actions/debug_error.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/debug_error.py:names:['Action']"}, {"id": "metagpt/actions/debug_error.py:module:metagpt.logs"}, {"id": "metagpt/actions/debug_error.py:names:['logger']"}, {"id": "metagpt/actions/debug_error.py:module:metagpt.schema"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"id": "metagpt/actions/debug_error.py:names:['RunCodeContext', 'RunCodeResult']"}, {"id": "metagpt/actions/debug_error.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/debug_error.py:names:['CodeParser']"}, {"id": "{\"lineno\":20,\"end_lineno\":45,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":75,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DebugError\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_new_system_design"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_merge"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_update_system_design"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_save_data_api_design"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_save_seq_flow"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_save_mermaid_file"}, {"id": "metagpt/actions/design_api.py:NEW_REQ_TEMPLATE"}, {"id": "metagpt/actions/design_api.py:ast.Constant:\n@Time : 2023/5/11 19:26\n@Author : alexanderwu\n@File : design_api.py\n@Modified By: mashenquan, 2023/11/27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.3 of RFC 135, add incremental iteration functionality.\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:26\\n@Author : alexanderwu\\n@File : design_api.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.3 of RFC 135, add incremental iteration functionality.\\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api.py:json"}, {"id": "metagpt/actions/design_api.py:module:pathlib"}, {"id": "metagpt/actions/design_api.py:names:['Path']"}, {"id": "metagpt/actions/design_api.py:module:typing"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['Optional']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.actions"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['Action', 'ActionOutput']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.actions.design_api_an"}, {"id": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_an\",\"names\":[\"DATA_STRUCTURES_AND_INTERFACES\",\"DESIGN_API_NODE\",\"PROGRAM_CALL_FLOW\",\"REFINED_DATA_STRUCTURES_AND_INTERFACES\",\"REFINED_DESIGN_NODE\",\"REFINED_PROGRAM_CALL_FLOW\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['DATA_STRUCTURES_AND_INTERFACES', 'DESIGN_API_NODE', 'PROGRAM_CALL_FLOW', 'REFINED_DATA_STRUCTURES_AND_INTERFACES', 'REFINED_DESIGN_NODE', 'REFINED_PROGRAM_CALL_FLOW']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.const"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_API_DESIGN_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['DATA_API_DESIGN_FILE_REPO', 'SEQ_FLOW_FILE_REPO']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.logs"}, {"id": "metagpt/actions/design_api.py:names:['logger']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.schema"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\",\"Message\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['Document', 'Documents', 'Message']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.utils.mermaid"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['mermaid_to_file']"}, {"id": "{\"lineno\":30,\"end_lineno\":36,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":39,\"end_lineno\":120,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDesign\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_an.py"}, {"id": "metagpt/actions/design_api_an.py:main"}, {"id": "metagpt/actions/design_api_an.py:IMPLEMENTATION_APPROACH"}, {"id": "metagpt/actions/design_api_an.py:REFINED_IMPLEMENTATION_APPROACH"}, {"id": "metagpt/actions/design_api_an.py:PROJECT_NAME"}, {"id": "metagpt/actions/design_api_an.py:FILE_LIST"}, {"id": "metagpt/actions/design_api_an.py:REFINED_FILE_LIST"}, {"id": "metagpt/actions/design_api_an.py:DATA_STRUCTURES_AND_INTERFACES"}, {"id": "metagpt/actions/design_api_an.py:REFINED_DATA_STRUCTURES_AND_INTERFACES"}, {"id": "metagpt/actions/design_api_an.py:PROGRAM_CALL_FLOW"}, {"id": "metagpt/actions/design_api_an.py:REFINED_PROGRAM_CALL_FLOW"}, {"id": "metagpt/actions/design_api_an.py:ANYTHING_UNCLEAR"}, {"id": "metagpt/actions/design_api_an.py:NODES"}, {"id": "metagpt/actions/design_api_an.py:REFINED_NODES"}, {"id": "metagpt/actions/design_api_an.py:DESIGN_API_NODE"}, {"id": "metagpt/actions/design_api_an.py:REFINED_DESIGN_NODE"}, {"id": "metagpt/actions/design_api_an.py:ast.Constant:\n@Time : 2023/12/12 22:24\n@Author : alexanderwu\n@File : design_api_an.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/12 22:24\\n@Author : alexanderwu\\n@File : design_api_an.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_an.py:module:typing"}, {"id": "metagpt/actions/design_api_an.py:names:['List']"}, {"id": "metagpt/actions/design_api_an.py:module:metagpt.actions.action_node"}, {"id": "metagpt/actions/design_api_an.py:names:['ActionNode']"}, {"id": "metagpt/actions/design_api_an.py:module:metagpt.logs"}, {"id": "metagpt/actions/design_api_an.py:names:['logger']"}, {"id": "metagpt/actions/design_api_an.py:module:metagpt.utils.mermaid"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"MMC1\",\"MMC2\"]}}"}, {"id": "metagpt/actions/design_api_an.py:names:['MMC1', 'MMC2']"}, {"id": "{\"lineno\":14,\"end_lineno\":19,\"type_name\":\"ast.Assign\",\"tokens\":[\"IMPLEMENTATION_APPROACH\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_IMPLEMENTATION_APPROACH\"],\"properties\":{}}"}, {"id": "{\"lineno\":30,\"end_lineno\":32,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROJECT_NAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"FILE_LIST\"],\"properties\":{}}"}, {"id": "{\"lineno\":41,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_FILE_LIST\"],\"properties\":{}}"}, {"id": "{\"lineno\":49,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_STRUCTURES_AND_INTERFACES\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":66,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_DATA_STRUCTURES_AND_INTERFACES\"],\"properties\":{}}"}, {"id": "{\"lineno\":68,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROGRAM_CALL_FLOW\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PROGRAM_CALL_FLOW\"],\"properties\":{}}"}, {"id": "{\"lineno\":86,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR\"],\"properties\":{}}"}, {"id": "{\"lineno\":93,\"end_lineno\":100,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":102,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":110,\"end_lineno\":110,\"type_name\":\"ast.Assign\",\"tokens\":[\"DESIGN_API_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":111,\"end_lineno\":111,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_DESIGN_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":114,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_an.py:__name__:__main__"}, {"id": "{\"lineno\":121,\"end_lineno\":122,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_output.py:ActionOutput:__init__"}, {"id": "metagpt/actions/action_output.py:ast.Constant:\n@Time : 2023/7/11 10:03\n@Author : chengmaoyu\n@File : action_output\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/11 10:03\\n@Author : chengmaoyu\\n@File : action_output\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_output.py:module:pydantic"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/actions/action_output.py:names:['BaseModel']"}, {"id": "{\"lineno\":12,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionOutput\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_outcls_registry.py"}, {"id": "metagpt/actions/action_outcls_registry.py:register_action_outcls"}, {"id": "metagpt/actions/action_outcls_registry.py:action_outcls_registry"}, {"id": "metagpt/actions/action_outcls_registry.py:module:functools"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"wraps\"]}}"}, {"id": "metagpt/actions/action_outcls_registry.py:names:['wraps']"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"action_outcls_registry\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":42,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_action_outcls\"],\"properties\":{}}"}, {"id": "metagpt/actions/add_requirement.py:ast.Constant:\n@Time : 2023/5/20 17:46\n@Author : alexanderwu\n@File : add_requirement.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/20 17:46\\n@Author : alexanderwu\\n@File : add_requirement.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/add_requirement.py:module:metagpt.actions"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/add_requirement.py:names:['Action']"}, {"id": "{\"lineno\":11,\"end_lineno\":12,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UserRequirement\"],\"properties\":{}}"}, {"id": "metagpt/actions/__init__.py"}, {"id": "metagpt/actions/__init__.py:ActionType"}, {"id": "metagpt/actions/__init__.py:__all__"}, {"id": "metagpt/actions/__init__.py:ast.Constant:\n@Time : 2023/5/11 17:44\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:44\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/__init__.py:module:enum"}, {"id": "metagpt/actions/__init__.py:names:['Enum']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['Action']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.action_output"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['ActionOutput']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.add_requirement"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['UserRequirement']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.debug_error"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.debug_error\",\"names\":[\"DebugError\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['DebugError']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.design_api"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteDesign']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.design_api_review"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_review\",\"names\":[\"DesignReview\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['DesignReview']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.project_management"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management\",\"names\":[\"WriteTasks\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteTasks']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.research"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"CollectLinks\",\"WebBrowseAndSummarize\",\"ConductResearch\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['CollectLinks', 'WebBrowseAndSummarize', 'ConductResearch']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.run_code"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.run_code\",\"names\":[\"RunCode\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['RunCode']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.search_and_summarize"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.search_and_summarize\",\"names\":[\"SearchAndSummarize\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['SearchAndSummarize']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_code"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code\",\"names\":[\"WriteCode\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteCode']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_code_review"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_review\",\"names\":[\"WriteCodeReview\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteCodeReview']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_prd"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd\",\"names\":[\"WritePRD\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WritePRD']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_prd_review"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_review\",\"names\":[\"WritePRDReview\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WritePRDReview']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_test"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_test\",\"names\":[\"WriteTest\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteTest']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.ci.execute_nb_code"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.execute_nb_code\",\"names\":[\"ExecuteNbCode\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['ExecuteNbCode']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.ci.write_analysis_code"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"WriteCodeWithoutTools\",\"WriteCodeWithTools\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteCodeWithoutTools', 'WriteCodeWithTools']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.ci.write_plan"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_plan\",\"names\":[\"WritePlan\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WritePlan']"}, {"id": "{\"lineno\":30,\"end_lineno\":51,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionType\"],\"properties\":{}}"}, {"id": "{\"lineno\":54,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_review.py:REVIEW"}, {"id": "metagpt/actions/write_review.py:LGTM"}, {"id": "metagpt/actions/write_review.py:WRITE_REVIEW_NODE"}, {"id": "metagpt/actions/write_review.py:ast.Constant:\n@Author : alexanderwu\n@File : write_review.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : write_review.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_review.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/actions/write_review.py:names:['List']"}, {"id": "metagpt/actions/write_review.py:module:metagpt.actions"}, {"id": "metagpt/actions/write_review.py:names:['Action']"}, {"id": "metagpt/actions/write_review.py:module:metagpt.actions.action_node"}, {"id": "metagpt/actions/write_review.py:names:['ActionNode']"}, {"id": "{\"lineno\":12,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW\"],\"properties\":{}}"}, {"id": "{\"lineno\":22,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"LGTM\"],\"properties\":{}}"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_REVIEW_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteReview\"],\"properties\":{}}"}, {"id": "metagpt/actions/action.py:Action:_init_with_instruction"}, {"id": "metagpt/actions/action.py:Action:__str__"}, {"id": "metagpt/actions/action.py:Action:__repr__"}, {"id": "metagpt/actions/action.py:Action:_aask"}, {"id": "metagpt/actions/action.py:Action:_run_action_node"}, {"id": "metagpt/actions/action.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : action.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : action.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/action.py:module:__future__"}, {"id": "metagpt/actions/action.py:names:['annotations']"}, {"id": "metagpt/actions/action.py:module:typing"}, {"id": "metagpt/actions/action.py:names:['Optional', 'Union']"}, {"id": "metagpt/actions/action.py:module:pydantic"}, {"id": "metagpt/actions/action.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']"}, {"id": "metagpt/actions/action.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/action.py:names:['ActionNode']"}, {"id": "metagpt/actions/action.py:module:metagpt.context_mixin"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"id": "metagpt/actions/action.py:names:['ContextMixin']"}, {"id": "metagpt/actions/action.py:module:metagpt.schema"}, {"id": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"SerializationMixin\",\"TestingContext\"]}}"}, {"id": "metagpt/actions/action.py:names:['CodePlanAndChangeContext', 'CodeSummarizeContext', 'CodingContext', 'RunCodeContext', 'SerializationMixin', 'TestingContext']"}, {"id": "metagpt/actions/action.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/actions/action.py:names:['ProjectRepo']"}, {"id": "{\"lineno\":28,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Action\"],\"properties\":{}}"}, {"id": "metagpt/actions/execute_task.py:ast.Constant:\n@Time : 2023/9/13 12:26\n@Author : femto Zheng\n@File : execute_task.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:26\\n@Author : femto Zheng\\n@File : execute_task.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/execute_task.py:module:metagpt.actions"}, {"id": "metagpt/actions/execute_task.py:names:['Action']"}, {"id": "metagpt/actions/execute_task.py:module:metagpt.schema"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/actions/execute_task.py:names:['Message']"}, {"id": "{\"lineno\":14,\"end_lineno\":19,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExecuteTask\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_handle_bugfix"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_handle_new_requirement"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_handle_requirement_update"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_is_bugfix"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_is_related"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_merge"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_update_prd"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_save_competitive_analysis"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_rename_workspace"}, {"id": "metagpt/actions/write_prd.py:CONTEXT_TEMPLATE"}, {"id": "metagpt/actions/write_prd.py:NEW_REQ_TEMPLATE"}, {"id": "metagpt/actions/write_prd.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_prd.py\n@Modified By: mashenquan, 2023/11/27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.2 of RFC 135, add incremental iteration functionality.\n 3. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":12,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_prd.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.2 of RFC 135, add incremental iteration functionality.\\n 3. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd.py:module:__future__"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['annotations']"}, {"id": "metagpt/actions/write_prd.py:json"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd.py:module:pathlib"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['Path']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.actions"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['Action', 'ActionOutput']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['ActionNode']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.actions.fix_bug"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['FixBug']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.actions.write_prd_an"}, {"id": "{\"lineno\":22,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_an\",\"names\":[\"COMPETITIVE_QUADRANT_CHART\",\"PROJECT_NAME\",\"REFINED_PRD_NODE\",\"WP_IS_RELATIVE_NODE\",\"WP_ISSUE_TYPE_NODE\",\"WRITE_PRD_NODE\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['COMPETITIVE_QUADRANT_CHART', 'PROJECT_NAME', 'REFINED_PRD_NODE', 'WP_IS_RELATIVE_NODE', 'WP_ISSUE_TYPE_NODE', 'WRITE_PRD_NODE']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.const"}, {"id": "{\"lineno\":30,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"REQUIREMENT_FILENAME\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['BUGFIX_FILENAME', 'COMPETITIVE_ANALYSIS_FILE_REPO', 'REQUIREMENT_FILENAME']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.logs"}, {"id": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['logger']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.schema"}, {"id": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"BugFixContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['BugFixContext', 'Document', 'Documents', 'Message']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['CodeParser']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.utils.file_repository"}, {"id": "metagpt/actions/write_prd.py:names:['FileRepository']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.utils.mermaid"}, {"id": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['mermaid_to_file']"}, {"id": "{\"lineno\":41,\"end_lineno\":50,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONTEXT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":61,\"end_lineno\":172,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePRD\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_docstring.py:_simplify_python_code"}, {"id": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_SYSTEM"}, {"id": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_GOOGLE"}, {"id": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_NUMPY"}, {"id": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_SPHINX"}, {"id": "metagpt/actions/write_docstring.py:_python_docstring_style"}, {"id": "metagpt/actions/write_docstring.py:ast.Constant:Code Docstring Generator.\n\nThis script provides a tool to automatically generate docstrings for Python code. It uses the specified style to create\ndocstrings for the given code and system text.\n\nUsage:\n python3 -m metagpt.actions.write_docstring [--overwrite] [--style=]\n\nArguments:\n filename The path to the Python file for which you want to generate docstrings.\n\nOptions:\n --overwrite If specified, overwrite the original file with the code containing docstrings.\n --style= Specify the style of the generated docstrings.\n Valid values: 'google', 'numpy', or 'sphinx'.\n Default: 'google'\n\nExample:\n python3 -m metagpt.actions.write_docstring ./metagpt/software_company.py --overwrite False --style=numpy\n\nThis script uses the 'fire' library to create a command-line interface. It generates docstrings for the given Python code using\nthe specified docstring style and adds them to the code.\n"}, {"id": "{\"lineno\":1,\"end_lineno\":23,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"Code Docstring Generator.\\n\\nThis script provides a tool to automatically generate docstrings for Python code. It uses the specified style to create\\ndocstrings for the given code and system text.\\n\\nUsage:\\n python3 -m metagpt.actions.write_docstring [--overwrite] [--style=]\\n\\nArguments:\\n filename The path to the Python file for which you want to generate docstrings.\\n\\nOptions:\\n --overwrite If specified, overwrite the original file with the code containing docstrings.\\n --style= Specify the style of the generated docstrings.\\n Valid values: 'google', 'numpy', or 'sphinx'.\\n Default: 'google'\\n\\nExample:\\n python3 -m metagpt.actions.write_docstring ./metagpt/software_company.py --overwrite False --style=numpy\\n\\nThis script uses the 'fire' library to create a command-line interface. It generates docstrings for the given Python code using\\nthe specified docstring style and adds them to the code.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_docstring.py:module:__future__"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['annotations']"}, {"id": "metagpt/actions/write_docstring.py:ast"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_docstring.py:module:pathlib"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['Path']"}, {"id": "metagpt/actions/write_docstring.py:module:typing"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['Literal', 'Optional']"}, {"id": "metagpt/actions/write_docstring.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['Action']"}, {"id": "metagpt/actions/write_docstring.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"aread\",\"awrite\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['OutputParser', 'aread', 'awrite']"}, {"id": "metagpt/actions/write_docstring.py:module:metagpt.utils.pycst"}, {"id": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.pycst\",\"names\":[\"merge_docstring\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['merge_docstring']"}, {"id": "{\"lineno\":34,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_GOOGLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":86,\"end_lineno\":122,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_NUMPY\"],\"properties\":{}}"}, {"id": "{\"lineno\":124,\"end_lineno\":147,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_SPHINX\"],\"properties\":{}}"}, {"id": "{\"lineno\":149,\"end_lineno\":153,\"type_name\":\"ast.Assign\",\"tokens\":[\"_python_docstring_style\"],\"properties\":{}}"}, {"id": "{\"lineno\":156,\"end_lineno\":196,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDocstring\"],\"properties\":{}}"}, {"id": "{\"lineno\":199,\"end_lineno\":212,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_simplify_python_code\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_docstring.py:__name__:__main__"}, {"id": "{\"lineno\":215,\"end_lineno\":218,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/actions/fix_bug.py:ast.Constant:\n@Time : 2023-12-12\n@Author : mashenquan\n@File : fix_bug.py\n"}, {"id": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023-12-12\\n@Author : mashenquan\\n@File : fix_bug.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/fix_bug.py:module:metagpt.actions"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/fix_bug.py:names:['Action']"}, {"id": "{\"lineno\":10,\"end_lineno\":13,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FixBug\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_interview.py:QUESTIONS"}, {"id": "metagpt/actions/prepare_interview.py:ast.Constant:\n@Time : 2023/9/19 15:02\n@Author : DevXiaolan\n@File : prepare_interview.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/19 15:02\\n@Author : DevXiaolan\\n@File : prepare_interview.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_interview.py:module:metagpt.actions"}, {"id": "metagpt/actions/prepare_interview.py:names:['Action']"}, {"id": "metagpt/actions/prepare_interview.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/prepare_interview.py:names:['ActionNode']"}, {"id": "{\"lineno\":11,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"QUESTIONS\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PrepareInterview\"],\"properties\":{}}"}, {"id": "metagpt/actions/run_code.py:RunCode:_install_via_subprocess"}, {"id": "metagpt/actions/run_code.py:RunCode:_install_requirements"}, {"id": "metagpt/actions/run_code.py:RunCode:_install_pytest"}, {"id": "metagpt/actions/run_code.py:RunCode:_install_dependencies"}, {"id": "metagpt/actions/run_code.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/run_code.py:TEMPLATE_CONTEXT"}, {"id": "metagpt/actions/run_code.py:ast.Constant:\n@Time : 2023/5/11 17:46\n@Author : alexanderwu\n@File : run_code.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Mark the location of Console logs in the PROMPT_TEMPLATE with markdown code-block formatting to enhance\n the understanding for the LLM.\n 2. Fix bug: Add the \"install dependency\" operation.\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\n 4. According to section 2.2.3.5.7 of RFC 135, change the method of transferring file content\n (code files, unit test files, log files) from using the message to using the file name.\n 5. Merged the `Config` class of send18:dev branch to take over the set/get operations of the Environment\n class.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":17,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:46\\n@Author : alexanderwu\\n@File : run_code.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Mark the location of Console logs in the PROMPT_TEMPLATE with markdown code-block formatting to enhance\\n the understanding for the LLM.\\n 2. Fix bug: Add the \\\"install dependency\\\" operation.\\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\\n 4. According to section 2.2.3.5.7 of RFC 135, change the method of transferring file content\\n (code files, unit test files, log files) from using the message to using the file name.\\n 5. Merged the `Config` class of send18:dev branch to take over the set/get operations of the Environment\\n class.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/run_code.py:subprocess"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"id": "metagpt/actions/run_code.py:module:pathlib"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['Path']"}, {"id": "metagpt/actions/run_code.py:module:typing"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['Tuple']"}, {"id": "metagpt/actions/run_code.py:module:pydantic"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['Field']"}, {"id": "metagpt/actions/run_code.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['Action']"}, {"id": "metagpt/actions/run_code.py:module:metagpt.logs"}, {"id": "metagpt/actions/run_code.py:names:['logger']"}, {"id": "metagpt/actions/run_code.py:module:metagpt.schema"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['RunCodeContext', 'RunCodeResult']"}, {"id": "metagpt/actions/run_code.py:module:metagpt.utils.exceptions"}, {"id": "metagpt/actions/run_code.py:names:['handle_exception']"}, {"id": "{\"lineno\":29,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEMPLATE_CONTEXT\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":173,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCode\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_an_draft.py:main"}, {"id": "metagpt/actions/write_code_an_draft.py:REVIEW"}, {"id": "metagpt/actions/write_code_an_draft.py:REVIEW_RESULT"}, {"id": "metagpt/actions/write_code_an_draft.py:NEXT_STEPS"}, {"id": "metagpt/actions/write_code_an_draft.py:WRITE_DRAFT"}, {"id": "metagpt/actions/write_code_an_draft.py:WRITE_FUNCTION"}, {"id": "metagpt/actions/write_code_an_draft.py:REWRITE_CODE"}, {"id": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_CONTEXT"}, {"id": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SMALLEST_CONTEXT"}, {"id": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SAMPLE"}, {"id": "metagpt/actions/write_code_an_draft.py:WRITE_CODE_NODE"}, {"id": "metagpt/actions/write_code_an_draft.py:WRITE_MOVE_NODE"}, {"id": "metagpt/actions/write_code_an_draft.py:CR_FOR_MOVE_FUNCTION_BY_3"}, {"id": "metagpt/actions/write_code_an_draft.py:ast.Constant:\n@Author : alexanderwu\n@File : write_review.py\n"}, {"id": "metagpt/actions/write_code_an_draft.py:asyncio"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_an_draft.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Literal\"]}}"}, {"id": "metagpt/actions/write_code_an_draft.py:names:['List', 'Literal']"}, {"id": "metagpt/actions/write_code_an_draft.py:module:metagpt.actions"}, {"id": "metagpt/actions/write_code_an_draft.py:names:['Action']"}, {"id": "metagpt/actions/write_code_an_draft.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/write_code_an_draft.py:names:['ActionNode']"}, {"id": "{\"lineno\":13,\"end_lineno\":22,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW_RESULT\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEXT_STEPS\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":68,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_DRAFT\"],\"properties\":{}}"}, {"id": "{\"lineno\":71,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_FUNCTION\"],\"properties\":{}}"}, {"id": "{\"lineno\":83,\"end_lineno\":94,\"type_name\":\"ast.Assign\",\"tokens\":[\"REWRITE_CODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":97,\"end_lineno\":416,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_CONTEXT\"],\"properties\":{}}"}, {"id": "{\"lineno\":419,\"end_lineno\":489,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_SMALLEST_CONTEXT\"],\"properties\":{}}"}, {"id": "{\"lineno\":492,\"end_lineno\":554,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_SAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":557,\"end_lineno\":557,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_CODE_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":558,\"end_lineno\":558,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_MOVE_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":561,\"end_lineno\":573,\"type_name\":\"ast.Assign\",\"tokens\":[\"CR_FOR_MOVE_FUNCTION_BY_3\"],\"properties\":{}}"}, {"id": "{\"lineno\":576,\"end_lineno\":581,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeAN\"],\"properties\":{}}"}, {"id": "{\"lineno\":584,\"end_lineno\":585,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_an_draft.py:__name__:__main__"}, {"id": "{\"lineno\":588,\"end_lineno\":589,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/actions/talk_action.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : talk_action.py\n@Desc : Act as it\u2019s a talk\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : talk_action.py\\n@Desc : Act as it\u2019s a talk\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/talk_action.py:module:typing"}, {"id": "metagpt/actions/talk_action.py:names:['Optional']"}, {"id": "metagpt/actions/talk_action.py:module:metagpt.actions"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/talk_action.py:names:['Action']"}, {"id": "metagpt/actions/talk_action.py:module:metagpt.config2"}, {"id": "metagpt/actions/talk_action.py:names:['config']"}, {"id": "metagpt/actions/talk_action.py:module:metagpt.logs"}, {"id": "metagpt/actions/talk_action.py:names:['logger']"}, {"id": "metagpt/actions/talk_action.py:module:metagpt.schema"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/actions/talk_action.py:names:['Message']"}, {"id": "{\"lineno\":17,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TalkAction\"],\"properties\":{}}"}, {"id": "{\"lineno\":100,\"end_lineno\":169,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TalkActionPrompt\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_tutorial.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n@Describe : Actions of the tutorial assistant, including writing directories and document content.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n@Describe : Actions of the tutorial assistant, including writing directories and document content.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_tutorial.py:module:typing"}, {"id": "metagpt/actions/write_tutorial.py:names:['Dict']"}, {"id": "metagpt/actions/write_tutorial.py:module:metagpt.actions"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_tutorial.py:names:['Action']"}, {"id": "metagpt/actions/write_tutorial.py:module:metagpt.prompts.tutorial_assistant"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.tutorial_assistant\",\"names\":[\"CONTENT_PROMPT\",\"DIRECTORY_PROMPT\"]}}"}, {"id": "metagpt/actions/write_tutorial.py:names:['CONTENT_PROMPT', 'DIRECTORY_PROMPT']"}, {"id": "metagpt/actions/write_tutorial.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"id": "metagpt/actions/write_tutorial.py:names:['OutputParser']"}, {"id": "{\"lineno\":17,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDirectory\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":65,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteContent\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd_review.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_prd_review.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_prd_review.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd_review.py:module:typing"}, {"id": "metagpt/actions/write_prd_review.py:names:['Optional']"}, {"id": "metagpt/actions/write_prd_review.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_prd_review.py:names:['Action']"}, {"id": "{\"lineno\":14,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePRDReview\"],\"properties\":{}}"}, {"id": "metagpt/actions/generate_questions.py:QUESTIONS"}, {"id": "metagpt/actions/generate_questions.py:ast.Constant:\n@File : generate_questions.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@File : generate_questions.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/generate_questions.py:module:metagpt.actions"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/generate_questions.py:names:['Action']"}, {"id": "metagpt/actions/generate_questions.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/generate_questions.py:names:['ActionNode']"}, {"id": "{\"lineno\":9,\"end_lineno\":15,\"type_name\":\"ast.Assign\",\"tokens\":[\"QUESTIONS\"],\"properties\":{}}"}, {"id": "{\"lineno\":18,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GenerateQuestions\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:_init_repo"}, {"id": "metagpt/actions/prepare_documents.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : prepare_documents.py\n@Desc: PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt.\n RFC 135 2.2.3.5.1.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : prepare_documents.py\\n@Desc: PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt.\\n RFC 135 2.2.3.5.1.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_documents.py:shutil"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_documents.py:module:pathlib"}, {"id": "metagpt/actions/prepare_documents.py:names:['Path']"}, {"id": "metagpt/actions/prepare_documents.py:module:typing"}, {"id": "metagpt/actions/prepare_documents.py:names:['Optional']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.actions"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['Action', 'ActionOutput']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.const"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"REQUIREMENT_FILENAME\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['REQUIREMENT_FILENAME']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.utils.file_repository"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['FileRepository']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.utils.git_repository"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['GitRepository']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['ProjectRepo']"}, {"id": "{\"lineno\":21,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PrepareDocuments\"],\"properties\":{}}"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM_EN_US"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_PROMPT"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_SYSTEM"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_PROMPT"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_FOOD"}, {"id": "metagpt/actions/search_and_summarize.py:ast.Constant:\n@Time : 2023/5/23 17:26\n@Author : alexanderwu\n@File : search_google.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 17:26\\n@Author : alexanderwu\\n@File : search_google.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/search_and_summarize.py:module:typing"}, {"id": "metagpt/actions/search_and_summarize.py:names:['Optional']"}, {"id": "metagpt/actions/search_and_summarize.py:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"pydantic\"],\"properties\":{}}"}, {"id": "metagpt/actions/search_and_summarize.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"model_validator\"]}}"}, {"id": "metagpt/actions/search_and_summarize.py:names:['model_validator']"}, {"id": "metagpt/actions/search_and_summarize.py:module:metagpt.actions"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/search_and_summarize.py:names:['Action']"}, {"id": "metagpt/actions/search_and_summarize.py:module:metagpt.logs"}, {"id": "metagpt/actions/search_and_summarize.py:names:['logger']"}, {"id": "metagpt/actions/search_and_summarize.py:module:metagpt.schema"}, {"id": "metagpt/actions/search_and_summarize.py:names:['Message']"}, {"id": "metagpt/actions/search_and_summarize.py:module:metagpt.tools.search_engine"}, {"id": "metagpt/actions/search_and_summarize.py:names:['SearchEngine']"}, {"id": "{\"lineno\":18,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SYSTEM_EN_US\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":57,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":59,\"end_lineno\":79,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SALES_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":81,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SALES_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":92,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_FOOD\"],\"properties\":{}}"}, {"id": "{\"lineno\":104,\"end_lineno\":147,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchAndSummarize\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_review.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/write_code_review.py:EXAMPLE_AND_INSTRUCTION"}, {"id": "metagpt/actions/write_code_review.py:FORMAT_EXAMPLE"}, {"id": "metagpt/actions/write_code_review.py:REWRITE_CODE_TEMPLATE"}, {"id": "metagpt/actions/write_code_review.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_code_review.py\n@Modified By: mashenquan, 2023/11/27. Following the think-act principle, solidify the task parameters when creating the\n WriteCode object, rather than passing them in when calling the run function.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_code_review.py\\n@Modified By: mashenquan, 2023/11/27. Following the think-act principle, solidify the task parameters when creating the\\n WriteCode object, rather than passing them in when calling the run function.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_review.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['Field']"}, {"id": "metagpt/actions/write_code_review.py:module:tenacity"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.actions"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteCode\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['WriteCode']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.actions.action"}, {"id": "metagpt/actions/write_code_review.py:names:['Action']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.const"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"REQUIREMENT_FILENAME\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['REQUIREMENT_FILENAME']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.logs"}, {"id": "metagpt/actions/write_code_review.py:names:['logger']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.schema"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['CodingContext']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['CodeParser']"}, {"id": "{\"lineno\":21,\"end_lineno\":34,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":36,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXAMPLE_AND_INSTRUCTION\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_EXAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":111,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"REWRITE_CODE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":191,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeReview\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:_set_result"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__str__"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__repr__"}, {"id": "metagpt/actions/write_teaching_plan.py:ast.Constant:\n@Time : 2023/7/27\n@Author : mashenquan\n@File : write_teaching_plan.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/27\\n@Author : mashenquan\\n@File : write_teaching_plan.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_teaching_plan.py:module:typing"}, {"id": "metagpt/actions/write_teaching_plan.py:names:['Optional']"}, {"id": "metagpt/actions/write_teaching_plan.py:module:metagpt.actions"}, {"id": "metagpt/actions/write_teaching_plan.py:names:['Action']"}, {"id": "metagpt/actions/write_teaching_plan.py:module:metagpt.context"}, {"id": "metagpt/actions/write_teaching_plan.py:names:['Context']"}, {"id": "metagpt/actions/write_teaching_plan.py:module:metagpt.logs"}, {"id": "metagpt/actions/write_teaching_plan.py:names:['logger']"}, {"id": "{\"lineno\":15,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTeachingPlanPart\"],\"properties\":{}}"}, {"id": "{\"lineno\":92,\"end_lineno\":191,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TeachingPlanBlock\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management_an.py"}, {"id": "metagpt/actions/project_management_an.py:main"}, {"id": "metagpt/actions/project_management_an.py:REQUIRED_PYTHON_PACKAGES"}, {"id": "metagpt/actions/project_management_an.py:REQUIRED_OTHER_LANGUAGE_PACKAGES"}, {"id": "metagpt/actions/project_management_an.py:LOGIC_ANALYSIS"}, {"id": "metagpt/actions/project_management_an.py:REFINED_LOGIC_ANALYSIS"}, {"id": "metagpt/actions/project_management_an.py:TASK_LIST"}, {"id": "metagpt/actions/project_management_an.py:REFINED_TASK_LIST"}, {"id": "metagpt/actions/project_management_an.py:FULL_API_SPEC"}, {"id": "metagpt/actions/project_management_an.py:SHARED_KNOWLEDGE"}, {"id": "metagpt/actions/project_management_an.py:REFINED_SHARED_KNOWLEDGE"}, {"id": "metagpt/actions/project_management_an.py:ANYTHING_UNCLEAR_PM"}, {"id": "metagpt/actions/project_management_an.py:NODES"}, {"id": "metagpt/actions/project_management_an.py:REFINED_NODES"}, {"id": "metagpt/actions/project_management_an.py:PM_NODE"}, {"id": "metagpt/actions/project_management_an.py:REFINED_PM_NODE"}, {"id": "metagpt/actions/project_management_an.py:ast.Constant:\n@Time : 2023/12/14 15:28\n@Author : alexanderwu\n@File : project_management_an.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/14 15:28\\n@Author : alexanderwu\\n@File : project_management_an.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management_an.py:module:typing"}, {"id": "metagpt/actions/project_management_an.py:names:['List']"}, {"id": "metagpt/actions/project_management_an.py:module:metagpt.actions.action_node"}, {"id": "metagpt/actions/project_management_an.py:names:['ActionNode']"}, {"id": "metagpt/actions/project_management_an.py:module:metagpt.logs"}, {"id": "metagpt/actions/project_management_an.py:names:['logger']"}, {"id": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIRED_PYTHON_PACKAGES\"],\"properties\":{}}"}, {"id": "{\"lineno\":20,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIRED_OTHER_LANGUAGE_PACKAGES\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":36,\"type_name\":\"ast.Assign\",\"tokens\":[\"LOGIC_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":38,\"end_lineno\":50,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_LOGIC_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":57,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_LIST\"],\"properties\":{}}"}, {"id": "{\"lineno\":59,\"end_lineno\":66,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_TASK_LIST\"],\"properties\":{}}"}, {"id": "{\"lineno\":68,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"FULL_API_SPEC\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":81,\"type_name\":\"ast.Assign\",\"tokens\":[\"SHARED_KNOWLEDGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":83,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_SHARED_KNOWLEDGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":93,\"end_lineno\":98,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR_PM\"],\"properties\":{}}"}, {"id": "{\"lineno\":100,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":110,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":120,\"end_lineno\":120,\"type_name\":\"ast.Assign\",\"tokens\":[\"PM_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":121,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PM_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":124,\"end_lineno\":128,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management_an.py:__name__:__main__"}, {"id": "{\"lineno\":131,\"end_lineno\":132,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management.py:WriteTasks:_update_tasks"}, {"id": "metagpt/actions/project_management.py:WriteTasks:_run_new_tasks"}, {"id": "metagpt/actions/project_management.py:WriteTasks:_merge"}, {"id": "metagpt/actions/project_management.py:WriteTasks:_update_requirements"}, {"id": "metagpt/actions/project_management.py:NEW_REQ_TEMPLATE"}, {"id": "metagpt/actions/project_management.py:ast.Constant:\n@Time : 2023/5/11 19:12\n@Author : alexanderwu\n@File : project_management.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Divide the context into three components: legacy code, unit test code, and console log.\n 2. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\n 3. According to the design in Section 2.2.3.5.4 of RFC 135, add incremental iteration functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:12\\n@Author : alexanderwu\\n@File : project_management.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Divide the context into three components: legacy code, unit test code, and console log.\\n 2. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\\n 3. According to the design in Section 2.2.3.5.4 of RFC 135, add incremental iteration functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management.py:json"}, {"id": "metagpt/actions/project_management.py:module:typing"}, {"id": "metagpt/actions/project_management.py:names:['Optional']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/project_management.py:names:['Action']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.actions.action_output"}, {"id": "metagpt/actions/project_management.py:names:['ActionOutput']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.actions.project_management_an"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"PM_NODE\",\"REFINED_PM_NODE\"]}}"}, {"id": "metagpt/actions/project_management.py:names:['PM_NODE', 'REFINED_PM_NODE']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.const"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PACKAGE_REQUIREMENTS_FILENAME\"]}}"}, {"id": "metagpt/actions/project_management.py:names:['PACKAGE_REQUIREMENTS_FILENAME']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.logs"}, {"id": "metagpt/actions/project_management.py:names:['logger']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.schema"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\"]}}"}, {"id": "metagpt/actions/project_management.py:names:['Document', 'Documents']"}, {"id": "{\"lineno\":23,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":32,\"end_lineno\":96,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTasks\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_node.py:ActionNode:__init__"}, {"id": "metagpt/actions/action_node.py:ActionNode:__str__"}, {"id": "metagpt/actions/action_node.py:ActionNode:__repr__"}, {"id": "metagpt/actions/action_node.py:ActionNode:_get_children_mapping"}, {"id": "metagpt/actions/action_node.py:ActionNode:_get_self_mapping"}, {"id": "metagpt/actions/action_node.py:ActionNode:_create_children_class"}, {"id": "metagpt/actions/action_node.py:ActionNode:_to_dict"}, {"id": "metagpt/actions/action_node.py:ActionNode:_compile_f"}, {"id": "metagpt/actions/action_node.py:ActionNode:_aask_v1"}, {"id": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_req"}, {"id": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_comment"}, {"id": "metagpt/actions/action_node.py:dict_to_markdown"}, {"id": "metagpt/actions/action_node.py:TAG"}, {"id": "metagpt/actions/action_node.py:LANGUAGE_CONSTRAINT"}, {"id": "metagpt/actions/action_node.py:FORMAT_CONSTRAINT"}, {"id": "metagpt/actions/action_node.py:SIMPLE_TEMPLATE"}, {"id": "metagpt/actions/action_node.py:REVIEW_TEMPLATE"}, {"id": "metagpt/actions/action_node.py:REVISE_TEMPLATE"}, {"id": "metagpt/actions/action_node.py:ast.Constant:\n@Time : 2023/12/11 18:45\n@Author : alexanderwu\n@File : action_node.py\n\nNOTE: You should use typing.List instead of list to do type annotation. Because in the markdown extraction process,\n we can use typing to extract the type of the node, but we cannot use built-in list to extract.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/11 18:45\\n@Author : alexanderwu\\n@File : action_node.py\\n\\nNOTE: You should use typing.List instead of list to do type annotation. Because in the markdown extraction process,\\n we can use typing to extract the type of the node, but we cannot use built-in list to extract.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_node.py:json"}, {"id": "metagpt/actions/action_node.py:typing"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"typing\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_node.py:module:enum"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['Enum']"}, {"id": "metagpt/actions/action_node.py:module:typing"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"List\",\"Optional\",\"Tuple\",\"Type\",\"Union\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['Any', 'Dict', 'List', 'Optional', 'Tuple', 'Type', 'Union']"}, {"id": "metagpt/actions/action_node.py:module:pydantic"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"create_model\",\"model_validator\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['BaseModel', 'Field', 'create_model', 'model_validator']"}, {"id": "metagpt/actions/action_node.py:module:tenacity"}, {"id": "metagpt/actions/action_node.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.actions.action_outcls_registry"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_outcls_registry\",\"names\":[\"register_action_outcls\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['register_action_outcls']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.llm"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['BaseLLM']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.logs"}, {"id": "metagpt/actions/action_node.py:names:['logger']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.provider.postprocess.llm_output_postprocess"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.llm_output_postprocess\",\"names\":[\"llm_output_postprocess\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['llm_output_postprocess']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"general_after_log\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['OutputParser', 'general_after_log']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.utils.human_interaction"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.human_interaction\",\"names\":[\"HumanInteraction\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['HumanInteraction']"}, {"id": "{\"lineno\":27,\"end_lineno\":29,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviewMode\"],\"properties\":{}}"}, {"id": "{\"lineno\":32,\"end_lineno\":35,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviseMode\"],\"properties\":{}}"}, {"id": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.Assign\",\"tokens\":[\"TAG\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANGUAGE_CONSTRAINT\"],\"properties\":{}}"}, {"id": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_CONSTRAINT\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"SIMPLE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":62,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":92,\"end_lineno\":112,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVISE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":115,\"end_lineno\":119,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"dict_to_markdown\"],\"properties\":{}}"}, {"id": "{\"lineno\":122,\"end_lineno\":720,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionNode\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE_CONTEXT"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:REFINED_TEMPLATE"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WRITE_CODE_PLAN_AND_CHANGE_NODE"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:ast.Constant:\n@Time : 2023/12/26\n@Author : mannaandpoem\n@File : write_code_plan_and_change_an.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/26\\n@Author : mannaandpoem\\n@File : write_code_plan_and_change_an.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:os"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:module:pydantic"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:names:['Field']"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:names:['Action']"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:names:['ActionNode']"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.schema"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\"]}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:names:['CodePlanAndChangeContext']"}, {"id": "{\"lineno\":16,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":111,\"end_lineno\":126,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_CONTEXT\"],\"properties\":{}}"}, {"id": "{\"lineno\":128,\"end_lineno\":180,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":182,\"end_lineno\":182,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_CODE_PLAN_AND_CHANGE_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":185,\"end_lineno\":210,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodePlanAndChange\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_review.py:ast.Constant:\n@Time : 2023/5/11 19:31\n@Author : alexanderwu\n@File : design_api_review.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:31\\n@Author : alexanderwu\\n@File : design_api_review.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_review.py:module:typing"}, {"id": "metagpt/actions/design_api_review.py:names:['Optional']"}, {"id": "metagpt/actions/design_api_review.py:module:metagpt.actions.action"}, {"id": "metagpt/actions/design_api_review.py:names:['Action']"}, {"id": "{\"lineno\":14,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DesignReview\"],\"properties\":{}}"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_check_file_type"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_unzip"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_ocr"}, {"id": "metagpt/actions/invoice_ocr.py:ast.Constant:\n@Time : 2023/9/21 18:10:20\n@Author : Stitch-z\n@File : invoice_ocr.py\n@Describe : Actions of the invoice ocr assistant.\n"}, {"id": "{\"lineno\":4,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 18:10:20\\n@Author : Stitch-z\\n@File : invoice_ocr.py\\n@Describe : Actions of the invoice ocr assistant.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/invoice_ocr.py:os"}, {"id": "metagpt/actions/invoice_ocr.py:zipfile"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"zipfile\"],\"properties\":{}}"}, {"id": "metagpt/actions/invoice_ocr.py:module:datetime"}, {"id": "metagpt/actions/invoice_ocr.py:names:['datetime']"}, {"id": "metagpt/actions/invoice_ocr.py:module:pathlib"}, {"id": "metagpt/actions/invoice_ocr.py:names:['Path']"}, {"id": "metagpt/actions/invoice_ocr.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['Optional']"}, {"id": "metagpt/actions/invoice_ocr.py:pandas as pd"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"id": "metagpt/actions/invoice_ocr.py:module:paddleocr"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"paddleocr\",\"names\":[\"PaddleOCR\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['PaddleOCR']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.actions"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['Action']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.const"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"INVOICE_OCR_TABLE_PATH\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['INVOICE_OCR_TABLE_PATH']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.logs"}, {"id": "metagpt/actions/invoice_ocr.py:names:['logger']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.prompts.invoice_ocr"}, {"id": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\",\"REPLY_OCR_QUESTION_PROMPT\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['EXTRACT_OCR_MAIN_INFO_PROMPT', 'REPLY_OCR_QUESTION_PROMPT']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['OutputParser']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.utils.file"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['File']"}, {"id": "{\"lineno\":31,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceOCR\"],\"properties\":{}}"}, {"id": "{\"lineno\":122,\"end_lineno\":163,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GenerateTable\"],\"properties\":{}}"}, {"id": "{\"lineno\":166,\"end_lineno\":189,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReplyQuestion\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/write_analysis_code.py"}, {"id": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode"}, {"id": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode:insert_system_message"}, {"id": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode:run"}, {"id": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithoutTools"}, {"id": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithoutTools:run"}, {"id": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools"}, {"id": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:_get_tools_by_type"}, {"id": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:_recommend_tool"}, {"id": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:_prepare_tools"}, {"id": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:run"}, {"id": "metagpt/actions/ci/write_analysis_code.py:ast.Constant:\n@Date : 2023/11/20 13:19:39\n@Author : orange-crow\n@File : write_analysis_code.py\n"}, {"id": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Date : 2023/11/20 13:19:39\\n@Author : orange-crow\\n@File : write_analysis_code.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/write_analysis_code.py:module:__future__"}, {"id": "metagpt/actions/ci/write_analysis_code.py:names:['annotations']"}, {"id": "metagpt/actions/ci/write_analysis_code.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"id": "metagpt/actions/ci/write_analysis_code.py:names:['Tuple']"}, {"id": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.actions"}, {"id": "metagpt/actions/ci/write_analysis_code.py:names:['Action']"}, {"id": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.logs"}, {"id": "metagpt/actions/ci/write_analysis_code.py:names:['logger']"}, {"id": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.prompts.ci.write_analysis_code"}, {"id": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.write_analysis_code\",\"names\":[\"CODE_GENERATOR_WITH_TOOLS\",\"SELECT_FUNCTION_TOOLS\",\"TOOL_RECOMMENDATION_PROMPT\",\"TOOL_USAGE_PROMPT\"]}}"}, {"id": "metagpt/actions/ci/write_analysis_code.py:names:['CODE_GENERATOR_WITH_TOOLS', 'SELECT_FUNCTION_TOOLS', 'TOOL_RECOMMENDATION_PROMPT', 'TOOL_USAGE_PROMPT']"}, {"id": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.schema"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\",\"SystemMessage\"]}}"}, {"id": "metagpt/actions/ci/write_analysis_code.py:names:['Message', 'Plan', 'SystemMessage']"}, {"id": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.tools"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"TOOL_REGISTRY\"]}}"}, {"id": "metagpt/actions/ci/write_analysis_code.py:names:['TOOL_REGISTRY']"}, {"id": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.tools.tool_registry"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"validate_tool_names\"]}}"}, {"id": "metagpt/actions/ci/write_analysis_code.py:names:['validate_tool_names']"}, {"id": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"create_func_call_config\"]}}"}, {"id": "metagpt/actions/ci/write_analysis_code.py:names:['create_func_call_config']"}, {"id": "{\"lineno\":25,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseWriteAnalysisCode\"],\"properties\":{}}"}, {"id": "{\"lineno\":47,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeWithoutTools\"],\"properties\":{}}"}, {"id": "{\"lineno\":56,\"end_lineno\":155,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeWithTools\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/write_plan.py"}, {"id": "metagpt/actions/ci/write_plan.py:WritePlan"}, {"id": "metagpt/actions/ci/write_plan.py:WritePlan:assign_task_type"}, {"id": "metagpt/actions/ci/write_plan.py:WritePlan:run"}, {"id": "metagpt/actions/ci/write_plan.py:rsp_to_tasks"}, {"id": "metagpt/actions/ci/write_plan.py:update_plan_from_rsp"}, {"id": "metagpt/actions/ci/write_plan.py:precheck_update_plan_from_rsp"}, {"id": "metagpt/actions/ci/write_plan.py:ast.Constant:\n@Date : 2023/11/20 11:24:03\n@Author : orange-crow\n@File : plan.py\n"}, {"id": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Date : 2023/11/20 11:24:03\\n@Author : orange-crow\\n@File : plan.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/write_plan.py:module:__future__"}, {"id": "metagpt/actions/ci/write_plan.py:names:['annotations']"}, {"id": "metagpt/actions/ci/write_plan.py:json"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/write_plan.py:module:copy"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"id": "metagpt/actions/ci/write_plan.py:names:['deepcopy']"}, {"id": "metagpt/actions/ci/write_plan.py:module:typing"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"id": "metagpt/actions/ci/write_plan.py:names:['Tuple']"}, {"id": "metagpt/actions/ci/write_plan.py:module:metagpt.actions"}, {"id": "metagpt/actions/ci/write_plan.py:names:['Action']"}, {"id": "metagpt/actions/ci/write_plan.py:module:metagpt.logs"}, {"id": "metagpt/actions/ci/write_plan.py:names:['logger']"}, {"id": "metagpt/actions/ci/write_plan.py:module:metagpt.prompts.ci.write_analysis_code"}, {"id": "{\"lineno\":15,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.write_analysis_code\",\"names\":[\"ASSIGN_TASK_TYPE_CONFIG\",\"ASSIGN_TASK_TYPE_PROMPT\"]}}"}, {"id": "metagpt/actions/ci/write_plan.py:names:['ASSIGN_TASK_TYPE_CONFIG', 'ASSIGN_TASK_TYPE_PROMPT']"}, {"id": "metagpt/actions/ci/write_plan.py:module:metagpt.schema"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\",\"Task\"]}}"}, {"id": "metagpt/actions/ci/write_plan.py:names:['Message', 'Plan', 'Task']"}, {"id": "metagpt/actions/ci/write_plan.py:module:metagpt.tools"}, {"id": "metagpt/actions/ci/write_plan.py:names:['TOOL_REGISTRY']"}, {"id": "metagpt/actions/ci/write_plan.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\",\"create_func_call_config\"]}}"}, {"id": "metagpt/actions/ci/write_plan.py:names:['CodeParser', 'create_func_call_config']"}, {"id": "{\"lineno\":24,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePlan\"],\"properties\":{}}"}, {"id": "{\"lineno\":82,\"end_lineno\":85,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"rsp_to_tasks\"],\"properties\":{}}"}, {"id": "{\"lineno\":88,\"end_lineno\":107,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"update_plan_from_rsp\"],\"properties\":{}}"}, {"id": "{\"lineno\":110,\"end_lineno\":116,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"precheck_update_plan_from_rsp\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/ask_review.py"}, {"id": "metagpt/actions/ci/ask_review.py:ReviewConst"}, {"id": "metagpt/actions/ci/ask_review.py:AskReview"}, {"id": "metagpt/actions/ci/ask_review.py:AskReview:run"}, {"id": "metagpt/actions/ci/ask_review.py:module:__future__"}, {"id": "metagpt/actions/ci/ask_review.py:names:['annotations']"}, {"id": "metagpt/actions/ci/ask_review.py:module:typing"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"id": "metagpt/actions/ci/ask_review.py:names:['Tuple']"}, {"id": "metagpt/actions/ci/ask_review.py:module:metagpt.actions"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/ci/ask_review.py:names:['Action']"}, {"id": "metagpt/actions/ci/ask_review.py:module:metagpt.logs"}, {"id": "metagpt/actions/ci/ask_review.py:names:['logger']"}, {"id": "metagpt/actions/ci/ask_review.py:module:metagpt.schema"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\"]}}"}, {"id": "metagpt/actions/ci/ask_review.py:names:['Message', 'Plan']"}, {"id": "{\"lineno\":10,\"end_lineno\":24,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviewConst\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":62,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AskReview\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:__init__"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:build"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:terminate"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:reset"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:add_code_cell"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:add_markdown_cell"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:_display"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:add_output_to_cell"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:parse_outputs"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:show_bytes_figure"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:is_ipython"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:run_cell"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:run"}, {"id": "metagpt/actions/ci/execute_nb_code.py:truncate"}, {"id": "metagpt/actions/ci/execute_nb_code.py:remove_escape_and_color_codes"}, {"id": "metagpt/actions/ci/execute_nb_code.py:display_markdown"}, {"id": "metagpt/actions/ci/execute_nb_code.py:ast.Constant:\n@Date : 2023/11/17 14:22:15\n@Author : orange-crow\n@File : execute_nb_code.py\n"}, {"id": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Date : 2023/11/17 14:22:15\\n@Author : orange-crow\\n@File : execute_nb_code.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:__future__"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['annotations']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:asyncio"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:base64"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:re"}, {"id": "metagpt/actions/ci/execute_nb_code.py:traceback"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Tuple\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['Literal', 'Tuple']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:nbformat"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"nbformat\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:nbclient"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbclient\",\"names\":[\"NotebookClient\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['NotebookClient']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:nbclient.exceptions"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbclient.exceptions\",\"names\":[\"CellTimeoutError\",\"DeadKernelError\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['CellTimeoutError', 'DeadKernelError']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:nbformat"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbformat\",\"names\":[\"NotebookNode\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['NotebookNode']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:nbformat.v4"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbformat.v4\",\"names\":[\"new_code_cell\",\"new_markdown_cell\",\"new_output\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['new_code_cell', 'new_markdown_cell', 'new_output']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:rich.box"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.box\",\"names\":[\"MINIMAL\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['MINIMAL']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:rich.console"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.console\",\"names\":[\"Console\",\"Group\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['Console', 'Group']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:rich.live"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.live\",\"names\":[\"Live\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['Live']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:rich.markdown"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.markdown\",\"names\":[\"Markdown\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['Markdown']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:rich.panel"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.panel\",\"names\":[\"Panel\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['Panel']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:rich.syntax"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.syntax\",\"names\":[\"Syntax\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['Syntax']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:metagpt.actions"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['Action']"}, {"id": "metagpt/actions/ci/execute_nb_code.py:module:metagpt.logs"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/ci/execute_nb_code.py:names:['logger']"}, {"id": "{\"lineno\":31,\"end_lineno\":196,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExecuteNbCode\"],\"properties\":{}}"}, {"id": "{\"lineno\":199,\"end_lineno\":214,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"truncate\"],\"properties\":{}}"}, {"id": "{\"lineno\":217,\"end_lineno\":221,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_escape_and_color_codes\"],\"properties\":{}}"}, {"id": "{\"lineno\":224,\"end_lineno\":249,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"display_markdown\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/ml_action.py"}, {"id": "metagpt/actions/ci/ml_action.py:WriteCodeWithToolsML"}, {"id": "metagpt/actions/ci/ml_action.py:WriteCodeWithToolsML:run"}, {"id": "metagpt/actions/ci/ml_action.py:UpdateDataColumns"}, {"id": "metagpt/actions/ci/ml_action.py:UpdateDataColumns:run"}, {"id": "metagpt/actions/ci/ml_action.py:module:__future__"}, {"id": "metagpt/actions/ci/ml_action.py:names:['annotations']"}, {"id": "metagpt/actions/ci/ml_action.py:module:typing"}, {"id": "metagpt/actions/ci/ml_action.py:names:['Tuple']"}, {"id": "metagpt/actions/ci/ml_action.py:module:metagpt.actions"}, {"id": "metagpt/actions/ci/ml_action.py:names:['Action']"}, {"id": "metagpt/actions/ci/ml_action.py:module:metagpt.actions.ci.write_analysis_code"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"WriteCodeWithTools\"]}}"}, {"id": "metagpt/actions/ci/ml_action.py:names:['WriteCodeWithTools']"}, {"id": "metagpt/actions/ci/ml_action.py:module:metagpt.prompts.ci.ml_action"}, {"id": "{\"lineno\":7,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.ml_action\",\"names\":[\"ML_GENERATE_CODE_PROMPT\",\"ML_TOOL_USAGE_PROMPT\",\"PRINT_DATA_COLUMNS\",\"UPDATE_DATA_COLUMNS\"]}}"}, {"id": "metagpt/actions/ci/ml_action.py:names:['ML_GENERATE_CODE_PROMPT', 'ML_TOOL_USAGE_PROMPT', 'PRINT_DATA_COLUMNS', 'UPDATE_DATA_COLUMNS']"}, {"id": "metagpt/actions/ci/ml_action.py:module:metagpt.prompts.ci.write_analysis_code"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.write_analysis_code\",\"names\":[\"CODE_GENERATOR_WITH_TOOLS\"]}}"}, {"id": "metagpt/actions/ci/ml_action.py:names:['CODE_GENERATOR_WITH_TOOLS']"}, {"id": "metagpt/actions/ci/ml_action.py:module:metagpt.schema"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\"]}}"}, {"id": "metagpt/actions/ci/ml_action.py:names:['Message', 'Plan']"}, {"id": "metagpt/actions/ci/ml_action.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"create_func_call_config\",\"remove_comments\"]}}"}, {"id": "metagpt/actions/ci/ml_action.py:names:['create_func_call_config', 'remove_comments']"}, {"id": "{\"lineno\":18,\"end_lineno\":59,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeWithToolsML\"],\"properties\":{}}"}, {"id": "{\"lineno\":62,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UpdateDataColumns\"],\"properties\":{}}"}, {"id": "metagpt/actions/ci/debug_code.py"}, {"id": "metagpt/actions/ci/debug_code.py:DebugCode"}, {"id": "metagpt/actions/ci/debug_code.py:DebugCode:run"}, {"id": "metagpt/actions/ci/debug_code.py:DEBUG_REFLECTION_EXAMPLE"}, {"id": "metagpt/actions/ci/debug_code.py:REFLECTION_PROMPT"}, {"id": "metagpt/actions/ci/debug_code.py:CODE_REFLECTION"}, {"id": "metagpt/actions/ci/debug_code.py:module:__future__"}, {"id": "metagpt/actions/ci/debug_code.py:names:['annotations']"}, {"id": "metagpt/actions/ci/debug_code.py:module:metagpt.actions.ci.write_analysis_code"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"BaseWriteAnalysisCode\"]}}"}, {"id": "metagpt/actions/ci/debug_code.py:names:['BaseWriteAnalysisCode']"}, {"id": "metagpt/actions/ci/debug_code.py:module:metagpt.logs"}, {"id": "metagpt/actions/ci/debug_code.py:names:['logger']"}, {"id": "metagpt/actions/ci/debug_code.py:module:metagpt.schema"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/actions/ci/debug_code.py:names:['Message']"}, {"id": "metagpt/actions/ci/debug_code.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"create_func_call_config\"]}}"}, {"id": "metagpt/actions/ci/debug_code.py:names:['create_func_call_config']"}, {"id": "{\"lineno\":8,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEBUG_REFLECTION_EXAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":39,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFLECTION_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":55,\"end_lineno\":72,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REFLECTION\"],\"properties\":{}}"}, {"id": "{\"lineno\":75,\"end_lineno\":109,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DebugCode\"],\"properties\":{}}"}, {"id": "metagpt/prompts/sales.py"}, {"id": "metagpt/prompts/sales.py:SALES_ASSISTANT"}, {"id": "metagpt/prompts/sales.py:SALES"}, {"id": "metagpt/prompts/sales.py:conversation_stages"}, {"id": "metagpt/prompts/sales.py:ast.Constant:\n@Time : 2023/5/8 15:29\n@Author : alexanderwu\n@File : sales.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/8 15:29\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":10,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"SALES_ASSISTANT\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":55,\"type_name\":\"ast.Assign\",\"tokens\":[\"SALES\"],\"properties\":{}}"}, {"id": "{\"lineno\":57,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"conversation_stages\"],\"properties\":{}}"}, {"id": "metagpt/prompts/__init__.py"}, {"id": "metagpt/prompts/__init__.py:ast.Constant:\n@Time : 2023/5/30 09:51\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/30 09:51\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/prompts/tool_types.py"}, {"id": "metagpt/prompts/tool_types.py:DATA_PREPROCESS_PROMPT"}, {"id": "metagpt/prompts/tool_types.py:FEATURE_ENGINEERING_PROMPT"}, {"id": "metagpt/prompts/tool_types.py:MODEL_TRAIN_PROMPT"}, {"id": "metagpt/prompts/tool_types.py:MODEL_EVALUATE_PROMPT"}, {"id": "metagpt/prompts/tool_types.py:IMAGE2WEBPAGE_PROMPT"}, {"id": "{\"lineno\":2,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_PREPROCESS_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":14,\"end_lineno\":23,\"type_name\":\"ast.Assign\",\"tokens\":[\"FEATURE_ENGINEERING_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":26,\"end_lineno\":32,\"type_name\":\"ast.Assign\",\"tokens\":[\"MODEL_TRAIN_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":35,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"MODEL_EVALUATE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":46,\"type_name\":\"ast.Assign\",\"tokens\":[\"IMAGE2WEBPAGE_PROMPT\"],\"properties\":{}}"}, {"id": "metagpt/prompts/summarize.py"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_2"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_3"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_4"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_5"}, {"id": "metagpt/prompts/summarize.py:ast.Constant:\n@Time : 2023/6/19 23:07\n@Author : alexanderwu\n@File : summarize.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/19 23:07\\n@Author : alexanderwu\\n@File : summarize.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_2\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_3\"],\"properties\":{}}"}, {"id": "{\"lineno\":57,\"end_lineno\":69,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_4\"],\"properties\":{}}"}, {"id": "{\"lineno\":72,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_5\"],\"properties\":{}}"}, {"id": "metagpt/prompts/metagpt_sample.py"}, {"id": "metagpt/prompts/metagpt_sample.py:METAGPT_SAMPLE"}, {"id": "metagpt/prompts/metagpt_sample.py:ast.Constant:\n@Time : 2023/6/7 20:29\n@Author : alexanderwu\n@File : metagpt_sample.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/7 20:29\\n@Author : alexanderwu\\n@File : metagpt_sample.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":9,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"METAGPT_SAMPLE\"],\"properties\":{}}"}, {"id": "metagpt/prompts/tutorial_assistant.py"}, {"id": "metagpt/prompts/tutorial_assistant.py:COMMON_PROMPT"}, {"id": "metagpt/prompts/tutorial_assistant.py:DIRECTORY_PROMPT"}, {"id": "metagpt/prompts/tutorial_assistant.py:CONTENT_PROMPT"}, {"id": "metagpt/prompts/tutorial_assistant.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n@Describe : Tutorial Assistant's prompt templates.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n@Describe : Tutorial Assistant's prompt templates.\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":10,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMON_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":15,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"DIRECTORY_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":45,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONTENT_PROMPT\"],\"properties\":{}}"}, {"id": "metagpt/prompts/invoice_ocr.py"}, {"id": "metagpt/prompts/invoice_ocr.py:COMMON_PROMPT"}, {"id": "metagpt/prompts/invoice_ocr.py:EXTRACT_OCR_MAIN_INFO_PROMPT"}, {"id": "metagpt/prompts/invoice_ocr.py:REPLY_OCR_QUESTION_PROMPT"}, {"id": "metagpt/prompts/invoice_ocr.py:INVOICE_OCR_SUCCESS"}, {"id": "metagpt/prompts/invoice_ocr.py:ast.Constant:\n@Time : 2023/9/21 16:30:25\n@Author : Stitch-z\n@File : invoice_ocr.py\n@Describe : Prompts of the invoice ocr assistant.\n"}, {"id": "{\"lineno\":4,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 16:30:25\\n@Author : Stitch-z\\n@File : invoice_ocr.py\\n@Describe : Prompts of the invoice ocr assistant.\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMON_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":13,\"end_lineno\":27,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":29,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"REPLY_OCR_QUESTION_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"INVOICE_OCR_SUCCESS\"],\"properties\":{}}"}, {"id": "metagpt/prompts/ci/write_analysis_code.py"}, {"id": "metagpt/prompts/ci/write_analysis_code.py:ASSIGN_TASK_TYPE_PROMPT"}, {"id": "metagpt/prompts/ci/write_analysis_code.py:ASSIGN_TASK_TYPE_CONFIG"}, {"id": "metagpt/prompts/ci/write_analysis_code.py:TOOL_RECOMMENDATION_PROMPT"}, {"id": "metagpt/prompts/ci/write_analysis_code.py:SELECT_FUNCTION_TOOLS"}, {"id": "metagpt/prompts/ci/write_analysis_code.py:CODE_GENERATOR_WITH_TOOLS"}, {"id": "metagpt/prompts/ci/write_analysis_code.py:TOOL_USAGE_PROMPT"}, {"id": "{\"lineno\":1,\"end_lineno\":7,\"type_name\":\"ast.Assign\",\"tokens\":[\"ASSIGN_TASK_TYPE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":9,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"ASSIGN_TASK_TYPE_CONFIG\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_RECOMMENDATION_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"SELECT_FUNCTION_TOOLS\"],\"properties\":{}}"}, {"id": "{\"lineno\":62,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_GENERATOR_WITH_TOOLS\"],\"properties\":{}}"}, {"id": "{\"lineno\":77,\"end_lineno\":93,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_USAGE_PROMPT\"],\"properties\":{}}"}, {"id": "metagpt/prompts/ci/ml_action.py"}, {"id": "metagpt/prompts/ci/ml_action.py:UPDATE_DATA_COLUMNS"}, {"id": "metagpt/prompts/ci/ml_action.py:PRINT_DATA_COLUMNS"}, {"id": "metagpt/prompts/ci/ml_action.py:ML_COMMON_PROMPT"}, {"id": "metagpt/prompts/ci/ml_action.py:USE_NO_TOOLS_EXAMPLE"}, {"id": "metagpt/prompts/ci/ml_action.py:USE_TOOLS_EXAMPLE"}, {"id": "metagpt/prompts/ci/ml_action.py:ML_GENERATE_CODE_PROMPT"}, {"id": "metagpt/prompts/ci/ml_action.py:ML_TOOL_USAGE_PROMPT"}, {"id": "{\"lineno\":7,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"UPDATE_DATA_COLUMNS\"],\"properties\":{}}"}, {"id": "{\"lineno\":30,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRINT_DATA_COLUMNS\"],\"properties\":{}}"}, {"id": "{\"lineno\":45,\"end_lineno\":64,\"type_name\":\"ast.Assign\",\"tokens\":[\"ML_COMMON_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":66,\"end_lineno\":86,\"type_name\":\"ast.Assign\",\"tokens\":[\"USE_NO_TOOLS_EXAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":88,\"end_lineno\":125,\"type_name\":\"ast.Assign\",\"tokens\":[\"USE_TOOLS_EXAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":127,\"end_lineno\":127,\"type_name\":\"ast.Assign\",\"tokens\":[\"ML_GENERATE_CODE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":128,\"end_lineno\":128,\"type_name\":\"ast.Assign\",\"tokens\":[\"ML_TOOL_USAGE_PROMPT\"],\"properties\":{}}"}, {"id": "metagpt/environment/__init__.py"}, {"id": "metagpt/environment/__init__.py:__all__"}, {"id": "metagpt/environment/__init__.py:module:metagpt.environment.base_env"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"id": "metagpt/environment/__init__.py:names:['Environment']"}, {"id": "metagpt/environment/__init__.py:module:metagpt.environment.android_env.android_env"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.android_env.android_env\",\"names\":[\"AndroidEnv\"]}}"}, {"id": "metagpt/environment/__init__.py:names:['AndroidEnv']"}, {"id": "metagpt/environment/__init__.py:module:metagpt.environment.mincraft_env.mincraft_env"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.mincraft_env\",\"names\":[\"MincraftExtEnv\"]}}"}, {"id": "metagpt/environment/__init__.py:names:['MincraftExtEnv']"}, {"id": "metagpt/environment/__init__.py:module:metagpt.environment.werewolf_env.werewolf_env"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.werewolf_env.werewolf_env\",\"names\":[\"WerewolfEnv\"]}}"}, {"id": "metagpt/environment/__init__.py:names:['WerewolfEnv']"}, {"id": "metagpt/environment/__init__.py:module:metagpt.environment.stanford_town_env.stanford_town_env"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.stanford_town_env.stanford_town_env\",\"names\":[\"StanfordTownEnv\"]}}"}, {"id": "metagpt/environment/__init__.py:names:['StanfordTownEnv']"}, {"id": "metagpt/environment/__init__.py:module:metagpt.environment.software_env.software_env"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.software_env.software_env\",\"names\":[\"SoftwareEnv\"]}}"}, {"id": "metagpt/environment/__init__.py:names:['SoftwareEnv']"}, {"id": "metagpt/environment/base_env.py:ExtEnv:_check_api_exist"}, {"id": "metagpt/environment/base_env.py:mark_as_readable"}, {"id": "metagpt/environment/base_env.py:mark_as_writeable"}, {"id": "metagpt/environment/base_env.py:env_write_api_registry"}, {"id": "metagpt/environment/base_env.py:env_read_api_registry"}, {"id": "metagpt/environment/base_env.py:asyncio"}, {"id": "metagpt/environment/base_env.py:module:enum"}, {"id": "metagpt/environment/base_env.py:names:['Enum']"}, {"id": "metagpt/environment/base_env.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"TYPE_CHECKING\",\"Any\",\"Dict\",\"Iterable\",\"Optional\",\"Set\",\"Union\"]}}"}, {"id": "metagpt/environment/base_env.py:names:['TYPE_CHECKING', 'Any', 'Dict', 'Iterable', 'Optional', 'Set', 'Union']"}, {"id": "metagpt/environment/base_env.py:module:pydantic"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"id": "metagpt/environment/base_env.py:names:['BaseModel', 'ConfigDict', 'Field', 'SerializeAsAny', 'model_validator']"}, {"id": "metagpt/environment/base_env.py:module:metagpt.context"}, {"id": "metagpt/environment/base_env.py:names:['Context']"}, {"id": "metagpt/environment/base_env.py:module:metagpt.environment.api.env_api"}, {"id": "{\"lineno\":12,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.api.env_api\",\"names\":[\"EnvAPIAbstract\",\"ReadAPIRegistry\",\"WriteAPIRegistry\"]}}"}, {"id": "metagpt/environment/base_env.py:names:['EnvAPIAbstract', 'ReadAPIRegistry', 'WriteAPIRegistry']"}, {"id": "metagpt/environment/base_env.py:module:metagpt.logs"}, {"id": "metagpt/environment/base_env.py:names:['logger']"}, {"id": "metagpt/environment/base_env.py:module:metagpt.schema"}, {"id": "metagpt/environment/base_env.py:names:['Message']"}, {"id": "metagpt/environment/base_env.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"get_function_schema\",\"is_coroutine_func\",\"is_send_to\"]}}"}, {"id": "metagpt/environment/base_env.py:names:['get_function_schema', 'is_coroutine_func', 'is_send_to']"}, {"id": "metagpt/environment/base_env.py:TYPE_CHECKING"}, {"id": "{\"lineno\":21,\"end_lineno\":22,\"type_name\":\"ast.If\",\"tokens\":[\"TYPE_CHECKING\"],\"properties\":{}}"}, {"id": "{\"lineno\":25,\"end_lineno\":30,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnvType\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.Assign\",\"tokens\":[\"env_write_api_registry\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.Assign\",\"tokens\":[\"env_read_api_registry\"],\"properties\":{}}"}, {"id": "{\"lineno\":37,\"end_lineno\":40,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"mark_as_readable\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":46,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"mark_as_writeable\"],\"properties\":{}}"}, {"id": "{\"lineno\":49,\"end_lineno\":95,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExtEnv\"],\"properties\":{}}"}, {"id": "{\"lineno\":98,\"end_lineno\":209,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Environment\"],\"properties\":{}}"}, {"id": "metagpt/environment/base_env.py:ast.Call:Environment.model_rebuild"}, {"id": "{\"lineno\":212,\"end_lineno\":212,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Call\",\"Environment.model_rebuild\"],\"properties\":{}}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:__init__"}, {"id": "metagpt/environment/android_env/android_ext_env.py:subprocess"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:module:pathlib"}, {"id": "metagpt/environment/android_env/android_ext_env.py:names:['Path']"}, {"id": "metagpt/environment/android_env/android_ext_env.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:names:['Any', 'Optional']"}, {"id": "metagpt/environment/android_env/android_ext_env.py:module:pydantic"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:names:['Field']"}, {"id": "metagpt/environment/android_env/android_ext_env.py:module:metagpt.environment.android_env.const"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.android_env.const\",\"names\":[\"ADB_EXEC_FAIL\"]}}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:names:['ADB_EXEC_FAIL']"}, {"id": "metagpt/environment/android_env/android_ext_env.py:module:metagpt.environment.base_env"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_readable\",\"mark_as_writeable\"]}}"}, {"id": "metagpt/environment/android_env/android_ext_env.py:names:['ExtEnv', 'mark_as_readable', 'mark_as_writeable']"}, {"id": "{\"lineno\":15,\"end_lineno\":157,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AndroidExtEnv\"],\"properties\":{}}"}, {"id": "metagpt/environment/android_env/android_env.py:module:pydantic"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/environment/android_env/android_env.py:names:['Field']"}, {"id": "metagpt/environment/android_env/android_env.py:module:metagpt.environment.android_env.android_ext_env"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.android_env.android_ext_env\",\"names\":[\"AndroidExtEnv\"]}}"}, {"id": "metagpt/environment/android_env/android_env.py:names:['AndroidExtEnv']"}, {"id": "metagpt/environment/android_env/android_env.py:module:metagpt.environment.base_env"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"id": "metagpt/environment/android_env/android_env.py:names:['Environment']"}, {"id": "{\"lineno\":11,\"end_lineno\":13,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AndroidEnv\"],\"properties\":{}}"}, {"id": "metagpt/environment/android_env/__init__.py"}, {"id": "metagpt/environment/android_env/const.py"}, {"id": "metagpt/environment/android_env/const.py:ADB_EXEC_FAIL"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Assign\",\"tokens\":[\"ADB_EXEC_FAIL\"],\"properties\":{}}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:_init_maze"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:math"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"math\"],\"properties\":{}}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:pathlib"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['Path']"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Tuple\"]}}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['Optional', 'Tuple']"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['ConfigDict', 'Field', 'model_validator']"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:metagpt.environment.base_env"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['ExtEnv', 'mark_as_readable', 'mark_as_writeable']"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"read_csv_to_list\",\"read_json_file\"]}}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['read_csv_to_list', 'read_json_file']"}, {"id": "{\"lineno\":16,\"end_lineno\":379,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"StanfordTownExtEnv\"],\"properties\":{}}"}, {"id": "metagpt/environment/stanford_town_env/__init__.py"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_env.py:module:metagpt.environment.base_env"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_env.py:names:['Environment']"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_env.py:module:metagpt.environment.stanford_town_env.stanford_town_ext_env"}, {"id": "{\"lineno\":6,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.stanford_town_env.stanford_town_ext_env\",\"names\":[\"StanfordTownExtEnv\"]}}"}, {"id": "metagpt/environment/stanford_town_env/stanford_town_env.py:names:['StanfordTownExtEnv']"}, {"id": "{\"lineno\":11,\"end_lineno\":12,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"StanfordTownEnv\"],\"properties\":{}}"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:module:pydantic"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:names:['Field']"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:module:metagpt.environment.base_env"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:names:['Environment']"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:module:metagpt.environment.werewolf_env.werewolf_ext_env"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.werewolf_env.werewolf_ext_env\",\"names\":[\"WerewolfExtEnv\"]}}"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:names:['WerewolfExtEnv']"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:module:metagpt.logs"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:names:['logger']"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:module:metagpt.schema"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/environment/werewolf_env/werewolf_env.py:names:['Message']"}, {"id": "{\"lineno\":13,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WerewolfEnv\"],\"properties\":{}}"}, {"id": "metagpt/environment/werewolf_env/__init__.py"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_role_type_players"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_init_players_state"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_update_players_state"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_check_valid_role"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_check_player_continue"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:STEP_INSTRUCTIONS"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:random"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"random\"],\"properties\":{}}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:collections"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"Counter\"]}}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['Counter']"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:enum"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['Enum']"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:typing"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['Callable', 'Optional']"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['ConfigDict', 'Field']"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:metagpt.environment.base_env"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['ExtEnv', 'mark_as_readable', 'mark_as_writeable']"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:metagpt.logs"}, {"id": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['logger']"}, {"id": "{\"lineno\":16,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleState\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":97,\"type_name\":\"ast.Assign\",\"tokens\":[\"STEP_INSTRUCTIONS\"],\"properties\":{}}"}, {"id": "{\"lineno\":100,\"end_lineno\":335,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WerewolfExtEnv\"],\"properties\":{}}"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIRegistry:__getitem__"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIRegistry:__setitem__"}, {"id": "metagpt/environment/api/env_api.py:EnvAPIRegistry:__len__"}, {"id": "metagpt/environment/api/env_api.py:module:typing"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Union\"]}}"}, {"id": "metagpt/environment/api/env_api.py:names:['Any', 'Callable', 'Union']"}, {"id": "metagpt/environment/api/env_api.py:module:pydantic"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"id": "metagpt/environment/api/env_api.py:names:['BaseModel', 'Field']"}, {"id": "{\"lineno\":10,\"end_lineno\":15,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnvAPIAbstract\"],\"properties\":{}}"}, {"id": "{\"lineno\":18,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnvAPIRegistry\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":54,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteAPIRegistry\"],\"properties\":{}}"}, {"id": "{\"lineno\":57,\"end_lineno\":60,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReadAPIRegistry\"],\"properties\":{}}"}, {"id": "metagpt/environment/api/__init__.py"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:json"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:re"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:time"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"time\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterable\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['Any', 'Iterable']"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:langchain.embeddings.openai"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.embeddings.openai\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['OpenAIEmbeddings']"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:langchain.vectorstores"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores\",\"names\":[\"Chroma\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['Chroma']"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:pydantic"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['ConfigDict', 'Field']"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.config2"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config as CONFIG\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['config as CONFIG']"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.environment.base_env"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['Environment']"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.environment.mincraft_env.const"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.const\",\"names\":[\"MC_CKPT_DIR\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['MC_CKPT_DIR']"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.environment.mincraft_env.mincraft_ext_env"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.mincraft_ext_env\",\"names\":[\"MincraftExtEnv\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['MincraftExtEnv']"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.logs"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['logger']"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"load_mc_skills_code\",\"read_json_file\",\"write_json_file\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_env.py:names:['load_mc_skills_code', 'read_json_file', 'write_json_file']"}, {"id": "{\"lineno\":23,\"end_lineno\":391,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MincraftEnv\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/__init__.py"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:__init__"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:_start"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:re"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:subprocess"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:threading"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"threading\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:warnings"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:module:typing"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:names:['List']"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:psutil"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"psutil\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:module:metagpt.logs"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"define_log_level\"]}}"}, {"id": "metagpt/environment/mincraft_env/process_monitor.py:names:['define_log_level']"}, {"id": "{\"lineno\":16,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SubprocessMonitor\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:_post_init_ext_env"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:json"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:time"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"time\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:typing"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['Optional']"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:requests"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['ConfigDict', 'Field', 'model_validator']"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:metagpt.environment.base_env"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_writeable\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['ExtEnv', 'mark_as_writeable']"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:metagpt.environment.mincraft_env.const"}, {"id": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.const\",\"names\":[\"MC_CKPT_DIR\",\"MC_CORE_INVENTORY_ITEMS\",\"MC_CURRICULUM_OB\",\"MC_DEFAULT_WARMUP\",\"METAGPT_ROOT\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['MC_CKPT_DIR', 'MC_CORE_INVENTORY_ITEMS', 'MC_CURRICULUM_OB', 'MC_DEFAULT_WARMUP', 'METAGPT_ROOT']"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:metagpt.environment.mincraft_env.process_monitor"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.process_monitor\",\"names\":[\"SubprocessMonitor\"]}}"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['SubprocessMonitor']"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:metagpt.logs"}, {"id": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['logger']"}, {"id": "{\"lineno\":25,\"end_lineno\":180,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MincraftExtEnv\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/const.py"}, {"id": "metagpt/environment/mincraft_env/const.py:MC_CKPT_DIR"}, {"id": "metagpt/environment/mincraft_env/const.py:MC_LOG_DIR"}, {"id": "metagpt/environment/mincraft_env/const.py:MC_DEFAULT_WARMUP"}, {"id": "metagpt/environment/mincraft_env/const.py:MC_CURRICULUM_OB"}, {"id": "metagpt/environment/mincraft_env/const.py:MC_CORE_INVENTORY_ITEMS"}, {"id": "metagpt/environment/mincraft_env/const.py:module:metagpt.const"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"METAGPT_ROOT\"]}}"}, {"id": "metagpt/environment/mincraft_env/const.py:names:['METAGPT_ROOT']"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_CKPT_DIR\"],\"properties\":{}}"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_LOG_DIR\"],\"properties\":{}}"}, {"id": "{\"lineno\":10,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_DEFAULT_WARMUP\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_CURRICULUM_OB\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_CORE_INVENTORY_ITEMS\"],\"properties\":{}}"}, {"id": "metagpt/environment/mincraft_env/const.py:ast.Tuple:['|cobblestone|dirt|coal|.*_pickaxe|.*_sword|.*_axe']"}, {"id": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Tuple\",[\"|cobblestone|dirt|coal|.*_pickaxe|.*_sword|.*_axe\"]],\"properties\":{}}"}, {"id": "metagpt/environment/software_env/__init__.py"}, {"id": "metagpt/environment/software_env/software_env.py:module:metagpt.environment.base_env"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"id": "metagpt/environment/software_env/software_env.py:names:['Environment']"}, {"id": "{\"lineno\":9,\"end_lineno\":12,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SoftwareEnv\"],\"properties\":{}}"}, {"id": "metagpt/strategy/planner.py:Planner:__init__"}, {"id": "metagpt/strategy/planner.py:STRUCTURAL_CONTEXT"}, {"id": "metagpt/strategy/planner.py:module:__future__"}, {"id": "metagpt/strategy/planner.py:names:['annotations']"}, {"id": "metagpt/strategy/planner.py:json"}, {"id": "metagpt/strategy/planner.py:module:pydantic"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"id": "metagpt/strategy/planner.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/strategy/planner.py:module:metagpt.actions.ci.ask_review"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.ask_review\",\"names\":[\"AskReview\",\"ReviewConst\"]}}"}, {"id": "metagpt/strategy/planner.py:names:['AskReview', 'ReviewConst']"}, {"id": "metagpt/strategy/planner.py:module:metagpt.actions.ci.write_plan"}, {"id": "{\"lineno\":8,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_plan\",\"names\":[\"WritePlan\",\"precheck_update_plan_from_rsp\",\"update_plan_from_rsp\"]}}"}, {"id": "metagpt/strategy/planner.py:names:['WritePlan', 'precheck_update_plan_from_rsp', 'update_plan_from_rsp']"}, {"id": "metagpt/strategy/planner.py:module:metagpt.logs"}, {"id": "metagpt/strategy/planner.py:names:['logger']"}, {"id": "metagpt/strategy/planner.py:module:metagpt.memory"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"id": "metagpt/strategy/planner.py:names:['Memory']"}, {"id": "metagpt/strategy/planner.py:module:metagpt.schema"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\",\"Task\",\"TaskResult\"]}}"}, {"id": "metagpt/strategy/planner.py:names:['Message', 'Plan', 'Task', 'TaskResult']"}, {"id": "{\"lineno\":17,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRUCTURAL_CONTEXT\"],\"properties\":{}}"}, {"id": "{\"lineno\":29,\"end_lineno\":139,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Planner\"],\"properties\":{}}"}, {"id": "metagpt/strategy/solver.py:BaseSolver:__init__"}, {"id": "metagpt/strategy/solver.py:ast.Constant:\n@Time : 2024/1/30 17:13\n@Author : alexanderwu\n@File : solver.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/30 17:13\\n@Author : alexanderwu\\n@File : solver.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/strategy/solver.py:module:abc"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"abstractmethod\"]}}"}, {"id": "metagpt/strategy/solver.py:names:['abstractmethod']"}, {"id": "metagpt/strategy/solver.py:module:metagpt.actions.action_graph"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_graph\",\"names\":[\"ActionGraph\"]}}"}, {"id": "metagpt/strategy/solver.py:names:['ActionGraph']"}, {"id": "metagpt/strategy/solver.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/strategy/solver.py:names:['BaseLLM']"}, {"id": "metagpt/strategy/solver.py:module:metagpt.strategy.search_space"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.search_space\",\"names\":[\"SearchSpace\"]}}"}, {"id": "metagpt/strategy/solver.py:names:['SearchSpace']"}, {"id": "{\"lineno\":15,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":35,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"NaiveSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":45,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TOTSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":56,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeInterpreterSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":59,\"end_lineno\":63,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReActSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":66,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IOSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":73,\"end_lineno\":77,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"COTSolver\"],\"properties\":{}}"}, {"id": "metagpt/strategy/tot_schema.py:module:enum"}, {"id": "metagpt/strategy/tot_schema.py:names:['Enum']"}, {"id": "metagpt/strategy/tot_schema.py:module:pydantic"}, {"id": "metagpt/strategy/tot_schema.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/strategy/tot_schema.py:module:metagpt.strategy.base"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"BaseEvaluator\",\"BaseParser\"]}}"}, {"id": "metagpt/strategy/tot_schema.py:names:['BaseEvaluator', 'BaseParser']"}, {"id": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MethodSelect\"],\"properties\":{}}"}, {"id": "{\"lineno\":17,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Strategy\"],\"properties\":{}}"}, {"id": "{\"lineno\":23,\"end_lineno\":30,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtSolverConfig\"],\"properties\":{}}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:__init__"}, {"id": "metagpt/strategy/tot.py:BFSSolver:_bfs_build"}, {"id": "metagpt/strategy/tot.py:DFSSolver:_dfs"}, {"id": "metagpt/strategy/tot.py:TreeofThought:__init__"}, {"id": "metagpt/strategy/tot.py:TreeofThought:_initialize_solver"}, {"id": "metagpt/strategy/tot.py:OUTPUT_FORMAT"}, {"id": "metagpt/strategy/tot.py:module:__future__"}, {"id": "metagpt/strategy/tot.py:names:['annotations']"}, {"id": "metagpt/strategy/tot.py:asyncio"}, {"id": "metagpt/strategy/tot.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"List\",\"Optional\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['Any', 'List', 'Optional']"}, {"id": "metagpt/strategy/tot.py:module:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['BaseModel', 'ConfigDict', 'Field']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.llm"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['LLM']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.logs"}, {"id": "metagpt/strategy/tot.py:names:['logger']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.provider.base_llm"}, {"id": "metagpt/strategy/tot.py:names:['BaseLLM']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.strategy.base"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"ThoughtNode\",\"ThoughtTree\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['ThoughtNode', 'ThoughtTree']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.strategy.tot_schema"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.tot_schema\",\"names\":[\"MethodSelect\",\"Strategy\",\"ThoughtSolverConfig\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['MethodSelect', 'Strategy', 'ThoughtSolverConfig']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.utils.common"}, {"id": "metagpt/strategy/tot.py:names:['CodeParser']"}, {"id": "{\"lineno\":19,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"OUTPUT_FORMAT\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":123,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtSolverBase\"],\"properties\":{}}"}, {"id": "{\"lineno\":126,\"end_lineno\":177,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BFSSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":180,\"end_lineno\":227,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DFSSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":230,\"end_lineno\":232,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MCTSSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":235,\"end_lineno\":277,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TreeofThought\"],\"properties\":{}}"}, {"id": "metagpt/strategy/__init__.py"}, {"id": "metagpt/strategy/search_space.py:SearchSpace:__init__"}, {"id": "metagpt/strategy/search_space.py:ast.Constant:\n@Time : 2024/1/30 17:15\n@Author : alexanderwu\n@File : search_space.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/30 17:15\\n@Author : alexanderwu\\n@File : search_space.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":10,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchSpace\"],\"properties\":{}}"}, {"id": "metagpt/strategy/base.py:BaseParser:__call__"}, {"id": "metagpt/strategy/base.py:BaseEvaluator:__call__"}, {"id": "metagpt/strategy/base.py:module:abc"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"id": "metagpt/strategy/base.py:names:['ABC']"}, {"id": "metagpt/strategy/base.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/strategy/base.py:names:['List']"}, {"id": "metagpt/strategy/base.py:module:anytree"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anytree\",\"names\":[\"Node\",\"RenderTree\"]}}"}, {"id": "metagpt/strategy/base.py:names:['Node', 'RenderTree']"}, {"id": "metagpt/strategy/base.py:module:pydantic"}, {"id": "metagpt/strategy/base.py:names:['BaseModel']"}, {"id": "{\"lineno\":12,\"end_lineno\":23,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseEvaluator\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtNode\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":109,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtTree\"],\"properties\":{}}"}, {"id": "{\"name\":\"AIMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"APIRequestor\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"AZURE_AD,OPEN_AI\",\"default_value\":\"\"},{\"name\":\"api_version\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"base_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"organization\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Action\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"node\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prefix\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ActionGraph\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"edges\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"execution_order\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"nodes\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ActionNode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"children\",\"visibility\":\"+\",\"value_type\":\"dict[str,ActionNode]\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"example\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"expected_type\",\"visibility\":\"+\",\"value_type\":\"Type\",\"default_value\":\"\"},{\"name\":\"func\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"BaseModel\",\"default_value\":\"\"},{\"name\":\"instruction\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"nexts\",\"visibility\":\"+\",\"value_type\":\"List[ActionNode]\",\"default_value\":\"\"},{\"name\":\"params\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Type]\",\"default_value\":\"\"},{\"name\":\"prevs\",\"visibility\":\"+\",\"value_type\":\"List[ActionNode]\",\"default_value\":\"\"},{\"name\":\"schema\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ActionOutput\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"BaseModel\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ActionType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AndroidEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cols\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"rows\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AndroidExtEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"adb_prefix\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"adb_prefix_shell\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"adb_prefix_si\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"device_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"device_shape\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"height\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"screenshot_dir\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"},{\"name\":\"width\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"xml_dir\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ApiType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Architect\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ArgumentsParingAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict]\",\"default_value\":\"\"},{\"name\":\"ask\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prompt\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"skill\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Assistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"Optional[SkillsDeclaration]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AsyncSSEClient\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"AttrDict\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AudioData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"audio\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ced\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AzureOpenAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"AsyncAzureOpenAI\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AzureTTS\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"region\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"subscription_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BEAGECTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BFSSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BaseContext\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BaseEvaluator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BaseLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[AsyncOpenAI]]\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"system_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BaseParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BasePostProcessPlugin\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BaseSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"search_space\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BaseStore\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BrainMemory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cacheable\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"historical_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"List[Message]\",\"default_value\":\"\"},{\"name\":\"history_text\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"is_dirty\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_history_available\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"knowledge\",\"visibility\":\"+\",\"value_type\":\"List[Message]\",\"default_value\":\"\"},{\"name\":\"last_history_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"last_talk\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseLLM]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BrowserConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chromium','firefox','webkit','chrome','firefox','edge','ie']\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BugFixContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CLIParams\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"git_reinit\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"inc\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"max_auto_summarize_code\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"reqa_file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"COTSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"CatCount\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"encoder_dict\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CatCross\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"combs\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"combs_map\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"max_cat_num\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ChangeType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ChromaStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"collection\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Claude2\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CodeBlockInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"end_lineno\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"lineno\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"properties\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"},{\"name\":\"tokens\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"type_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CodeInterpreterSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"CodeParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"CodePlanAndChangeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"design_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prd_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"requirement\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CodeSummarizeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"codes_filenames\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"design_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"reason\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CodingContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"design_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CollectLinks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"rank_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[[list[str]],None]]\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngine]\",\"default_value\":\"\"},{\"name\":\"search_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Components\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"ConductResearch\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"azure_tts_region\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"azure_tts_subscription_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"browser\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_review_k_times\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"enable_longterm_memory\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"iflytek_api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"iflytek_api_secret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"iflytek_app_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inc\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_auto_summarize_code\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mermaid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"metagpt_tti_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"Literal['json','markdown','raw']\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"redis\",\"visibility\":\"+\",\"value_type\":\"Optional[RedisConfig]\",\"default_value\":\"\"},{\"name\":\"redis_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"repair_llm_output\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"reqa_file\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"s3\",\"visibility\":\"+\",\"value_type\":\"Optional[S3Config]\",\"default_value\":\"\"},{\"name\":\"search\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"alias\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arbitrary_types_allowed\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Context\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"Optional[GitRepository]\",\"default_value\":\"\"},{\"name\":\"kwargs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"Optional[ProjectRepo]\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ContextMixin\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"private_config\",\"visibility\":\"+\",\"value_type\":\"Optional[Config]\",\"default_value\":\"\"},{\"name\":\"private_context\",\"visibility\":\"+\",\"value_type\":\"Optional[Context]\",\"default_value\":\"\"},{\"name\":\"private_llm\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseLLM]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"max_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Costs\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CustomDecoder\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"parse_object\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"parse_string\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"scan_once\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CustomerService\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseStore]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DDGAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ddgs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"Optional[futures.Executor]\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"Optional[asyncio.AbstractEventLoop]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DFSSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DataPreprocessTool\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DataSource\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DebugError\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DependencyFile\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"exists\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DesignReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DiGraphRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"pathname\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"root\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DocFileRepositories\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"class_view\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_summary\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"system_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DocstringCollector\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstrings\",\"visibility\":\"+\",\"value_type\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_value\":\"\"},{\"name\":\"stack\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DocstringParser\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstring\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DocstringTransformer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstrings\",\"visibility\":\"+\",\"value_type\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_value\":\"\"},{\"name\":\"stack\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Document\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"author\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"reviews\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Document\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"root_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"root_relative_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DocumentStatus\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Documents\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotClassAttribute\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"default_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"type_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotClassInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"attributes\",\"visibility\":\"+\",\"value_type\":\"Dict[str,DotClassAttribute]\",\"default_value\":\"\"},{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"methods\",\"visibility\":\"+\",\"value_type\":\"Dict[str,DotClassMethod]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"package\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotClassMethod\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"List[DotClassAttribute]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"return_args\",\"visibility\":\"+\",\"value_type\":\"Optional[DotReturn]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotClassRelationship\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"dest\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"label\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"relationship\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotReturn\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"type_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Embedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"List[float]\",\"default_value\":\"\"},{\"name\":\"index\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"object\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Engineer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"action_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_todos\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_borg\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_summarize\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"next_todo_action\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"summarize_todos\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"use_code_review\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"EnronTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"Entity\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"List[Skill]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"EnvAPIAbstract\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"set\",\"default_value\":\"\"},{\"name\":\"kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"EnvAPIRegistry\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"registry\",\"visibility\":\"+\",\"value_type\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"EnvType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Environment\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_idle\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"member_addrs\",\"visibility\":\"+\",\"value_type\":\"Dict[Role,Set]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"roles\",\"visibility\":\"+\",\"value_type\":\"dict[str,SerializeAsAny[Role]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Example\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"answer\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ask\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ExecuteTask\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"list[Message]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ExtEnv\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"ExtractTimeComps\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"time_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"time_comps\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FaissStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"OpenAIEmbeddings\",\"default_value\":\"\"},{\"name\":\"meta_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"File\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"CHUNK_SIZE\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FileRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"all_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"changed_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"root_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FillMissingValue\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"SimpleImputer\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FireworksCostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FireworksLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auto_max_tokens\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FixBug\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GPTPromptGenerator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"GPTvGenerator\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GeminiGenerativeModel\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"GeminiLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GeneralAPIRequestor\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"GeneralSelection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"feats\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"label_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GenerateQuestions\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GenerateTable\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GetMessageFromWeb\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"domain\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"ret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"spark_api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_api_secret\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_appid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"text\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GitRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"changed_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"is_valid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GoogleAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"cse_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"Optional[futures.Executor]\",\"default_value\":\"\"},{\"name\":\"google_api_client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"Optional[asyncio.AbstractEventLoop]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GoogleDocstringParser\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstring\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GraphKeyword\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"CLASS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"CLASS_METHOD\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"CLASS_PROPERTY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FUNCTION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"GLOBAL_VARIABLE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_METHOD\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_PROPERTY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_USE_CASE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_VIEW\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_DETAIL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_FUNCTION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_PAGE_INFO\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_PARTICIPANT\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_SEQUENCE_VIEW\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_SEQUENCE_VIEW_VER\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS_AGGREGATE_OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS_COMPOSITE_OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"NULL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ON\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"SOURCE_CODE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GraphRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GroupStat\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"agg_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"agg_funcs\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"group_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"group_df\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"HumanInteraction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"stop_list\",\"visibility\":\"+\",\"value_type\":\"tuple\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"HumanProvider\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"system_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"IFlyTekTTS\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"IFlyTekTTSResponse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"Optional[AudioData]\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"sid\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"IFlyTekTTSStatus\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"IOSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"ImageResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"images\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"parameters\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"IndexableDocument\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content_col\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"Union[pd.DataFrame,list]\",\"default_value\":\"\"},{\"name\":\"meta_col\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"InvoiceData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"invoice_data\",\"visibility\":\"+\",\"value_type\":\"list[dict]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"InvoiceOCR\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"InvoiceOCRAssistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"orc_data\",\"visibility\":\"+\",\"value_type\":\"Optional[list]\",\"default_value\":\"\"},{\"name\":\"origin_query\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"InvoicePath\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"file_path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"KFoldTargetMeanEncoder\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"encoder_dict\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"label\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_splits\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"random_state\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LLMConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_version\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"base_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"best_of\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"calc_usage\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"domain\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"frequency_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"logprobs\",\"visibility\":\"+\",\"value_type\":\"Optional[bool]\",\"default_value\":\"\"},{\"name\":\"max_token\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"n\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"presence_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"repetition_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"stop\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"stream\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"temperature\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"timeout\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"top_k\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"top_logprobs\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"top_p\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LLMProviderRegistry\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"providers\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LLMType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LabelEncode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"le_encoders\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LanceStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"db\",\"visibility\":\"+\",\"value_type\":\"LanceDBConnection,RemoteDBConnection\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"table\",\"visibility\":\"+\",\"value_type\":\"LanceTable,NoneType,RemoteTable\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LocalStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cache_dir\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"},{\"name\":\"fname\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"raw_data_path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LongTermMemory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"memory_storage\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"msg_from_recover\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"rc\",\"visibility\":\"+\",\"value_type\":\"Optional[RoleContext]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MCTSSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"MLProcess\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"MaxAbsScale\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"MaxAbsScaler\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MeilisearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"Client\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Memory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ignore_id\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"index\",\"visibility\":\"+\",\"value_type\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_value\":\"\"},{\"name\":\"storage\",\"visibility\":\"+\",\"value_type\":\"list[SerializeAsAny[Message]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MemoryStorage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"OpenAIEmbeddings\",\"default_value\":\"\"},{\"name\":\"is_initialized\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mem_ttl\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"role_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"role_mem_path\",\"visibility\":\"+\",\"value_type\":\"Optional[str],Path\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"NoneType,Optional[FAISS]\",\"default_value\":\"\"},{\"name\":\"threshold\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MermaidConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"puppeteer_config\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"pyppeteer_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Message\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cause_by\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseModel]\",\"default_value\":\"\"},{\"name\":\"role\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"send_to\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"sent_from\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MessageQueue\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MessageType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MetaGPTLLM\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"MetaGPTText2Image\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MethodSelect\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MinMaxScale\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"MinMaxScaler\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MincraftEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"chest_memory\",\"visibility\":\"+\",\"value_type\":\"dict[str,Any]\",\"default_value\":\"\"},{\"name\":\"chest_observation\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"completed_tasks\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"critique\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"current_task\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"event\",\"visibility\":\"+\",\"value_type\":\"dict[str,Any]\",\"default_value\":\"\"},{\"name\":\"event_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"failed_tasks\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"program_code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"program_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"programs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"progress\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"qa_cache\",\"visibility\":\"+\",\"value_type\":\"dict[str,str]\",\"default_value\":\"\"},{\"name\":\"qa_cache_questions_vectordb\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"retrieve_skills\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"runtime_status\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"skill_desp\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"task_execution_time\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"vectordb\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MincraftExtEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"connected\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"has_reset\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"mc_port\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"mineflayer\",\"visibility\":\"+\",\"value_type\":\"Optional[SubprocessMonitor]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"request_timeout\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"reset_options\",\"visibility\":\"+\",\"value_type\":\"Optional[dict]\",\"default_value\":\"\"},{\"name\":\"server\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"server_host\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"server_paused\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"server_port\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"warm_up\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Moderation\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"NaiveSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"NoMoneyException\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"amount\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OCRResults\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ocr_result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OllamaLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"http_method\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"suffix_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OneHotEncode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"OneHotEncoder\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"AsyncOpenAI\",\"default_value\":\"\"},{\"name\":\"auto_max_tokens\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenAIResponse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"operation_location\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"organization\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"request_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"response_ms\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"retry_after\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenAIText2Embedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenAIText2Image\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OrdinalEncode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"OrdinalEncoder\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OutputParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"Parameter\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Plan\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"current_task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"current_task_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_map\",\"visibility\":\"+\",\"value_type\":\"dict[str,Task]\",\"default_value\":\"\"},{\"name\":\"tasks\",\"visibility\":\"+\",\"value_type\":\"list[Task]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Planner\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auto_run\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"current_task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"current_task_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"use_tools\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"working_memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"PlaywrightWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chromium','firefox','webkit']\",\"default_value\":\"\"},{\"name\":\"context_kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"launch_kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"PolynomialExpansion\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"degree\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"label_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"poly\",\"visibility\":\"+\",\"value_type\":\"PolynomialFeatures\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"PrepareDocuments\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"PrepareInterview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ProductManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"todo_action\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ProjectManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ProjectRepo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"requirement\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"resources\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"src_relative_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"srcs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"test_outputs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"tests\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"PromptString\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"QaEngineer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"test_round\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"test_round_allowed\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"QdrantConnection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"port\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"QdrantStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"QdrantClient\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReActSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"ReadAPIRegistry\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"RebuildClassView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"Optional[GraphRepository]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RebuildSequenceView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"Optional[GraphRepository]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Redis\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"Optional[RedisConfig]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RedisConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"db\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"password\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"port\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"username\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RepairType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReplyData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReplyQuestion\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Repo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"assets\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"codes\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RepoFileInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"classes\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"functions\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"globals\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"page_info\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RepoMetadata\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"n_chars\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_docs\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"symbols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RepoParser\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"base_directory\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Report\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"links\",\"visibility\":\"+\",\"value_type\":\"Optional[dict[str,list[str]]]\",\"default_value\":\"\"},{\"name\":\"summaries\",\"visibility\":\"+\",\"value_type\":\"Optional[list[tuple[str,str]]]\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Researcher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ResourceFileRepositories\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_spec_and_task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_summary\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"competitive_analysis\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"data_api_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"sd_output\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"seq_flow\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"system_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ResultEmbedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"List[Embedding]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"object_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"usage\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Returns\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"format\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReverseUseCase\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"actors\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inputs\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"outputs\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"reason\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"steps\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReverseUseCaseDetails\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"relationship\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"use_cases\",\"visibility\":\"+\",\"value_type\":\"List[ReverseUseCase]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReviewMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReviseMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RobustScale\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"RobustScaler\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Role\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"action_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"actions\",\"visibility\":\"+\",\"value_type\":\"list[SerializeAsAny[Action]]\",\"default_value\":\"\"},{\"name\":\"addresses\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_human\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_idle\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"latest_observed_msg\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"planner\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rc\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"recovered\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"role_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"states\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"todo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RoleContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"env\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"important_memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_react_loop\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"msg_buffer\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"news\",\"visibility\":\"+\",\"value_type\":\"list[Type[Message]]\",\"default_value\":\"\"},{\"name\":\"react_mode\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"state\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"todo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"watch\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"working_memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RoleReactMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RoleState\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RunCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RunCodeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"additional_python_paths\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"code_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"command\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"mode\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"output\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"output_filename\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"test_code\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"test_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"working_directory\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RunCodeResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"stderr\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"stdout\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"S3\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auth_config\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"session\",\"visibility\":\"+\",\"value_type\":\"Session\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"S3Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"access_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"bucket\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"endpoint\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"secret_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SDEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"payload\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"sd_t2i_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"sd_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SPO\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"object_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"predicate\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"subject\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Sales\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseStore]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SearchAndSummarize\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngine]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SearchConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cse_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"search_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"run_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SearchEngineType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SearchSpace\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"search_space\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Searcher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngine]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SeleniumWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chrome','firefox','edge','ie']\",\"default_value\":\"\"},{\"name\":\"executable_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"Optional[futures.Executor]\",\"default_value\":\"\"},{\"name\":\"launch_args\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"launch_kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"Optional[asyncio.AbstractEventLoop]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SerializationMixin\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"SerpAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aiosession\",\"visibility\":\"+\",\"value_type\":\"Optional[aiohttp.ClientSession]\",\"default_value\":\"\"},{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"params\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SerperWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aiosession\",\"visibility\":\"+\",\"value_type\":\"Optional[aiohttp.ClientSession]\",\"default_value\":\"\"},{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"payload\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SimpleMessage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"role\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Singleton\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"SkAgent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"import_semantic_skill_from_directory\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"import_skill\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"kernel\",\"visibility\":\"+\",\"value_type\":\"Kernel\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"plan\",\"visibility\":\"+\",\"value_type\":\"Plan\",\"default_value\":\"\"},{\"name\":\"planner\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_value\":\"\"},{\"name\":\"planner_cls\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SkSearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Skill\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arguments\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"examples\",\"visibility\":\"+\",\"value_type\":\"List[Example]\",\"default_value\":\"\"},{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"parameters\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict[str,Parameter]]\",\"default_value\":\"\"},{\"name\":\"returns\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"x_prerequisite\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SkillAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"skill\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SkillManager\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"SkillsDeclaration\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"components\",\"visibility\":\"+\",\"value_type\":\"Optional[Components]\",\"default_value\":\"\"},{\"name\":\"entities\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Entity]\",\"default_value\":\"\"},{\"name\":\"skillapi\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SoftwareEnv\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"SparkLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SplitBins\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"encoder\",\"visibility\":\"+\",\"value_type\":\"KBinsDiscretizer,NoneType\",\"default_value\":\"\"},{\"name\":\"strategy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"StandardScale\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"StandardScaler\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"StanfordTownEnv\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"StanfordTownExtEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"address_tiles\",\"visibility\":\"+\",\"value_type\":\"dict[str,set]\",\"default_value\":\"\"},{\"name\":\"collision_maze\",\"visibility\":\"+\",\"value_type\":\"list[list]\",\"default_value\":\"\"},{\"name\":\"maze_asset_path\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"},{\"name\":\"maze_height\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"maze_width\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"special_constraint\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"sq_tile_size\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"tiles\",\"visibility\":\"+\",\"value_type\":\"list[list[dict]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Strategy\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SubprocessMonitor\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"callback\",\"visibility\":\"+\",\"value_type\":\"Optional[callable]\",\"default_value\":\"\"},{\"name\":\"callback_match\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"commands\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"finished_callback\",\"visibility\":\"+\",\"value_type\":\"Optional[callable]\",\"default_value\":\"\"},{\"name\":\"is_running\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"logger\",\"visibility\":\"+\",\"value_type\":\"Logger\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"process\",\"visibility\":\"+\",\"value_type\":\"NoneType,Popen\",\"default_value\":\"\"},{\"name\":\"ready_event\",\"visibility\":\"+\",\"value_type\":\"Event,NoneType\",\"default_value\":\"\"},{\"name\":\"ready_line\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"ready_match\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"thread\",\"visibility\":\"+\",\"value_type\":\"NoneType,Thread\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SubscriptionRunner\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"tasks\",\"visibility\":\"+\",\"value_type\":\"dict[Role,asyncio.Task]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SummarizeCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SystemMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"TOTSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"TalkAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aask_args\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"agent_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"history_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"knowledge\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_gpt4\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TalkActionPrompt\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"FORMATION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FORMATION_LOOSE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TargetMeanEncoder\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"encoder_dict\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"label\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Task\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"dependent_task_ids\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"instruction\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_finished\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_success\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TaskResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_success\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Teacher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"course_title\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TeachingPlanBlock\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"COURSE_TITLE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"DATA_BEGIN_TAG\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"DATA_END_TAG\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FORMATION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"PROMPT_TEMPLATE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"TOPICS\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"TOPIC_STATEMENTS\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Team\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"env\",\"visibility\":\"+\",\"value_type\":\"Optional[Environment]\",\"default_value\":\"\"},{\"name\":\"idea\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"investment\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TestingContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code_doc\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"test_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ThoughtNode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"valid_status\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"value\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ThoughtSolverBase\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"Optional[ThoughtTree]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ThoughtSolverConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"evaluator\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_steps\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"method_select\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_generate_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_select_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_solution_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"parser\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ThoughtTree\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"all_nodes\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TokenCostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Tool\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"schemas\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ToolRegistry\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"tool_types\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"tools\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"tools_by_types\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ToolSchema\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ToolType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"type_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ToolTypeDef\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"usage_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Translator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"TreeBasedSelection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"feats\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"label_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TreeofThought\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"solver\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"strategy\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TutorialAssistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"main_title\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"total_content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UMLClassAttribute\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"default_value\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"value_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UMLClassMeta\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"visibility\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UMLClassMethod\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassAttribute]\",\"default_value\":\"\"},{\"name\":\"return_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UMLClassView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"attributes\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassAttribute]\",\"default_value\":\"\"},{\"name\":\"methods\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassMethod]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UTGenerator\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"chatgpt_method\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"icl_sample\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"questions_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"swagger_file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"template_prefix\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ut_py_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Usage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UserMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"UserRequirement\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"VarianceBasedSelection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"feats\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"label_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"selector\",\"visibility\":\"+\",\"value_type\":\"VarianceThreshold\",\"default_value\":\"\"},{\"name\":\"threshold\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"VisualDiGraphRepo\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"VisualGraphRepo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WDMHttpProxyClient\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WebBrowseAndSummarize\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browse_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"web_browser_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[WebBrowserEngine]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WebBrowserEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"run_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[...,Coroutine[Any,Any,Union[WebPage,list[WebPage]]]]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WebBrowserEngineType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WebPage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"html\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inner_text\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"soup\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"title\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WerewolfEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"timestamp\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WerewolfExtEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"eval_step_idx\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"game_setup\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_hunted_player_saved\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"living_players\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"per_round_steps\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"player_current_dead\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"player_hunted\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"player_poisoned\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"player_protected\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"players_state\",\"visibility\":\"+\",\"value_type\":\"dict[str,tuple[str,RoleState]]\",\"default_value\":\"\"},{\"name\":\"round_hunts\",\"visibility\":\"+\",\"value_type\":\"dict[str,str]\",\"default_value\":\"\"},{\"name\":\"round_idx\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"round_votes\",\"visibility\":\"+\",\"value_type\":\"dict[str,str]\",\"default_value\":\"\"},{\"name\":\"special_role_players\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"step_idx\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"villager_players\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"werewolf_players\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"win_reason\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"winner\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"witch_antidote_left\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"witch_poison_left\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WikiHowTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"WorkspaceConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"uid\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_uid\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteAPIRegistry\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"WriteCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteCodeAN\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"WriteCodePlanAndChange\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteCodeReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteContent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"directory\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteDesign\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteDirectory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteDocstring\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WritePRD\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WritePRDReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"prd_review_prompt_template\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteTasks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteTeachingPlanPart\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteTest\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[TestingContext]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WsParam\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"YamlModel\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"extra_fields\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict[str,str]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"YamlModelWithoutDefault\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"ZhiPuAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ZhiPuEvent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ZhiPuModelAPI\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"_AgentSkill\",\"visibility\":\"#\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"_VisualClassView\",\"visibility\":\"#\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"generalizations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"package\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"uml\",\"visibility\":\"+\",\"value_type\":\"Optional[UMLClassView]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"reSTDocstringParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}], "links": [{"predicate": "is", "source": "metagpt/schema.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/schema.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:AIMessage"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:BugFixContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:CodePlanAndChangeContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:CodeSummarizeContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:CodingContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:Document"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:Documents"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:MessageQueue"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:Plan"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:RunCodeContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:RunCodeResult"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:SerializationMixin"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:SimpleMessage"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:SystemMessage"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:Task"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:TaskResult"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:TestingContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UMLClassAttribute"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UMLClassMeta"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UMLClassMethod"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UMLClassView"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UserMessage"}, {"predicate": "is", "source": "metagpt/schema.py:AIMessage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:AIMessage", "target": "{\"name\":\"AIMessage\",\"package\":\"metagpt/schema.py:AIMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:AIMessage", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:AIMessage", "target": "metagpt/schema.py:AIMessage:__init__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:AIMessage", "target": "{\"lineno\":324,\"end_lineno\":330,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AIMessage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:AIMessage", "target": "{\"name\":\"AIMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:APIRequestor"}, {"predicate": "has_class", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:ApiType"}, {"predicate": "has_class", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:OpenAIResponse"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_console_log_level"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:log_debug"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:log_info"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:log_warn"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:logfmt"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_build_api_url"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_requests_proxies_arg"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_aiohttp_proxies_arg"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_make_session"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:parse_stream_helper"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:parse_stream"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:parse_stream_async"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:aiohttp_session"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "{\"name\":\"APIRequestor\",\"package\":\"metagpt/provider/general_api_base.py:APIRequestor\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key : NoneType\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"AZURE_AD,OPEN_AI\",\"default_\":\"\",\"description\":\"api_type : AZURE_AD, OPEN_AI\",\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"]},\"api_version\":{\"name\":\"api_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_version : NoneType\",\"compositions\":[]},\"base_url\":{\"name\":\"base_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"base_url : NoneType\",\"compositions\":[]},\"organization\":{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization : NoneType\",\"compositions\":[]}},\"methods\":{\"arequest\":{\"name\":\"arequest\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[AsyncGenerator[OpenAIResponse,None],bool,str]\",\"description\":\"Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"compositions\":[\"AsyncGenerator\",\"OpenAIResponse\"]},\"description\":\"arequest(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\"]},\"arequest_raw\":{\"name\":\"arequest_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"aiohttp.ClientResponse\",\"description\":\"aiohttp.ClientResponse\",\"compositions\":[\"aiohttp.ClientResponse\"]},\"description\":\"arequest_raw(method, url, session): aiohttp.ClientResponse\",\"aggregations\":[\"aiohttp.ClientResponse\"]},\"request\":{\"name\":\"request\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[Iterator[OpenAIResponse],bool,str]\",\"description\":\"Tuple[Iterator[OpenAIResponse], bool, str]\",\"compositions\":[\"OpenAIResponse\"]},\"description\":\"request(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[Iterator[OpenAIResponse], bool, str]\",\"aggregations\":[\"OpenAIResponse\"]},\"request_headers\":{\"name\":\"request_headers\",\"args\":[{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"extra\",\"type_\":\"\",\"default_\":\"\",\"description\":\"extra\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"request_headers(method: str, extra, request_id: Optional[str]): Dict[str, str]\",\"aggregations\":[]},\"request_raw\":{\"name\":\"request_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"requests.Response\",\"description\":\"requests.Response\",\"compositions\":[\"requests.Response\"]},\"description\":\"request_raw(method, url): requests.Response\",\"aggregations\":[\"requests.Response\"]}},\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"],\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\",\"aiohttp.ClientResponse\",\"requests.Response\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:api_key"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:api_type"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:api_version"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:base_url"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:organization"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:arequest"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:arequest_raw"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:request"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:request_headers"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:request_raw"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:AZURE_AD"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:OPEN_AI"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:OpenAIResponse"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:AsyncGenerator"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:aiohttp.ClientResponse"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:requests.Response"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_validate_headers"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_prepare_request_raw"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_async_response"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response_line"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "{\"lineno\":227,\"end_lineno\":616,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"APIRequestor\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "{\"name\":\"APIRequestor\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"AZURE_AD,OPEN_AI\",\"default_value\":\"\"},{\"name\":\"api_version\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"base_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"organization\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_type", "target": "{\"name\":\"api_type\",\"type_\":\"AZURE_AD,OPEN_AI\",\"default_\":\"\",\"description\":\"api_type : AZURE_AD, OPEN_AI\",\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_version", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_version", "target": "{\"name\":\"api_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_version : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:base_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:base_url", "target": "{\"name\":\"base_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"base_url : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:organization", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:organization", "target": "{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:arequest", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:arequest", "target": "{\"name\":\"arequest\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[AsyncGenerator[OpenAIResponse,None],bool,str]\",\"description\":\"Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"compositions\":[\"AsyncGenerator\",\"OpenAIResponse\"]},\"description\":\"arequest(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:arequest_raw", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:arequest_raw", "target": "{\"name\":\"arequest_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"aiohttp.ClientResponse\",\"description\":\"aiohttp.ClientResponse\",\"compositions\":[\"aiohttp.ClientResponse\"]},\"description\":\"arequest_raw(method, url, session): aiohttp.ClientResponse\",\"aggregations\":[\"aiohttp.ClientResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:request", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:request", "target": "{\"name\":\"request\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[Iterator[OpenAIResponse],bool,str]\",\"description\":\"Tuple[Iterator[OpenAIResponse], bool, str]\",\"compositions\":[\"OpenAIResponse\"]},\"description\":\"request(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[Iterator[OpenAIResponse], bool, str]\",\"aggregations\":[\"OpenAIResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:request_headers", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:request_headers", "target": "{\"name\":\"request_headers\",\"args\":[{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"extra\",\"type_\":\"\",\"default_\":\"\",\"description\":\"extra\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"request_headers(method: str, extra, request_id: Optional[str]): Dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:request_raw", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:request_raw", "target": "{\"name\":\"request_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"requests.Response\",\"description\":\"requests.Response\",\"compositions\":[\"requests.Response\"]},\"description\":\"request_raw(method, url): requests.Response\",\"aggregations\":[\"requests.Response\"]}"}, {"predicate": "is", "source": "metagpt/actions/action.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/action.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/action.py", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action", "target": "{\"name\":\"Action\",\"package\":\"metagpt/actions/action.py:Action\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_\":\"\",\"description\":\"i_context : Union[dict, CodingContext, CodeSummarizeContext, TestingContext, RunCodeContext, CodePlanAndChangeContext, str, None]\",\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"node\":{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},\"prefix\":{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"set_name_if_empty\":{\"name\":\"set_name_if_empty\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_name_if_empty(values)\",\"aggregations\":[]},\"set_prefix\":{\"name\":\"set_prefix\",\"args\":[{\"name\":\"prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prefix\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_prefix(prefix)\",\"aggregations\":[]}},\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:model_config"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:node"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:prefix"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:project_name"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:project_path"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:prompt_schema"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:repo"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:set_name_if_empty"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:set_prefix"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/action.py:Action", "target": "metagpt/context_mixin.py:ContextMixin"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:SerializationMixin"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "isCompositeOn", "source": "metagpt/actions/action.py:Action", "target": "metagpt/roles/role.py:RoleContext:todo"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:CodePlanAndChangeContext"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:CodeSummarizeContext"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:CodingContext"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:RunCodeContext"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:TestingContext"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:_init_with_instruction"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:__str__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:__repr__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:_aask"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:_run_action_node"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:Action", "target": "{\"lineno\":28,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Action\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action.py:Action", "target": "{\"name\":\"Action\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"node\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prefix\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:CodePlanAndChangeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:CodeSummarizeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:CodingContext"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:RunCodeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:TestingContext"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_\":\"\",\"description\":\"i_context : Union[dict, CodingContext, CodeSummarizeContext, TestingContext, RunCodeContext, CodePlanAndChangeContext, str, None]\",\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:node", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:node", "target": "{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:prefix", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:prefix", "target": "{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:project_name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:project_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:project_path", "target": "{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:project_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:prompt_schema", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:prompt_schema", "target": "{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:prompt_schema", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:repo", "target": "{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:set_name_if_empty", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:set_name_if_empty", "target": "{\"name\":\"set_name_if_empty\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_name_if_empty(values)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:set_prefix", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:set_prefix", "target": "{\"name\":\"set_prefix\",\"args\":[{\"name\":\"prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prefix\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_prefix(prefix)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/action_graph.py", "target": "metagpt/actions/action_graph.py:ActionGraph"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "{\"name\":\"ActionGraph\",\"package\":\"metagpt/actions/action_graph.py:ActionGraph\",\"attributes\":{\"edges\":{\"name\":\"edges\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"edges : dict\",\"compositions\":[]},\"execution_order\":{\"name\":\"execution_order\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"execution_order : list\",\"compositions\":[]},\"nodes\":{\"name\":\"nodes\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"nodes : dict\",\"compositions\":[]}},\"methods\":{\"add_edge\":{\"name\":\"add_edge\",\"args\":[{\"name\":\"from_node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"from_node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]},{\"name\":\"to_node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"to_node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_edge(from_node: 'ActionNode', to_node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"add_node\":{\"name\":\"add_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_node(node)\",\"aggregations\":[]},\"topological_sort\":{\"name\":\"topological_sort\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"topological_sort()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "metagpt/actions/action_graph.py:ActionGraph:edges"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "metagpt/actions/action_graph.py:ActionGraph:execution_order"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "metagpt/actions/action_graph.py:ActionGraph:nodes"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "metagpt/actions/action_graph.py:ActionGraph:add_edge"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "metagpt/actions/action_graph.py:ActionGraph:add_node"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "metagpt/actions/action_graph.py:ActionGraph:topological_sort"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "?:ActionNode"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "isAggregateOn", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "metagpt/strategy/solver.py:BaseSolver:graph"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "metagpt/actions/action_graph.py:ActionGraph:__init__"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "{\"lineno\":13,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionGraph\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_graph.py:ActionGraph", "target": "{\"name\":\"ActionGraph\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"edges\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"execution_order\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"nodes\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py:ActionGraph:edges", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_graph.py:ActionGraph:edges", "target": "{\"name\":\"edges\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"edges : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py:ActionGraph:execution_order", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_graph.py:ActionGraph:execution_order", "target": "{\"name\":\"execution_order\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"execution_order : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py:ActionGraph:nodes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_graph.py:ActionGraph:nodes", "target": "{\"name\":\"nodes\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"nodes : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py:ActionGraph:add_edge", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_graph.py:ActionGraph:add_edge", "target": "{\"name\":\"add_edge\",\"args\":[{\"name\":\"from_node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"from_node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]},{\"name\":\"to_node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"to_node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_edge(from_node: 'ActionNode', to_node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py:ActionGraph:add_node", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_graph.py:ActionGraph:add_node", "target": "{\"name\":\"add_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_node(node)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py:ActionGraph:topological_sort", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_graph.py:ActionGraph:topological_sort", "target": "{\"name\":\"topological_sort\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"topological_sort()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/action_node.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:ActionNode"}, {"predicate": "has_class", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:ReviewMode"}, {"predicate": "has_class", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:ReviseMode"}, {"predicate": "has_function", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:dict_to_markdown"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode", "target": "{\"name\":\"ActionNode\",\"package\":\"metagpt/actions/action_node.py:ActionNode\",\"attributes\":{\"children\":{\"name\":\"children\",\"type_\":\"dict[str,ActionNode]\",\"default_\":\"\",\"description\":\"children : dict[str, 'ActionNode']\",\"compositions\":[\"ActionNode\"]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]},\"example\":{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]},\"expected_type\":{\"name\":\"expected_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"expected_type : Type\",\"compositions\":[\"Type\"]},\"func\":{\"name\":\"func\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"func : Callable\",\"compositions\":[\"Callable\"]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]},\"instruction\":{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]},\"key\":{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key : str\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"nexts\":{\"name\":\"nexts\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nexts : List['ActionNode']\",\"compositions\":[\"ActionNode\"]},\"params\":{\"name\":\"params\",\"type_\":\"Dict[str,Type]\",\"default_\":\"\",\"description\":\"params : Dict[str, Type]\",\"compositions\":[\"Type\"]},\"prevs\":{\"name\":\"prevs\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"prevs : List['ActionNode']\",\"compositions\":[\"ActionNode\"]},\"schema\":{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema : str\",\"compositions\":[]}},\"methods\":{\"add_child\":{\"name\":\"add_child\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_child(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"add_children\":{\"name\":\"add_children\",\"args\":[{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_children(nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]},\"add_next\":{\"name\":\"add_next\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_next(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"add_prev\":{\"name\":\"add_prev\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_prev(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"auto_review\":{\"name\":\"auto_review\",\"args\":[{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_review(template: str): dict[str, str]\",\"aggregations\":[]},\"auto_revise\":{\"name\":\"auto_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]},{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_revise(revise_mode: ReviseMode, template: str): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"compile\":{\"name\":\"compile\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"template\",\"type_\":\"\",\"default_\":\"\",\"description\":\"template\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile(context, schema, mode, template, exclude): str\",\"aggregations\":[]},\"compile_example\":{\"name\":\"compile_example\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_example(schema, mode, tag, exclude): str\",\"aggregations\":[]},\"compile_instruction\":{\"name\":\"compile_instruction\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_instruction(schema, mode, tag, exclude): str\",\"aggregations\":[]},\"compile_to\":{\"name\":\"compile_to\",\"args\":[{\"name\":\"i\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"i: Dict\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"kv_sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kv_sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_to(i: Dict, schema, kv_sep): str\",\"aggregations\":[]},\"create_class\":{\"name\":\"create_class\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]},{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_class(mode: str, class_name: str, exclude)\",\"aggregations\":[]},\"create_model_class\":{\"name\":\"create_model_class\",\"args\":[{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"default_\":\"\",\"description\":\"mapping: Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_model_class(class_name: str, mapping: Dict[str, Tuple[Type, Any]])\",\"aggregations\":[\"Type\"]},\"fill\":{\"name\":\"fill\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"strgy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strgy\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fill(context, llm, schema, mode, strgy, images: Optional[Union[str, list[str]]], timeout, exclude)\",\"aggregations\":[]},\"from_children\":{\"name\":\"from_children\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_children(key, nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]},\"from_pydantic\":{\"name\":\"from_pydantic\",\"args\":[{\"name\":\"model\",\"type_\":\"Type[BaseModel]\",\"default_\":\"\",\"description\":\"model: Type[BaseModel]\",\"compositions\":[\"BaseModel\",\"Type\"]},{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_pydantic(model: Type[BaseModel], key: str)\",\"aggregations\":[\"BaseModel\",\"Type\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key)\",\"aggregations\":[]},\"get_child\":{\"name\":\"get_child\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union['ActionNode',None]\",\"description\":\"Union['ActionNode', None]\",\"compositions\":[\"ActionNode\"]},\"description\":\"get_child(key: str): Union['ActionNode', None]\",\"aggregations\":[\"ActionNode\"]},\"get_mapping\":{\"name\":\"get_mapping\",\"args\":[{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_mapping(mode, exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"human_review\":{\"name\":\"human_review\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_review(): dict[str, str]\",\"aggregations\":[]},\"human_revise\":{\"name\":\"human_revise\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_revise(): dict[str, str]\",\"aggregations\":[]},\"keys\":{\"name\":\"keys\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"keys(mode: str): list\",\"aggregations\":[]},\"review\":{\"name\":\"review\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"review(strgy: str, review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]},\"revise\":{\"name\":\"revise\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"revise(strgy: str, revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"set_context\":{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context)\",\"aggregations\":[]},\"set_llm\":{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm)\",\"aggregations\":[]},\"set_recursive\":{\"name\":\"set_recursive\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_recursive(name, value)\",\"aggregations\":[]},\"simple_fill\":{\"name\":\"simple_fill\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_fill(schema, mode, images: Optional[Union[str, list[str]]], timeout, exclude)\",\"aggregations\":[]},\"simple_review\":{\"name\":\"simple_review\",\"args\":[{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_review(review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]},\"simple_revise\":{\"name\":\"simple_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"simple_revise(revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"tagging\":{\"name\":\"tagging\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"tagging(text, schema, tag): str\",\"aggregations\":[]},\"to_dict\":{\"name\":\"to_dict\",\"args\":[{\"name\":\"format_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format_func\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"to_dict(format_func, mode, exclude): Dict\",\"aggregations\":[]},\"update_instruct_content\":{\"name\":\"update_instruct_content\",\"args\":[{\"name\":\"incre_data\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"incre_data: dict[str, Any]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_instruct_content(incre_data: dict[str, Any])\",\"aggregations\":[]}},\"compositions\":[\"ActionNode\",\"Type\",\"Callable\",\"BaseModel\"],\"aggregations\":[\"ReviseMode\",\"ReviewMode\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:children"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:content"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:context"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:example"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:expected_type"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:func"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:instruct_content"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:instruction"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:key"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:llm"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:nexts"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:params"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:prevs"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:schema"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:add_child"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:add_children"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:add_next"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:add_prev"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:auto_review"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:auto_revise"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:compile"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:compile_example"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:compile_instruction"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:compile_to"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:create_class"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:create_model_class"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:fill"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:from_children"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:from_pydantic"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:get"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:get_child"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:get_mapping"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:human_review"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:human_revise"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:keys"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:review"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:revise"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:set_context"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:set_llm"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:set_recursive"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:simple_fill"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:simple_review"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:simple_revise"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:tagging"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:to_dict"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:update_instruct_content"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:Type"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:Callable"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:BaseModel"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:ReviseMode"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:ReviewMode"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action.py:Action"}, {"predicate": "isCompositeOn", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action.py:Action:node"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:__init__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:__str__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:__repr__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_get_children_mapping"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_get_self_mapping"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_create_children_class"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_to_dict"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_compile_f"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_aask_v1"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_req"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_comment"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:ActionNode", "target": "{\"lineno\":122,\"end_lineno\":720,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionNode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_node.py:ActionNode", "target": "{\"name\":\"ActionNode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"children\",\"visibility\":\"+\",\"value_type\":\"dict[str,ActionNode]\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"example\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"expected_type\",\"visibility\":\"+\",\"value_type\":\"Type\",\"default_value\":\"\"},{\"name\":\"func\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"BaseModel\",\"default_value\":\"\"},{\"name\":\"instruction\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"nexts\",\"visibility\":\"+\",\"value_type\":\"List[ActionNode]\",\"default_value\":\"\"},{\"name\":\"params\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Type]\",\"default_value\":\"\"},{\"name\":\"prevs\",\"visibility\":\"+\",\"value_type\":\"List[ActionNode]\",\"default_value\":\"\"},{\"name\":\"schema\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:ActionNode"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:children", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:children", "target": "{\"name\":\"children\",\"type_\":\"dict[str,ActionNode]\",\"default_\":\"\",\"description\":\"children : dict[str, 'ActionNode']\",\"compositions\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:context", "target": "{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:example", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:example", "target": "{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:expected_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:expected_type", "target": "{\"name\":\"expected_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"expected_type : Type\",\"compositions\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:func", "target": "{\"name\":\"func\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"func : Callable\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:instruct_content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:instruct_content", "target": "{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:instruction", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:instruction", "target": "{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:key", "target": "{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:nexts", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:nexts", "target": "{\"name\":\"nexts\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nexts : List['ActionNode']\",\"compositions\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:params", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:params", "target": "{\"name\":\"params\",\"type_\":\"Dict[str,Type]\",\"default_\":\"\",\"description\":\"params : Dict[str, Type]\",\"compositions\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:prevs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:prevs", "target": "{\"name\":\"prevs\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"prevs : List['ActionNode']\",\"compositions\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:schema", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:schema", "target": "{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:add_child", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:add_child", "target": "{\"name\":\"add_child\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_child(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:add_children", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:add_children", "target": "{\"name\":\"add_children\",\"args\":[{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_children(nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:add_next", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:add_next", "target": "{\"name\":\"add_next\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_next(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:add_prev", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:add_prev", "target": "{\"name\":\"add_prev\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_prev(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:auto_review", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:auto_review", "target": "{\"name\":\"auto_review\",\"args\":[{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_review(template: str): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:auto_revise", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:auto_revise", "target": "{\"name\":\"auto_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]},{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_revise(revise_mode: ReviseMode, template: str): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:compile", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:compile", "target": "{\"name\":\"compile\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"template\",\"type_\":\"\",\"default_\":\"\",\"description\":\"template\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile(context, schema, mode, template, exclude): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:compile_example", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:compile_example", "target": "{\"name\":\"compile_example\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_example(schema, mode, tag, exclude): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:compile_instruction", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:compile_instruction", "target": "{\"name\":\"compile_instruction\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_instruction(schema, mode, tag, exclude): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:compile_to", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:compile_to", "target": "{\"name\":\"compile_to\",\"args\":[{\"name\":\"i\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"i: Dict\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"kv_sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kv_sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_to(i: Dict, schema, kv_sep): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:create_class", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:create_class", "target": "{\"name\":\"create_class\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]},{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_class(mode: str, class_name: str, exclude)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:create_model_class", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:create_model_class", "target": "{\"name\":\"create_model_class\",\"args\":[{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"default_\":\"\",\"description\":\"mapping: Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_model_class(class_name: str, mapping: Dict[str, Tuple[Type, Any]])\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:fill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:fill", "target": "{\"name\":\"fill\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"strgy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strgy\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fill(context, llm, schema, mode, strgy, images: Optional[Union[str, list[str]]], timeout, exclude)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:from_children", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:from_children", "target": "{\"name\":\"from_children\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_children(key, nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:from_pydantic", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:from_pydantic", "target": "{\"name\":\"from_pydantic\",\"args\":[{\"name\":\"model\",\"type_\":\"Type[BaseModel]\",\"default_\":\"\",\"description\":\"model: Type[BaseModel]\",\"compositions\":[\"BaseModel\",\"Type\"]},{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_pydantic(model: Type[BaseModel], key: str)\",\"aggregations\":[\"BaseModel\",\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:get_child", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:get_child", "target": "{\"name\":\"get_child\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union['ActionNode',None]\",\"description\":\"Union['ActionNode', None]\",\"compositions\":[\"ActionNode\"]},\"description\":\"get_child(key: str): Union['ActionNode', None]\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:get_mapping", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:get_mapping", "target": "{\"name\":\"get_mapping\",\"args\":[{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_mapping(mode, exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:human_review", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:human_review", "target": "{\"name\":\"human_review\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_review(): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:human_revise", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:human_revise", "target": "{\"name\":\"human_revise\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_revise(): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:keys", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:keys", "target": "{\"name\":\"keys\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"keys(mode: str): list\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:review", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:review", "target": "{\"name\":\"review\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"review(strgy: str, review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:revise", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:revise", "target": "{\"name\":\"revise\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"revise(strgy: str, revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:set_context", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:set_context", "target": "{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:set_llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:set_llm", "target": "{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:set_recursive", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:set_recursive", "target": "{\"name\":\"set_recursive\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_recursive(name, value)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:simple_fill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:simple_fill", "target": "{\"name\":\"simple_fill\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_fill(schema, mode, images: Optional[Union[str, list[str]]], timeout, exclude)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:simple_review", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:simple_review", "target": "{\"name\":\"simple_review\",\"args\":[{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_review(review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:simple_revise", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:simple_revise", "target": "{\"name\":\"simple_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"simple_revise(revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:tagging", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:tagging", "target": "{\"name\":\"tagging\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"tagging(text, schema, tag): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:to_dict", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:to_dict", "target": "{\"name\":\"to_dict\",\"args\":[{\"name\":\"format_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format_func\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"to_dict(format_func, mode, exclude): Dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:update_instruct_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:update_instruct_content", "target": "{\"name\":\"update_instruct_content\",\"args\":[{\"name\":\"incre_data\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"incre_data: dict[str, Any]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_instruct_content(incre_data: dict[str, Any])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_output.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/action_output.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/action_output.py", "target": "metagpt/actions/action_output.py:ActionOutput"}, {"predicate": "is", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "{\"name\":\"ActionOutput\",\"package\":\"metagpt/actions/action_output.py:ActionOutput\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}},\"methods\":{},\"compositions\":[\"BaseModel\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "metagpt/actions/action_output.py:ActionOutput:content"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "metagpt/actions/action_output.py:ActionOutput:instruct_content"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "?:BaseModel"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "metagpt/actions/action_output.py:ActionOutput:__init__"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "{\"lineno\":12,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionOutput\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "{\"name\":\"ActionOutput\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"BaseModel\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_output.py:ActionOutput:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_output.py:ActionOutput:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_output.py:ActionOutput:instruct_content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_output.py:ActionOutput:instruct_content", "target": "{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/actions", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions", "target": ""}, {"predicate": "has_class", "source": "metagpt/actions", "target": "metagpt/actions:ActionType"}, {"predicate": "is", "source": "metagpt/actions:ActionType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions:ActionType", "target": "{\"name\":\"ActionType\",\"package\":\"metagpt/actions:ActionType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions:ActionType", "target": "metagpt/actions:ActionType:name"}, {"predicate": "has_class_view", "source": "metagpt/actions:ActionType", "target": "{\"name\":\"ActionType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions:ActionType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions:ActionType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/android_env/android_env.py", "target": "metagpt/environment/android_env/android_env.py:AndroidEnv"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv", "target": "{\"name\":\"AndroidEnv\",\"package\":\"metagpt/environment/android_env/android_env.py:AndroidEnv\",\"attributes\":{\"cols\":{\"name\":\"cols\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"cols : int\",\"compositions\":[]},\"rows\":{\"name\":\"rows\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"rows : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv", "target": "metagpt/environment/android_env/android_env.py:AndroidEnv:cols"}, {"predicate": "has_class_property", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv", "target": "metagpt/environment/android_env/android_env.py:AndroidEnv:rows"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv", "target": "metagpt/environment/base_env.py:Environment"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv", "target": "{\"lineno\":11,\"end_lineno\":13,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AndroidEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv", "target": "{\"name\":\"AndroidEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cols\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"rows\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv:cols", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv:cols", "target": "{\"name\":\"cols\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"cols : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv:rows", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_env.py:AndroidEnv:rows", "target": "{\"name\":\"rows\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"rows : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/android_env/android_ext_env.py", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "{\"name\":\"AndroidExtEnv\",\"package\":\"metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv\",\"attributes\":{\"adb_prefix\":{\"name\":\"adb_prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix\",\"compositions\":[]},\"adb_prefix_shell\":{\"name\":\"adb_prefix_shell\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix_shell\",\"compositions\":[]},\"adb_prefix_si\":{\"name\":\"adb_prefix_si\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix_si\",\"compositions\":[]},\"device_id\":{\"name\":\"device_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"device_id : Optional[str]\",\"compositions\":[]},\"device_shape\":{\"name\":\"device_shape\",\"type_\":\"\",\"default_\":\"\",\"description\":\"device_shape\",\"compositions\":[]},\"height\":{\"name\":\"height\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"height : int\",\"compositions\":[]},\"screenshot_dir\":{\"name\":\"screenshot_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"screenshot_dir : Optional[Path]\",\"compositions\":[\"Path\"]},\"width\":{\"name\":\"width\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"width : int\",\"compositions\":[]},\"xml_dir\":{\"name\":\"xml_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"xml_dir : Optional[Path]\",\"compositions\":[\"Path\"]}},\"methods\":{\"execute_adb_with_cmd\":{\"name\":\"execute_adb_with_cmd\",\"args\":[{\"name\":\"adb_cmd\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"adb_cmd: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"execute_adb_with_cmd(adb_cmd: str): str\",\"aggregations\":[]},\"get_screenshot\":{\"name\":\"get_screenshot\",\"args\":[{\"name\":\"ss_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ss_name: str\",\"compositions\":[]},{\"name\":\"local_save_dir\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_save_dir: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"get_screenshot(ss_name: str, local_save_dir: Path): Path\",\"aggregations\":[\"Path\"]},\"get_xml\":{\"name\":\"get_xml\",\"args\":[{\"name\":\"xml_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"xml_name: str\",\"compositions\":[]},{\"name\":\"local_save_dir\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_save_dir: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"get_xml(xml_name: str, local_save_dir: Path): Path\",\"aggregations\":[\"Path\"]},\"list_devices\":{\"name\":\"list_devices\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"list_devices()\",\"aggregations\":[]},\"system_back\":{\"name\":\"system_back\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"system_back(): str\",\"aggregations\":[]},\"system_tap\":{\"name\":\"system_tap\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"system_tap(x: int, y: int): str\",\"aggregations\":[]},\"user_input\":{\"name\":\"user_input\",\"args\":[{\"name\":\"input_txt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_txt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_input(input_txt: str): str\",\"aggregations\":[]},\"user_longpress\":{\"name\":\"user_longpress\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]},{\"name\":\"duration\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"duration: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_longpress(x: int, y: int, duration: int): str\",\"aggregations\":[]},\"user_swipe\":{\"name\":\"user_swipe\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]},{\"name\":\"orient\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"orient: str\",\"compositions\":[]},{\"name\":\"dist\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dist: str\",\"compositions\":[]},{\"name\":\"if_quick\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"if_quick: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_swipe(x: int, y: int, orient: str, dist: str, if_quick: bool): str\",\"aggregations\":[]},\"user_swipe_to\":{\"name\":\"user_swipe_to\",\"args\":[{\"name\":\"start\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"start: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"end\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"end: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"duration\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"duration: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"user_swipe_to(start: tuple[int, int], end: tuple[int, int], duration: int)\",\"aggregations\":[\"tuple\"]}},\"compositions\":[\"Path\"],\"aggregations\":[\"tuple\"]}"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_shell"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_si"}, {"predicate": "has_class_property", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:device_id"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:device_shape"}, {"predicate": "has_class_property", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:height"}, {"predicate": "has_class_property", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:screenshot_dir"}, {"predicate": "has_class_property", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:width"}, {"predicate": "has_class_property", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:xml_dir"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:execute_adb_with_cmd"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:get_screenshot"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:get_xml"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:list_devices"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:system_back"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:system_tap"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_input"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_longpress"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_swipe"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_swipe_to"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "?:tuple"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/base_env.py:ExtEnv"}, {"predicate": "has_class_method", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:__init__"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "{\"lineno\":15,\"end_lineno\":157,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AndroidExtEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv", "target": "{\"name\":\"AndroidExtEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"adb_prefix\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"adb_prefix_shell\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"adb_prefix_si\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"device_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"device_shape\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"height\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"screenshot_dir\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"},{\"name\":\"width\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"xml_dir\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix", "target": "{\"name\":\"adb_prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_shell", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_shell", "target": "{\"name\":\"adb_prefix_shell\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix_shell\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_shell", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_si", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_si", "target": "{\"name\":\"adb_prefix_si\",\"type_\":\"\",\"default_\":\"\",\"description\":\"adb_prefix_si\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:adb_prefix_si", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:device_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:device_id", "target": "{\"name\":\"device_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"device_id : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:device_shape", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:device_shape", "target": "{\"name\":\"device_shape\",\"type_\":\"\",\"default_\":\"\",\"description\":\"device_shape\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:device_shape", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:height", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:height", "target": "{\"name\":\"height\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"height : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:screenshot_dir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:screenshot_dir", "target": "{\"name\":\"screenshot_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"screenshot_dir : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:width", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:width", "target": "{\"name\":\"width\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"width : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:xml_dir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:xml_dir", "target": "{\"name\":\"xml_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"xml_dir : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:execute_adb_with_cmd", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:execute_adb_with_cmd", "target": "{\"name\":\"execute_adb_with_cmd\",\"args\":[{\"name\":\"adb_cmd\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"adb_cmd: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"execute_adb_with_cmd(adb_cmd: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:get_screenshot", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:get_screenshot", "target": "{\"name\":\"get_screenshot\",\"args\":[{\"name\":\"ss_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ss_name: str\",\"compositions\":[]},{\"name\":\"local_save_dir\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_save_dir: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"get_screenshot(ss_name: str, local_save_dir: Path): Path\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:get_xml", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:get_xml", "target": "{\"name\":\"get_xml\",\"args\":[{\"name\":\"xml_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"xml_name: str\",\"compositions\":[]},{\"name\":\"local_save_dir\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_save_dir: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"get_xml(xml_name: str, local_save_dir: Path): Path\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:list_devices", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:list_devices", "target": "{\"name\":\"list_devices\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"list_devices()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:system_back", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:system_back", "target": "{\"name\":\"system_back\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"system_back(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:system_tap", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:system_tap", "target": "{\"name\":\"system_tap\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"system_tap(x: int, y: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_input", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_input", "target": "{\"name\":\"user_input\",\"args\":[{\"name\":\"input_txt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_txt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_input(input_txt: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_longpress", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_longpress", "target": "{\"name\":\"user_longpress\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]},{\"name\":\"duration\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"duration: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_longpress(x: int, y: int, duration: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_swipe", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_swipe", "target": "{\"name\":\"user_swipe\",\"args\":[{\"name\":\"x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"x: int\",\"compositions\":[]},{\"name\":\"y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"y: int\",\"compositions\":[]},{\"name\":\"orient\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"orient: str\",\"compositions\":[]},{\"name\":\"dist\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dist: str\",\"compositions\":[]},{\"name\":\"if_quick\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"if_quick: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"user_swipe(x: int, y: int, orient: str, dist: str, if_quick: bool): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_swipe_to", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:user_swipe_to", "target": "{\"name\":\"user_swipe_to\",\"args\":[{\"name\":\"start\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"start: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"end\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"end: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"duration\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"duration: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"user_swipe_to(start: tuple[int, int], end: tuple[int, int], duration: int)\",\"aggregations\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "{\"name\":\"ApiType\",\"package\":\"metagpt/provider/general_api_base.py:ApiType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"from_str\":{\"name\":\"from_str\",\"args\":[{\"name\":\"label\",\"type_\":\"\",\"default_\":\"\",\"description\":\"label\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_str(label)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "metagpt/provider/general_api_base.py:ApiType:name"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "metagpt/provider/general_api_base.py:ApiType:from_str"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "{\"lineno\":52,\"end_lineno\":68,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ApiType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "{\"name\":\"ApiType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:ApiType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:ApiType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:ApiType:from_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:ApiType:from_str", "target": "{\"name\":\"from_str\",\"args\":[{\"name\":\"label\",\"type_\":\"\",\"default_\":\"\",\"description\":\"label\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_str(label)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/architect.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/architect.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/architect.py", "target": "metagpt/roles/architect.py:Architect"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect", "target": "{\"name\":\"Architect\",\"package\":\"metagpt/roles/architect.py:Architect\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:profile"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:__init__"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:Architect", "target": "{\"lineno\":14,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Architect\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/architect.py:Architect", "target": "{\"name\":\"Architect\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/skill_action.py", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction"}, {"predicate": "has_class", "source": "metagpt/actions/skill_action.py", "target": "metagpt/actions/skill_action.py:SkillAction"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "{\"name\":\"ArgumentsParingAction\",\"package\":\"metagpt/actions/skill_action.py:ArgumentsParingAction\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"Optional[Dict]\",\"default_\":\"\",\"description\":\"args : Optional[Dict]\",\"compositions\":[]},\"ask\":{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]},\"prompt\":{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]},\"skill\":{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}},\"methods\":{\"parse_arguments\":{\"name\":\"parse_arguments\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill_name\",\"compositions\":[]},{\"name\":\"txt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"txt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"parse_arguments(skill_name, txt): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:args"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:ask"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:parse_arguments"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "{\"lineno\":24,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ArgumentsParingAction\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "{\"name\":\"ArgumentsParingAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict]\",\"default_value\":\"\"},{\"name\":\"ask\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prompt\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"skill\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:args", "target": "{\"name\":\"args\",\"type_\":\"Optional[Dict]\",\"default_\":\"\",\"description\":\"args : Optional[Dict]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:ask", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:ask", "target": "{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt", "target": "{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp", "target": "{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill", "target": "{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:parse_arguments", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:parse_arguments", "target": "{\"name\":\"parse_arguments\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill_name\",\"compositions\":[]},{\"name\":\"txt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"txt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"parse_arguments(skill_name, txt): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/assistant.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/assistant.py", "target": "metagpt/roles/assistant.py:Assistant"}, {"predicate": "has_class", "source": "metagpt/roles/assistant.py", "target": "metagpt/roles/assistant.py:MessageType"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant", "target": "{\"name\":\"Assistant\",\"package\":\"metagpt/roles/assistant.py:Assistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"Optional[SkillsDeclaration]\",\"default_\":\"\",\"description\":\"skills : Optional[SkillsDeclaration]\",\"compositions\":[\"SkillsDeclaration\"]}},\"methods\":{\"act\":{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"act(): Message\",\"aggregations\":[\"Message\"]},\"get_memory\":{\"name\":\"get_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_memory(): str\",\"aggregations\":[]},\"load_memory\":{\"name\":\"load_memory\",\"args\":[{\"name\":\"m\",\"type_\":\"\",\"default_\":\"\",\"description\":\"m\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_memory(m)\",\"aggregations\":[]},\"refine_memory\":{\"name\":\"refine_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"refine_memory(): str\",\"aggregations\":[]},\"skill_handler\":{\"name\":\"skill_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"skill_handler(text): bool\",\"aggregations\":[]},\"talk\":{\"name\":\"talk\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"talk(text)\",\"aggregations\":[]},\"talk_handler\":{\"name\":\"talk_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"talk_handler(text): bool\",\"aggregations\":[]},\"think\":{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"think(): bool\",\"aggregations\":[]}},\"compositions\":[\"SkillsDeclaration\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:desc"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:memory"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:skills"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:act"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:get_memory"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:load_memory"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:refine_memory"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:skill_handler"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:talk"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:talk_handler"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:think"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/assistant.py:Assistant", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/role.py:Role"}, {"predicate": "is_composite_of", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:_plan"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:Assistant", "target": "{\"lineno\":37,\"end_lineno\":139,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Assistant\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/assistant.py:Assistant", "target": "{\"name\":\"Assistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"Optional[SkillsDeclaration]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/assistant.py:Assistant", "target": "?:SkillsDeclaration"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:memory", "target": "{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:skills", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:skills", "target": "{\"name\":\"skills\",\"type_\":\"Optional[SkillsDeclaration]\",\"default_\":\"\",\"description\":\"skills : Optional[SkillsDeclaration]\",\"compositions\":[\"SkillsDeclaration\"]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:act", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:act", "target": "{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"act(): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:get_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:get_memory", "target": "{\"name\":\"get_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_memory(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:load_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:load_memory", "target": "{\"name\":\"load_memory\",\"args\":[{\"name\":\"m\",\"type_\":\"\",\"default_\":\"\",\"description\":\"m\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_memory(m)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:refine_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:refine_memory", "target": "{\"name\":\"refine_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"refine_memory(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:skill_handler", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:skill_handler", "target": "{\"name\":\"skill_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"skill_handler(text): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:talk", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:talk", "target": "{\"name\":\"talk\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"talk(text)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:talk_handler", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:talk_handler", "target": "{\"name\":\"talk_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"talk_handler(text): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:think", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:think", "target": "{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"think(): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/zhipuai/async_sse_client.py", "target": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "{\"name\":\"AsyncSSEClient\",\"package\":\"metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient\",\"attributes\":{},\"methods\":{\"stream\":{\"name\":\"stream\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"stream(): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:stream"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "{\"lineno\":10,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AsyncSSEClient\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "{\"name\":\"AsyncSSEClient\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:stream", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:stream", "target": "{\"name\":\"stream\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"stream(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/context.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/context.py", "target": "metagpt/context.py:AttrDict"}, {"predicate": "has_class", "source": "metagpt/context.py", "target": "metagpt/context.py:Context"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict", "target": "{\"name\":\"AttrDict\",\"package\":\"metagpt/context.py:AttrDict\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"default\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"default: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key, default: Any)\",\"aggregations\":[]},\"remove\":{\"name\":\"remove\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove(key)\",\"aggregations\":[]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"val\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"val: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key, val: Any)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:model_config"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:get"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:remove"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:set"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:Context:kwargs"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:__init__"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:__getattr__"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:__setattr__"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:__delattr__"}, {"predicate": "has_page_info", "source": "metagpt/context.py:AttrDict", "target": "{\"lineno\":23,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AttrDict\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/context.py:AttrDict", "target": "{\"name\":\"AttrDict\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"default\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"default: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key, default: Any)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:remove", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict:remove", "target": "{\"name\":\"remove\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove(key)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:set", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict:set", "target": "{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"val\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"val: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key, val: Any)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:AudioData"}, {"predicate": "has_class", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS"}, {"predicate": "has_class", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse"}, {"predicate": "has_class", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus"}, {"predicate": "has_function", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:oas3_iflytek_tts"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "{\"name\":\"AudioData\",\"package\":\"metagpt/tools/iflytek_tts.py:AudioData\",\"attributes\":{\"audio\":{\"name\":\"audio\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"audio : str\",\"compositions\":[]},\"ced\":{\"name\":\"ced\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ced : str\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"status : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "metagpt/tools/iflytek_tts.py:AudioData:audio"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "metagpt/tools/iflytek_tts.py:AudioData:ced"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "metagpt/tools/iflytek_tts.py:AudioData:status"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "{\"lineno\":35,\"end_lineno\":38,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AudioData\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "{\"name\":\"AudioData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"audio\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ced\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:AudioData:audio", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:AudioData:audio", "target": "{\"name\":\"audio\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"audio : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:AudioData:ced", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:AudioData:ced", "target": "{\"name\":\"ced\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ced : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:AudioData:status", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:AudioData:status", "target": "{\"name\":\"status\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"status : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/azure_openai_api.py", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "{\"name\":\"AzureOpenAILLM\",\"package\":\"metagpt/provider/azure_openai_api.py:AzureOpenAILLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"AsyncAzureOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncAzureOpenAI\",\"compositions\":[\"AsyncAzureOpenAI\"]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"AsyncAzureOpenAI\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:aclient"}, {"predicate": "has_class_property", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:pricing_plan"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "?:AsyncAzureOpenAI"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_init_client"}, {"predicate": "has_class_method", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_make_client_kwargs"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "{\"lineno\":18,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AzureOpenAILLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "{\"name\":\"AzureOpenAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"AsyncAzureOpenAI\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:aclient", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:aclient", "target": "{\"name\":\"aclient\",\"type_\":\"AsyncAzureOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncAzureOpenAI\",\"compositions\":[\"AsyncAzureOpenAI\"]}"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:model", "target": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:pricing_plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:pricing_plan", "target": "{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/azure_tts.py", "target": "metagpt/tools/azure_tts.py:AzureTTS"}, {"predicate": "has_function", "source": "metagpt/tools/azure_tts.py", "target": "metagpt/tools/azure_tts.py:oas3_azsure_tts"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "{\"name\":\"AzureTTS\",\"package\":\"metagpt/tools/azure_tts.py:AzureTTS\",\"attributes\":{\"region\":{\"name\":\"region\",\"type_\":\"\",\"default_\":\"\",\"description\":\"region\",\"compositions\":[]},\"subscription_key\":{\"name\":\"subscription_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subscription_key\",\"compositions\":[]}},\"methods\":{\"role_style_text\":{\"name\":\"role_style_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_style_text(role, style, text)\",\"aggregations\":[]},\"role_text\":{\"name\":\"role_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_text(role, text)\",\"aggregations\":[]},\"style_text\":{\"name\":\"style_text\",\"args\":[{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"style_text(style, text)\",\"aggregations\":[]},\"synthesize_speech\":{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_file\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(lang, voice, text, output_file)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:region"}, {"predicate": "has_class_property", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:subscription_key"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:role_style_text"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:role_text"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:style_text"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:synthesize_speech"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "{\"lineno\":19,\"end_lineno\":56,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AzureTTS\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "{\"name\":\"AzureTTS\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"region\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"subscription_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:region", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:region", "target": "{\"name\":\"region\",\"type_\":\"\",\"default_\":\"\",\"description\":\"region\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:subscription_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:subscription_key", "target": "{\"name\":\"subscription_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subscription_key\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:role_style_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:role_style_text", "target": "{\"name\":\"role_style_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_style_text(role, style, text)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:role_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:role_text", "target": "{\"name\":\"role_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_text(role, text)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:style_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:style_text", "target": "{\"name\":\"style_text\",\"args\":[{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"style_text(style, text)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:synthesize_speech", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:synthesize_speech", "target": "{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_file\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(lang, voice, text, output_file)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/prompt_writer.py", "target": "metagpt/tools/prompt_writer.py:BEAGECTemplate"}, {"predicate": "has_class", "source": "metagpt/tools/prompt_writer.py", "target": "metagpt/tools/prompt_writer.py:EnronTemplate"}, {"predicate": "has_class", "source": "metagpt/tools/prompt_writer.py", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator"}, {"predicate": "has_class", "source": "metagpt/tools/prompt_writer.py", "target": "metagpt/tools/prompt_writer.py:WikiHowTemplate"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "{\"name\":\"BEAGECTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:BEAGECTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "metagpt/tools/prompt_writer.py:BEAGECTemplate:gen"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "metagpt/tools/prompt_writer.py:BEAGECTemplate:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "{\"lineno\":95,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BEAGECTemplate\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "{\"name\":\"BEAGECTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate:gen", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate:gen", "target": "{\"name\":\"gen\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/tot.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:BFSSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:TreeofThought:Config"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:DFSSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:MCTSSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "{\"name\":\"BFSSolver\",\"package\":\"metagpt/strategy/tot.py:BFSSolver\",\"attributes\":{\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}},\"methods\":{\"generate_and_evaluate_nodes\":{\"name\":\"generate_and_evaluate_nodes\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_value\",\"compositions\":[]},{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_and_evaluate_nodes(current_state, current_value, node)\",\"aggregations\":[]},\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:BFSSolver:thought_tree"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:BFSSolver:generate_and_evaluate_nodes"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:BFSSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:BFSSolver:_bfs_build"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "{\"lineno\":126,\"end_lineno\":177,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BFSSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "{\"name\":\"BFSSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver:thought_tree", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:BFSSolver:thought_tree", "target": "{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver:generate_and_evaluate_nodes", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:BFSSolver:generate_and_evaluate_nodes", "target": "{\"name\":\"generate_and_evaluate_nodes\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_value\",\"compositions\":[]},{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_and_evaluate_nodes(current_state, current_value, node)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:BFSSolver:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:BaseContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:BaseContext", "target": "{\"name\":\"BaseContext\",\"package\":\"metagpt/schema.py:BaseContext\",\"attributes\":{},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[T]\",\"description\":\"Optional[T]\",\"compositions\":[\"T\"]},\"description\":\"loads(val: str): Optional[T]\",\"aggregations\":[\"T\"]}},\"compositions\":[],\"aggregations\":[\"T\"]}"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:BaseContext", "target": "metagpt/schema.py:BaseContext:loads"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:BaseContext", "target": "?:T"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:BaseContext", "target": "{\"lineno\":603,\"end_lineno\":608,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:BaseContext", "target": "{\"name\":\"BaseContext\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:BaseContext:loads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:BaseContext:loads", "target": "{\"name\":\"loads\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[T]\",\"description\":\"Optional[T]\",\"compositions\":[\"T\"]},\"description\":\"loads(val: str): Optional[T]\",\"aggregations\":[\"T\"]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/base.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/strategy/base.py", "target": "metagpt/strategy/base.py:BaseEvaluator"}, {"predicate": "has_class", "source": "metagpt/strategy/base.py", "target": "metagpt/strategy/base.py:BaseParser"}, {"predicate": "has_class", "source": "metagpt/strategy/base.py", "target": "metagpt/strategy/base.py:ThoughtNode"}, {"predicate": "has_class", "source": "metagpt/strategy/base.py", "target": "metagpt/strategy/base.py:ThoughtTree"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "{\"name\":\"BaseEvaluator\",\"package\":\"metagpt/strategy/base.py:BaseEvaluator\",\"attributes\":{},\"methods\":{\"status_verify\":{\"name\":\"status_verify\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"status_verify()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "metagpt/strategy/base.py:BaseEvaluator:status_verify"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "metagpt/strategy/base.py:BaseEvaluator:__call__"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseEvaluator\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "{\"name\":\"BaseEvaluator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseEvaluator:status_verify", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseEvaluator:status_verify", "target": "{\"name\":\"status_verify\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"status_verify()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/base_llm.py", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "{\"name\":\"BaseLLM\",\"package\":\"metagpt/provider/base_llm.py:BaseLLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"Optional[Union[AsyncOpenAI]]\",\"default_\":\"\",\"description\":\"aclient : Optional[Union[AsyncOpenAI]]\",\"compositions\":[\"AsyncOpenAI\"]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"model\":{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"pricing_plan : Optional[str]\",\"compositions\":[]},\"system_prompt\":{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], images: Optional[Union[str, list[str]]], timeout, stream): str\",\"aggregations\":[]},\"aask_batch\":{\"name\":\"aask_batch\",\"args\":[{\"name\":\"msgs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"msgs: list\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask_batch(msgs: list, timeout): str\",\"aggregations\":[]},\"aask_code\":{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]], timeout): dict\",\"aggregations\":[\"Message\"]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"get_choice_delta_text\":{\"name\":\"get_choice_delta_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_delta_text(rsp: dict): str\",\"aggregations\":[]},\"get_choice_function\":{\"name\":\"get_choice_function\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function(rsp: dict): dict\",\"aggregations\":[]},\"get_choice_function_arguments\":{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: dict): dict\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]},\"messages_to_dict\":{\"name\":\"messages_to_dict\",\"args\":[{\"name\":\"messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"messages_to_dict(messages)\",\"aggregations\":[]},\"messages_to_prompt\":{\"name\":\"messages_to_prompt\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"messages_to_prompt(messages: list[dict])\",\"aggregations\":[]}},\"compositions\":[\"AsyncOpenAI\",\"CostManager\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:aclient"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:pricing_plan"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:system_prompt"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:use_system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:aask"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:aask_batch"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:aask_code"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:get_choice_delta_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function_arguments"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:get_choice_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:messages_to_dict"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:messages_to_prompt"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "?:AsyncOpenAI"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "?:Message"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/actions/action_node.py:ActionNode"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/actions/action_node.py:ActionNode:llm"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:llm"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/context_mixin.py:ContextMixin"}, {"predicate": "isAggregateOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/context_mixin.py:ContextMixin:private_llm"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "isAggregateOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/strategy/solver.py:BaseSolver:llm"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/tools/moderation.py:Moderation"}, {"predicate": "isAggregateOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/tools/moderation.py:Moderation:llm"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image"}, {"predicate": "isAggregateOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm"}, {"predicate": "is_composite_of", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_user_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_user_msg_with_imgs"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_assistant_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_system_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_system_msgs"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_default_system_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_extract_assistant_rsp"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_update_costs"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "{\"lineno\":25,\"end_lineno\":197,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "{\"name\":\"BaseLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[AsyncOpenAI]]\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"system_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "?:CostManager"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:aclient", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:aclient", "target": "{\"name\":\"aclient\",\"type_\":\"Optional[Union[AsyncOpenAI]]\",\"default_\":\"\",\"description\":\"aclient : Optional[Union[AsyncOpenAI]]\",\"compositions\":[\"AsyncOpenAI\"]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:model", "target": "{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:pricing_plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:pricing_plan", "target": "{\"name\":\"pricing_plan\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"pricing_plan : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:system_prompt", "target": "{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:use_system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:use_system_prompt", "target": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:aask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:aask", "target": "{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"images\",\"type_\":\"Optional[Union[str,list[str]]]\",\"default_\":\"\",\"description\":\"images: Optional[Union[str, list[str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], images: Optional[Union[str, list[str]]], timeout, stream): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:aask_batch", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:aask_batch", "target": "{\"name\":\"aask_batch\",\"args\":[{\"name\":\"msgs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"msgs: list\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask_batch(msgs: list, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:aask_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:aask_code", "target": "{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]], timeout): dict\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_delta_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_delta_text", "target": "{\"name\":\"get_choice_delta_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_delta_text(rsp: dict): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function", "target": "{\"name\":\"get_choice_function\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function(rsp: dict): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function_arguments", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function_arguments", "target": "{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: dict): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:messages_to_dict", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:messages_to_dict", "target": "{\"name\":\"messages_to_dict\",\"args\":[{\"name\":\"messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"messages_to_dict(messages)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:messages_to_prompt", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:messages_to_prompt", "target": "{\"name\":\"messages_to_prompt\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"messages_to_prompt(messages: list[dict])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseParser", "target": "{\"name\":\"BaseParser\",\"package\":\"metagpt/strategy/base.py:BaseParser\",\"attributes\":{},\"methods\":{\"propose\":{\"name\":\"propose\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"propose(current_state: str): str\",\"aggregations\":[]},\"sample\":{\"name\":\"sample\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"sample(current_state: str): str\",\"aggregations\":[]},\"value\":{\"name\":\"value\",\"args\":[{\"name\":\"input\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"value(input: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/base.py:BaseParser:propose"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/base.py:BaseParser:sample"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/base.py:BaseParser:value"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/base.py:BaseParser:__call__"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:BaseParser", "target": "{\"lineno\":12,\"end_lineno\":23,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/base.py:BaseParser", "target": "{\"name\":\"BaseParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser:propose", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseParser:propose", "target": "{\"name\":\"propose\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"propose(current_state: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser:sample", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseParser:sample", "target": "{\"name\":\"sample\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"sample(current_state: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser:value", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseParser:value", "target": "{\"name\":\"value\",\"args\":[{\"name\":\"input\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"value(input: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "{\"name\":\"BasePostProcessPlugin\",\"package\":\"metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin\",\"attributes\":{\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]},\"run_extract_content_from_output\":{\"name\":\"run_extract_content_from_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"right_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"right_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_extract_content_from_output(content: str, right_key: str): str\",\"aggregations\":[]},\"run_repair_llm_output\":{\"name\":\"run_repair_llm_output\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_repair_llm_output(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]},\"run_repair_llm_raw_output\":{\"name\":\"run_repair_llm_raw_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"req_keys\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"req_keys: list[str]\",\"compositions\":[]},{\"name\":\"repair_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"repair_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_repair_llm_raw_output(content: str, req_keys: list[str], repair_type: str): str\",\"aggregations\":[]},\"run_retry_parse_json_text\":{\"name\":\"run_retry_parse_json_text\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_retry_parse_json_text(content: str): Union[dict, list]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:model"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_extract_content_from_output"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_output"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_raw_output"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_retry_parse_json_text"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "{\"lineno\":15,\"end_lineno\":69,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BasePostProcessPlugin\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "{\"name\":\"BasePostProcessPlugin\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:model", "target": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_extract_content_from_output", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_extract_content_from_output", "target": "{\"name\":\"run_extract_content_from_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"right_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"right_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_extract_content_from_output(content: str, right_key: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_output", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_output", "target": "{\"name\":\"run_repair_llm_output\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_repair_llm_output(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_raw_output", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_raw_output", "target": "{\"name\":\"run_repair_llm_raw_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"req_keys\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"req_keys: list[str]\",\"compositions\":[]},{\"name\":\"repair_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"repair_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_repair_llm_raw_output(content: str, req_keys: list[str], repair_type: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_retry_parse_json_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_retry_parse_json_text", "target": "{\"name\":\"run_retry_parse_json_text\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_retry_parse_json_text(content: str): Union[dict, list]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/solver.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/strategy/solver.py", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/solver.py", "target": "metagpt/strategy/solver.py:COTSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/solver.py", "target": "metagpt/strategy/solver.py:CodeInterpreterSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/solver.py", "target": "metagpt/strategy/solver.py:IOSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/solver.py", "target": "metagpt/strategy/solver.py:NaiveSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/solver.py", "target": "metagpt/strategy/solver.py:ReActSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/solver.py", "target": "metagpt/strategy/solver.py:TOTSolver"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "{\"name\":\"BaseSolver\",\"package\":\"metagpt/strategy/solver.py:BaseSolver\",\"attributes\":{\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"graph\":{\"name\":\"graph\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"search_space\":{\"name\":\"search_space\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_space\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "metagpt/strategy/solver.py:BaseSolver:context"}, {"predicate": "has_class_property", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "metagpt/strategy/solver.py:BaseSolver:graph"}, {"predicate": "has_class_property", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "metagpt/strategy/solver.py:BaseSolver:llm"}, {"predicate": "has_class_property", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "metagpt/strategy/solver.py:BaseSolver:search_space"}, {"predicate": "has_class_method", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "metagpt/strategy/solver.py:BaseSolver:solve"}, {"predicate": "has_class_method", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "metagpt/strategy/solver.py:BaseSolver:__init__"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "{\"lineno\":15,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/solver.py:BaseSolver", "target": "{\"name\":\"BaseSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"search_space\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:BaseSolver:context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:BaseSolver:context", "target": "{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:BaseSolver:graph", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:BaseSolver:graph", "target": "{\"name\":\"graph\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:BaseSolver:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:BaseSolver:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:BaseSolver:search_space", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:BaseSolver:search_space", "target": "{\"name\":\"search_space\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_space\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:BaseSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:BaseSolver:solve", "target": "{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/base_store.py", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_class", "source": "metagpt/document_store/base_store.py", "target": "metagpt/document_store/base_store.py:LocalStore"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "{\"name\":\"BaseStore\",\"package\":\"metagpt/document_store/base_store.py:BaseStore\",\"attributes\":{},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search()\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "metagpt/document_store/base_store.py:BaseStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "metagpt/document_store/base_store.py:BaseStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "metagpt/document_store/base_store.py:BaseStore:write"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "{\"lineno\":12,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "{\"name\":\"BaseStore\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:BaseStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:BaseStore:add", "target": "{\"name\":\"add\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:BaseStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:BaseStore:search", "target": "{\"name\":\"search\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:BaseStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:BaseStore:write", "target": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/memory/brain_memory.py", "target": "metagpt/memory/brain_memory.py:BrainMemory"}, {"predicate": "has_class", "source": "metagpt/memory/brain_memory.py", "target": "metagpt/memory/brain_memory.py:BrainMemory:Config"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "{\"name\":\"BrainMemory\",\"package\":\"metagpt/memory/brain_memory.py:BrainMemory\",\"attributes\":{\"cacheable\":{\"name\":\"cacheable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"cacheable : bool\",\"compositions\":[]},\"historical_summary\":{\"name\":\"historical_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"historical_summary : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"history : List[Message]\",\"compositions\":[\"Message\"]},\"history_text\":{\"name\":\"history_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_text\",\"compositions\":[]},\"is_dirty\":{\"name\":\"is_dirty\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_dirty : bool\",\"compositions\":[]},\"is_history_available\":{\"name\":\"is_history_available\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_history_available\",\"compositions\":[]},\"knowledge\":{\"name\":\"knowledge\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"knowledge : List[Message]\",\"compositions\":[\"Message\"]},\"last_history_id\":{\"name\":\"last_history_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"last_history_id : str\",\"compositions\":[]},\"last_talk\":{\"name\":\"last_talk\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"last_talk : Optional[str]\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}},\"methods\":{\"add_answer\":{\"name\":\"add_answer\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_answer(msg: Message)\",\"aggregations\":[\"Message\"]},\"add_history\":{\"name\":\"add_history\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_history(msg: Message)\",\"aggregations\":[\"Message\"]},\"add_talk\":{\"name\":\"add_talk\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_talk(msg: Message)\",\"aggregations\":[\"Message\"]},\"dumps\":{\"name\":\"dumps\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"dumps(redis_key: str, timeout_sec: int)\",\"aggregations\":[]},\"exists\":{\"name\":\"exists\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"exists(text): bool\",\"aggregations\":[]},\"extract_info\":{\"name\":\"extract_info\",\"args\":[{\"name\":\"input_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"input_string\",\"compositions\":[]},{\"name\":\"pattern\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pattern\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_info(input_string, pattern)\",\"aggregations\":[]},\"get_knowledge\":{\"name\":\"get_knowledge\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_knowledge(): str\",\"aggregations\":[]},\"get_title\":{\"name\":\"get_title\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_title(llm, max_words): str\",\"aggregations\":[]},\"is_related\":{\"name\":\"is_related\",\"args\":[{\"name\":\"text1\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text1\",\"compositions\":[]},{\"name\":\"text2\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text2\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_related(text1, text2, llm)\",\"aggregations\":[]},\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'BrainMemory'\",\"description\":\"'BrainMemory'\",\"compositions\":[\"BrainMemory\"]},\"description\":\"loads(redis_key: str): 'BrainMemory'\",\"aggregations\":[\"BrainMemory\"]},\"pop_last_talk\":{\"name\":\"pop_last_talk\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pop_last_talk()\",\"aggregations\":[]},\"rewrite\":{\"name\":\"rewrite\",\"args\":[{\"name\":\"sentence\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sentence: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rewrite(sentence: str, context: str, llm)\",\"aggregations\":[]},\"set_history_summary\":{\"name\":\"set_history_summary\",\"args\":[{\"name\":\"history_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_summary\",\"compositions\":[]},{\"name\":\"redis_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"redis_key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_history_summary(history_summary, redis_key)\",\"aggregations\":[]},\"split_texts\":{\"name\":\"split_texts\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"window_size\",\"type_\":\"\",\"default_\":\"\",\"description\":\"window_size\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"split_texts(text: str, window_size): List[str]\",\"aggregations\":[]},\"summarize\":{\"name\":\"summarize\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]},{\"name\":\"keep_language\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"keep_language: bool\",\"compositions\":[]},{\"name\":\"limit\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"limit: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize(llm, max_words, keep_language: bool, limit: int)\",\"aggregations\":[]},\"to_int\":{\"name\":\"to_int\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"default_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"default_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_int(v, default_value)\",\"aggregations\":[]},\"to_metagpt_history_format\":{\"name\":\"to_metagpt_history_format\",\"args\":[{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"to_metagpt_history_format(history): str\",\"aggregations\":[]},\"to_redis_key\":{\"name\":\"to_redis_key\",\"args\":[{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix: str\",\"compositions\":[]},{\"name\":\"user_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"user_id: str\",\"compositions\":[]},{\"name\":\"chat_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chat_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_redis_key(prefix: str, user_id: str, chat_id: str)\",\"aggregations\":[]}},\"compositions\":[\"Message\",\"BaseLLM\"],\"aggregations\":[\"BrainMemory\"]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:cacheable"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:historical_summary"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:history"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:history_text"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:is_dirty"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:knowledge"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:last_history_id"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:last_talk"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:llm"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:add_answer"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:add_history"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:add_talk"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:dumps"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:exists"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:extract_info"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:get_knowledge"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:get_title"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:is_related"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:loads"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:pop_last_talk"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:rewrite"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:set_history_summary"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:split_texts"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:summarize"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:to_int"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:to_metagpt_history_format"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:to_redis_key"}, {"predicate": "isAggregateOf", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "?:BrainMemory"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/roles/assistant.py:Assistant"}, {"predicate": "isCompositeOn", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/roles/assistant.py:Assistant:memory"}, {"predicate": "is_composite_of", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/schema.py:Message"}, {"predicate": "is_composite_of", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_openai_summarize"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_summarize"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_is_related"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_openai_is_related"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_rewrite"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_openai_rewrite"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_summarize"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_get_summary"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "{\"lineno\":26,\"end_lineno\":338,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BrainMemory\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "{\"name\":\"BrainMemory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cacheable\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"historical_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"List[Message]\",\"default_value\":\"\"},{\"name\":\"history_text\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"is_dirty\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_history_available\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"knowledge\",\"visibility\":\"+\",\"value_type\":\"List[Message]\",\"default_value\":\"\"},{\"name\":\"last_history_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"last_talk\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseLLM]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "?:BaseLLM"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:cacheable", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:cacheable", "target": "{\"name\":\"cacheable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"cacheable : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:historical_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:historical_summary", "target": "{\"name\":\"historical_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"historical_summary : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:history", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:history", "target": "{\"name\":\"history\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"history : List[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:history_text", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:history_text", "target": "{\"name\":\"history_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_text\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:history_text", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_dirty", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_dirty", "target": "{\"name\":\"is_dirty\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_dirty : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available", "target": "{\"name\":\"is_history_available\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_history_available\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:knowledge", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:knowledge", "target": "{\"name\":\"knowledge\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"knowledge : List[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:last_history_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:last_history_id", "target": "{\"name\":\"last_history_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"last_history_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:last_talk", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:last_talk", "target": "{\"name\":\"last_talk\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"last_talk : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:llm", "target": "{\"name\":\"llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_answer", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_answer", "target": "{\"name\":\"add_answer\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_answer(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_history", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_history", "target": "{\"name\":\"add_history\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_history(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_talk", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_talk", "target": "{\"name\":\"add_talk\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_talk(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:dumps", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:dumps", "target": "{\"name\":\"dumps\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"dumps(redis_key: str, timeout_sec: int)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:exists", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:exists", "target": "{\"name\":\"exists\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"exists(text): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:extract_info", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:extract_info", "target": "{\"name\":\"extract_info\",\"args\":[{\"name\":\"input_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"input_string\",\"compositions\":[]},{\"name\":\"pattern\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pattern\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_info(input_string, pattern)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:get_knowledge", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:get_knowledge", "target": "{\"name\":\"get_knowledge\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_knowledge(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:get_title", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:get_title", "target": "{\"name\":\"get_title\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_title(llm, max_words): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_related", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_related", "target": "{\"name\":\"is_related\",\"args\":[{\"name\":\"text1\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text1\",\"compositions\":[]},{\"name\":\"text2\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text2\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_related(text1, text2, llm)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:loads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:loads", "target": "{\"name\":\"loads\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'BrainMemory'\",\"description\":\"'BrainMemory'\",\"compositions\":[\"BrainMemory\"]},\"description\":\"loads(redis_key: str): 'BrainMemory'\",\"aggregations\":[\"BrainMemory\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:pop_last_talk", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:pop_last_talk", "target": "{\"name\":\"pop_last_talk\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pop_last_talk()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:rewrite", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:rewrite", "target": "{\"name\":\"rewrite\",\"args\":[{\"name\":\"sentence\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sentence: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rewrite(sentence: str, context: str, llm)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:set_history_summary", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:set_history_summary", "target": "{\"name\":\"set_history_summary\",\"args\":[{\"name\":\"history_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_summary\",\"compositions\":[]},{\"name\":\"redis_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"redis_key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_history_summary(history_summary, redis_key)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:split_texts", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:split_texts", "target": "{\"name\":\"split_texts\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"window_size\",\"type_\":\"\",\"default_\":\"\",\"description\":\"window_size\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"split_texts(text: str, window_size): List[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:summarize", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:summarize", "target": "{\"name\":\"summarize\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]},{\"name\":\"keep_language\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"keep_language: bool\",\"compositions\":[]},{\"name\":\"limit\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"limit: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize(llm, max_words, keep_language: bool, limit: int)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_int", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_int", "target": "{\"name\":\"to_int\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"default_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"default_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_int(v, default_value)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_metagpt_history_format", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_metagpt_history_format", "target": "{\"name\":\"to_metagpt_history_format\",\"args\":[{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"to_metagpt_history_format(history): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_redis_key", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_redis_key", "target": "{\"name\":\"to_redis_key\",\"args\":[{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix: str\",\"compositions\":[]},{\"name\":\"user_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"user_id: str\",\"compositions\":[]},{\"name\":\"chat_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chat_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_redis_key(prefix: str, user_id: str, chat_id: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/browser_config.py", "target": "metagpt/configs/browser_config.py:BrowserConfig"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "{\"name\":\"BrowserConfig\",\"package\":\"metagpt/configs/browser_config.py:BrowserConfig\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit','chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit', 'chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/configs/browser_config.py:BrowserConfig:browser_type"}, {"predicate": "has_class_property", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/configs/browser_config.py:BrowserConfig:engine"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/config2.py:Config"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/config2.py:Config:browser"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BrowserConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "{\"name\":\"BrowserConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chromium','firefox','webkit','chrome','firefox','edge','ie']\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py:BrowserConfig:browser_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/browser_config.py:BrowserConfig:browser_type", "target": "{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit','chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit', 'chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py:BrowserConfig:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/browser_config.py:BrowserConfig:engine", "target": "{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:BugFixContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:BugFixContext", "target": "{\"name\":\"BugFixContext\",\"package\":\"metagpt/schema.py:BugFixContext\",\"attributes\":{\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:BugFixContext", "target": "metagpt/schema.py:BugFixContext:filename"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:BugFixContext", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:BugFixContext", "target": "{\"lineno\":666,\"end_lineno\":667,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BugFixContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:BugFixContext", "target": "{\"name\":\"BugFixContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:BugFixContext:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:BugFixContext:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/config2.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/config2.py", "target": "metagpt/config2.py:CLIParams"}, {"predicate": "has_class", "source": "metagpt/config2.py", "target": "metagpt/config2.py:Config"}, {"predicate": "has_function", "source": "metagpt/config2.py", "target": "metagpt/config2.py:merge_dict"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams", "target": "{\"name\":\"CLIParams\",\"package\":\"metagpt/config2.py:CLIParams\",\"attributes\":{\"git_reinit\":{\"name\":\"git_reinit\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"git_reinit : bool\",\"compositions\":[]},\"inc\":{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]},\"max_auto_summarize_code\":{\"name\":\"max_auto_summarize_code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_auto_summarize_code : int\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_path : str\",\"compositions\":[]},\"reqa_file\":{\"name\":\"reqa_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reqa_file : str\",\"compositions\":[]}},\"methods\":{\"check_project_path\":{\"name\":\"check_project_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_project_path()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:git_reinit"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:inc"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:max_auto_summarize_code"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:project_name"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:project_path"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:reqa_file"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:check_project_path"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:CLIParams", "target": "{\"lineno\":25,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CLIParams\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/config2.py:CLIParams", "target": "{\"name\":\"CLIParams\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"git_reinit\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"inc\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"max_auto_summarize_code\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"reqa_file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:git_reinit", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:git_reinit", "target": "{\"name\":\"git_reinit\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"git_reinit : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:inc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:inc", "target": "{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:max_auto_summarize_code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:max_auto_summarize_code", "target": "{\"name\":\"max_auto_summarize_code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_auto_summarize_code : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:project_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:project_path", "target": "{\"name\":\"project_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:reqa_file", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:reqa_file", "target": "{\"name\":\"reqa_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reqa_file : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:check_project_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:check_project_path", "target": "{\"name\":\"check_project_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_project_path()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:COTSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:COTSolver", "target": "{\"name\":\"COTSolver\",\"package\":\"metagpt/strategy/solver.py:COTSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/solver.py:COTSolver", "target": "metagpt/strategy/solver.py:COTSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/solver.py:COTSolver", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:COTSolver", "target": "{\"lineno\":73,\"end_lineno\":77,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"COTSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/solver.py:COTSolver", "target": "{\"name\":\"COTSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:COTSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:COTSolver:solve", "target": "{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:CatCount"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:CatCross"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:GeneralSelection"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:GroupStat"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:SplitBins"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection"}, {"predicate": "has_class", "source": "metagpt/tools/libs/feature_engineering.py", "target": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "{\"name\":\"CatCount\",\"package\":\"metagpt/tools/libs/feature_engineering.py:CatCount\",\"attributes\":{\"col\":{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]},\"encoder_dict\":{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "metagpt/tools/libs/feature_engineering.py:CatCount:col"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "metagpt/tools/libs/feature_engineering.py:CatCount:encoder_dict"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "metagpt/tools/libs/feature_engineering.py:CatCount:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "metagpt/tools/libs/feature_engineering.py:CatCount:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "metagpt/tools/libs/feature_engineering.py:CatCount:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "{\"lineno\":71,\"end_lineno\":92,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CatCount\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:CatCount", "target": "{\"name\":\"CatCount\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"encoder_dict\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCount:col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCount:col", "target": "{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCount:encoder_dict", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCount:encoder_dict", "target": "{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCount:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCount:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCount:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCount:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "{\"name\":\"CatCross\",\"package\":\"metagpt/tools/libs/feature_engineering.py:CatCross\",\"attributes\":{\"cols\":{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]},\"combs\":{\"name\":\"combs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"combs : list\",\"compositions\":[]},\"combs_map\":{\"name\":\"combs_map\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"combs_map : dict\",\"compositions\":[]},\"max_cat_num\":{\"name\":\"max_cat_num\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_cat_num : int\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "metagpt/tools/libs/feature_engineering.py:CatCross:cols"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "metagpt/tools/libs/feature_engineering.py:CatCross:combs"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "metagpt/tools/libs/feature_engineering.py:CatCross:combs_map"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "metagpt/tools/libs/feature_engineering.py:CatCross:max_cat_num"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "metagpt/tools/libs/feature_engineering.py:CatCross:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "metagpt/tools/libs/feature_engineering.py:CatCross:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "metagpt/tools/libs/feature_engineering.py:CatCross:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "metagpt/tools/libs/feature_engineering.py:CatCross:_cross_two"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "{\"lineno\":163,\"end_lineno\":216,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CatCross\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:CatCross", "target": "{\"name\":\"CatCross\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"combs\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"combs_map\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"max_cat_num\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:cols", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:cols", "target": "{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:combs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:combs", "target": "{\"name\":\"combs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"combs : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:combs_map", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:combs_map", "target": "{\"name\":\"combs_map\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"combs_map : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:max_cat_num", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:max_cat_num", "target": "{\"name\":\"max_cat_num\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_cat_num : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/git_repository.py", "target": "metagpt/utils/git_repository.py:ChangeType"}, {"predicate": "has_class", "source": "metagpt/utils/git_repository.py", "target": "metagpt/utils/git_repository.py:GitRepository"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "{\"name\":\"ChangeType\",\"package\":\"metagpt/utils/git_repository.py:ChangeType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "metagpt/utils/git_repository.py:ChangeType:name"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "{\"lineno\":25,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ChangeType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "{\"name\":\"ChangeType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:ChangeType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:ChangeType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/chromadb_store.py", "target": "metagpt/document_store/chromadb_store.py:ChromaStore"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "{\"name\":\"ChromaStore\",\"package\":\"metagpt/document_store/chromadb_store.py:ChromaStore\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]},\"collection\":{\"name\":\"collection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"collection\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"document\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(document, metadata, _id)\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metadata_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata_filter\",\"compositions\":[]},{\"name\":\"document_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document_filter\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metadata_filter, document_filter)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"documents\",\"type_\":\"\",\"default_\":\"\",\"description\":\"documents\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(documents, metadatas, ids)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:client"}, {"predicate": "has_class_property", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:collection"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:delete"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:persist"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:write"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/management/skill_manager.py:SkillManager"}, {"predicate": "isCompositeOn", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/management/skill_manager.py:SkillManager:_store"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:__init__"}, {"predicate": "has_page_info", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "{\"lineno\":11,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ChromaStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "{\"name\":\"ChromaStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"collection\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:client", "target": "{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:collection", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:collection", "target": "{\"name\":\"collection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"collection\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"document\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(document, metadata, _id)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metadata_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata_filter\",\"compositions\":[]},{\"name\":\"document_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document_filter\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metadata_filter, document_filter)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:write", "target": "{\"name\":\"write\",\"args\":[{\"name\":\"documents\",\"type_\":\"\",\"default_\":\"\",\"description\":\"documents\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(documents, metadatas, ids)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/anthropic_api.py", "target": "metagpt/provider/anthropic_api.py:Claude2"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "{\"name\":\"Claude2\",\"package\":\"metagpt/provider/anthropic_api.py:Claude2\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(prompt: str): str\",\"aggregations\":[]},\"ask\":{\"name\":\"ask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(prompt: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "metagpt/provider/anthropic_api.py:Claude2:config"}, {"predicate": "has_class_method", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "metagpt/provider/anthropic_api.py:Claude2:aask"}, {"predicate": "has_class_method", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "metagpt/provider/anthropic_api.py:Claude2:ask"}, {"predicate": "has_class_method", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "metagpt/provider/anthropic_api.py:Claude2:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "{\"lineno\":15,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Claude2\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "{\"name\":\"Claude2\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/anthropic_api.py:Claude2:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2:aask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/anthropic_api.py:Claude2:aask", "target": "{\"name\":\"aask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(prompt: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2:ask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/anthropic_api.py:Claude2:ask", "target": "{\"name\":\"ask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(prompt: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/repo_parser.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:CodeBlockInfo"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotClassAttribute"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotClassInfo"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotClassMethod"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotClassRelationship"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotReturn"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:RepoFileInfo"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:RepoParser"}, {"predicate": "has_function", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:is_func"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "{\"name\":\"CodeBlockInfo\",\"package\":\"metagpt/repo_parser.py:CodeBlockInfo\",\"attributes\":{\"end_lineno\":{\"name\":\"end_lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"end_lineno : int\",\"compositions\":[]},\"lineno\":{\"name\":\"lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"lineno : int\",\"compositions\":[]},\"properties\":{\"name\":\"properties\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"properties : Dict\",\"compositions\":[]},\"tokens\":{\"name\":\"tokens\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"tokens : List\",\"compositions\":[]},\"type_name\":{\"name\":\"type_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:end_lineno"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:lineno"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:properties"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:tokens"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:type_name"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "{\"lineno\":49,\"end_lineno\":65,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeBlockInfo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "{\"name\":\"CodeBlockInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"end_lineno\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"lineno\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"properties\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"},{\"name\":\"tokens\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"type_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:end_lineno", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:end_lineno", "target": "{\"name\":\"end_lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"end_lineno : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:lineno", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:lineno", "target": "{\"name\":\"lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"lineno : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:properties", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:properties", "target": "{\"name\":\"properties\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"properties : Dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:tokens", "target": "{\"name\":\"tokens\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"tokens : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:type_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:type_name", "target": "{\"name\":\"type_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:CodeInterpreterSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:CodeInterpreterSolver", "target": "{\"name\":\"CodeInterpreterSolver\",\"package\":\"metagpt/strategy/solver.py:CodeInterpreterSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/solver.py:CodeInterpreterSolver", "target": "metagpt/strategy/solver.py:CodeInterpreterSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/solver.py:CodeInterpreterSolver", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:CodeInterpreterSolver", "target": "{\"lineno\":52,\"end_lineno\":56,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeInterpreterSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/solver.py:CodeInterpreterSolver", "target": "{\"name\":\"CodeInterpreterSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:CodeInterpreterSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:CodeInterpreterSolver:solve", "target": "{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/common.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:CodeParser"}, {"predicate": "has_class", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:NoMoneyException"}, {"predicate": "has_class", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:OutputParser"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:check_cmd_exists"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:require_python_version"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:print_members"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:get_function_schema"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:parse_recipient"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:create_func_call_config"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:remove_comments"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:get_class_name"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:any_to_str"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:any_to_str_set"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:is_send_to"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:any_to_name"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:concat_namespace"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:split_namespace"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:auto_namespace"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:add_affix"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:remove_affix"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:general_after_log"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:read_json_file"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:write_json_file"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:read_csv_to_list"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:import_class"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:import_class_inst"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:format_trackback_info"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:serialize_decorator"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:role_raise_decorator"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:aread"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:awrite"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:read_file_block"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:list_files"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:parse_json_code_block"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:remove_white_spaces"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:aread_bin"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:awrite_bin"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:is_coroutine_func"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:load_mc_skills_code"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:encode_image"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:decode_image"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser", "target": "{\"name\":\"CodeParser\",\"package\":\"metagpt/utils/common.py:CodeParser\",\"attributes\":{},\"methods\":{\"parse_block\":{\"name\":\"parse_block\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_block(block: str, text: str): str\",\"aggregations\":[]},\"parse_blocks\":{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]},\"parse_code\":{\"name\":\"parse_code\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(block: str, text: str, lang: str): str\",\"aggregations\":[]},\"parse_file_list\":{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(block: str, text: str, lang: str): list[str]\",\"aggregations\":[]},\"parse_str\":{\"name\":\"parse_str\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(block: str, text: str, lang: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_block"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_blocks"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_code"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_file_list"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_str"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:CodeParser", "target": "{\"lineno\":240,\"end_lineno\":310,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/common.py:CodeParser", "target": "{\"name\":\"CodeParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_block", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_block", "target": "{\"name\":\"parse_block\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_block(block: str, text: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_blocks", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_blocks", "target": "{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_code", "target": "{\"name\":\"parse_code\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(block: str, text: str, lang: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_file_list", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_file_list", "target": "{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(block: str, text: str, lang: str): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_str", "target": "{\"name\":\"parse_str\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(block: str, text: str, lang: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "{\"name\":\"CodePlanAndChangeContext\",\"package\":\"metagpt/schema.py:CodePlanAndChangeContext\",\"attributes\":{\"design_filename\":{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]},\"prd_filename\":{\"name\":\"prd_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_filename : str\",\"compositions\":[]},\"requirement\":{\"name\":\"requirement\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"requirement : str\",\"compositions\":[]},\"task_filename\":{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodePlanAndChangeContext\",\"description\":\"CodePlanAndChangeContext\",\"compositions\":[\"CodePlanAndChangeContext\"]},\"description\":\"loads(filenames: List): CodePlanAndChangeContext\",\"aggregations\":[\"CodePlanAndChangeContext\"]}},\"compositions\":[],\"aggregations\":[\"CodePlanAndChangeContext\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:design_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:prd_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:requirement"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:task_filename"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:loads"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "?:CodePlanAndChangeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "{\"lineno\":670,\"end_lineno\":690,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodePlanAndChangeContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "{\"name\":\"CodePlanAndChangeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"design_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prd_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"requirement\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:design_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:design_filename", "target": "{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:prd_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:prd_filename", "target": "{\"name\":\"prd_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:requirement", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:requirement", "target": "{\"name\":\"requirement\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"requirement : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:task_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:task_filename", "target": "{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:loads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:loads", "target": "{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodePlanAndChangeContext\",\"description\":\"CodePlanAndChangeContext\",\"compositions\":[\"CodePlanAndChangeContext\"]},\"description\":\"loads(filenames: List): CodePlanAndChangeContext\",\"aggregations\":[\"CodePlanAndChangeContext\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "{\"name\":\"CodeSummarizeContext\",\"package\":\"metagpt/schema.py:CodeSummarizeContext\",\"attributes\":{\"codes_filenames\":{\"name\":\"codes_filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"codes_filenames : List[str]\",\"compositions\":[]},\"design_filename\":{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]},\"reason\":{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]},\"task_filename\":{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeSummarizeContext\",\"description\":\"CodeSummarizeContext\",\"compositions\":[\"CodeSummarizeContext\"]},\"description\":\"loads(filenames: List): CodeSummarizeContext\",\"aggregations\":[\"CodeSummarizeContext\"]}},\"compositions\":[],\"aggregations\":[\"CodeSummarizeContext\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:codes_filenames"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:design_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:reason"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:task_filename"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:loads"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "?:CodeSummarizeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/actions/summarize_code.py:SummarizeCode"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/actions/summarize_code.py:SummarizeCode:i_context"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:__hash__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "{\"lineno\":644,\"end_lineno\":663,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeSummarizeContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "{\"name\":\"CodeSummarizeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"codes_filenames\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"design_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"reason\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:codes_filenames", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:codes_filenames", "target": "{\"name\":\"codes_filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"codes_filenames : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:design_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:design_filename", "target": "{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:reason", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:reason", "target": "{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:task_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:task_filename", "target": "{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:loads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:loads", "target": "{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeSummarizeContext\",\"description\":\"CodeSummarizeContext\",\"compositions\":[\"CodeSummarizeContext\"]},\"description\":\"loads(filenames: List): CodeSummarizeContext\",\"aggregations\":[\"CodeSummarizeContext\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext", "target": "{\"name\":\"CodingContext\",\"package\":\"metagpt/schema.py:CodingContext\",\"attributes\":{\"code_doc\":{\"name\":\"code_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"code_plan_and_change_doc\":{\"name\":\"code_plan_and_change_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_plan_and_change_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"design_doc\":{\"name\":\"design_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"design_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"task_doc\":{\"name\":\"task_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"task_doc : Optional[Document]\",\"compositions\":[\"Document\"]}},\"methods\":{},\"compositions\":[\"Document\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:CodingContext:code_doc"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:CodingContext:code_plan_and_change_doc"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:CodingContext:design_doc"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:CodingContext:filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:CodingContext:task_doc"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:CodingContext", "target": "?:Document"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/actions/write_code_review.py:WriteCodeReview"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:CodingContext", "target": "{\"lineno\":611,\"end_lineno\":616,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodingContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:CodingContext", "target": "{\"name\":\"CodingContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"design_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext:code_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext:code_doc", "target": "{\"name\":\"code_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext:code_plan_and_change_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext:code_plan_and_change_doc", "target": "{\"name\":\"code_plan_and_change_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_plan_and_change_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext:design_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext:design_doc", "target": "{\"name\":\"design_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"design_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext:task_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext:task_doc", "target": "{\"name\":\"task_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"task_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/research.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/research.py", "target": "metagpt/actions/research.py:CollectLinks"}, {"predicate": "has_class", "source": "metagpt/actions/research.py", "target": "metagpt/actions/research.py:ConductResearch"}, {"predicate": "has_class", "source": "metagpt/actions/research.py", "target": "metagpt/actions/research.py:WebBrowseAndSummarize"}, {"predicate": "has_function", "source": "metagpt/actions/research.py", "target": "metagpt/actions/research.py:get_research_system_text"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks", "target": "{\"name\":\"CollectLinks\",\"package\":\"metagpt/actions/research.py:CollectLinks\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"rank_func\":{\"name\":\"rank_func\",\"type_\":\"Optional[Callable[[list[str]],None]]\",\"default_\":\"\",\"description\":\"rank_func : Optional[Callable[[list[str]], None]]\",\"compositions\":[\"Callable\"]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]},\"search_func\":{\"name\":\"search_func\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_func : Optional[Any]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"decomposition_nums\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"decomposition_nums: int\",\"compositions\":[]},{\"name\":\"url_per_query\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"url_per_query: int\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\\\\|None\",\"default_\":\"\",\"description\":\"system_text: str \\\\| None\",\"compositions\":[\"str\\\\\"]}],\"return_args\":{\"type_\":\"dict[str,list[str]]\",\"description\":\"dict[str, list[str]]\",\"compositions\":[]},\"description\":\"run(topic: str, decomposition_nums: int, url_per_query: int, system_text: str \\\\| None): dict[str, list[str]]\",\"aggregations\":[\"str\\\\\"]},\"validate_engine_and_run_func\":{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}},\"compositions\":[\"Callable\",\"SearchEngine\"],\"aggregations\":[\"str\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:rank_func"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:search_engine"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:search_func"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:validate_engine_and_run_func"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/research.py:CollectLinks", "target": "?:Callable"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/research.py:CollectLinks", "target": "?:str\\"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/tools/search_engine.py:SearchEngine"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:_search_and_rank_urls"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:CollectLinks", "target": "{\"lineno\":78,\"end_lineno\":177,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CollectLinks\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/research.py:CollectLinks", "target": "{\"name\":\"CollectLinks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"rank_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[[list[str]],None]]\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngine]\",\"default_value\":\"\"},{\"name\":\"search_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/research.py:CollectLinks", "target": "?:SearchEngine"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:rank_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:rank_func", "target": "{\"name\":\"rank_func\",\"type_\":\"Optional[Callable[[list[str]],None]]\",\"default_\":\"\",\"description\":\"rank_func : Optional[Callable[[list[str]], None]]\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:search_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:search_engine", "target": "{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:search_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:search_func", "target": "{\"name\":\"search_func\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_func : Optional[Any]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"decomposition_nums\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"decomposition_nums: int\",\"compositions\":[]},{\"name\":\"url_per_query\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"url_per_query: int\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\\\\|None\",\"default_\":\"\",\"description\":\"system_text: str \\\\| None\",\"compositions\":[\"str\\\\\"]}],\"return_args\":{\"type_\":\"dict[str,list[str]]\",\"description\":\"dict[str, list[str]]\",\"compositions\":[]},\"description\":\"run(topic: str, decomposition_nums: int, url_per_query: int, system_text: str \\\\| None): dict[str, list[str]]\",\"aggregations\":[\"str\\\\\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:validate_engine_and_run_func", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:validate_engine_and_run_func", "target": "{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Components"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Entity"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Example"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Parameter"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Returns"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Skill"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Components", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Components", "target": "{\"name\":\"Components\",\"package\":\"metagpt/learn/skill_loader.py:Components\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Components", "target": "{\"lineno\":58,\"end_lineno\":59,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Components\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Components", "target": "{\"name\":\"Components\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:ConductResearch", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:ConductResearch", "target": "{\"name\":\"ConductResearch\",\"package\":\"metagpt/actions/research.py:ConductResearch\",\"attributes\":{},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str, content: str, system_text: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:ConductResearch", "target": "metagpt/actions/research.py:ConductResearch:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/research.py:ConductResearch", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:ConductResearch", "target": "metagpt/actions/research.py:ConductResearch:__init__"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:ConductResearch", "target": "{\"lineno\":248,\"end_lineno\":273,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ConductResearch\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/research.py:ConductResearch", "target": "{\"name\":\"ConductResearch\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:ConductResearch:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:ConductResearch:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str, content: str, system_text: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config", "target": "{\"name\":\"Config\",\"package\":\"metagpt/config2.py:Config\",\"attributes\":{\"azure_tts_region\":{\"name\":\"azure_tts_region\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"azure_tts_region : str\",\"compositions\":[]},\"azure_tts_subscription_key\":{\"name\":\"azure_tts_subscription_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"azure_tts_subscription_key : str\",\"compositions\":[]},\"browser\":{\"name\":\"browser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"browser\",\"compositions\":[]},\"code_review_k_times\":{\"name\":\"code_review_k_times\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code_review_k_times : int\",\"compositions\":[]},\"enable_longterm_memory\":{\"name\":\"enable_longterm_memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"enable_longterm_memory : bool\",\"compositions\":[]},\"iflytek_api_key\":{\"name\":\"iflytek_api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_api_key : str\",\"compositions\":[]},\"iflytek_api_secret\":{\"name\":\"iflytek_api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_api_secret : str\",\"compositions\":[]},\"iflytek_app_id\":{\"name\":\"iflytek_app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_app_id : str\",\"compositions\":[]},\"inc\":{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"max_auto_summarize_code\":{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]},\"mermaid\":{\"name\":\"mermaid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mermaid\",\"compositions\":[]},\"metagpt_tti_url\":{\"name\":\"metagpt_tti_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"metagpt_tti_url : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"Literal['json','markdown','raw']\",\"default_\":\"\",\"description\":\"prompt_schema : Literal['json', 'markdown', 'raw']\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]},\"redis\":{\"name\":\"redis\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"redis : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]},\"redis_key\":{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key : str\",\"compositions\":[]},\"repair_llm_output\":{\"name\":\"repair_llm_output\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"repair_llm_output : bool\",\"compositions\":[]},\"reqa_file\":{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},\"s3\":{\"name\":\"s3\",\"type_\":\"Optional[S3Config]\",\"default_\":\"\",\"description\":\"s3 : Optional[S3Config]\",\"compositions\":[\"S3Config\"]},\"search\":{\"name\":\"search\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search\",\"compositions\":[]},\"workspace\":{\"name\":\"workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workspace\",\"compositions\":[]}},\"methods\":{\"default\":{\"name\":\"default\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"default()\",\"aggregations\":[]},\"from_home\":{\"name\":\"from_home\",\"args\":[{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_home(path)\",\"aggregations\":[]},\"get_azure_llm\":{\"name\":\"get_azure_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_azure_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]},\"get_openai_llm\":{\"name\":\"get_openai_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_openai_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]},\"update_via_cli\":{\"name\":\"update_via_cli\",\"args\":[{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},{\"name\":\"inc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"inc\",\"compositions\":[]},{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code)\",\"aggregations\":[]}},\"compositions\":[\"RedisConfig\",\"S3Config\"],\"aggregations\":[\"LLMConfig\"]}"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:azure_tts_region"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:azure_tts_subscription_key"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:browser"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:code_review_k_times"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:enable_longterm_memory"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:iflytek_api_key"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:iflytek_api_secret"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:iflytek_app_id"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:inc"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:language"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:llm"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:max_auto_summarize_code"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:mermaid"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:metagpt_tti_url"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:project_name"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:project_path"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:prompt_schema"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:proxy"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:redis"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:redis_key"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:repair_llm_output"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:reqa_file"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:s3"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:search"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:workspace"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:default"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:from_home"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:get_azure_llm"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:get_openai_llm"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:update_via_cli"}, {"predicate": "isAggregateOf", "source": "metagpt/config2.py:Config", "target": "?:LLMConfig"}, {"predicate": "isGeneralizeOf", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:CLIParams"}, {"predicate": "isGeneralizeOf", "source": "metagpt/config2.py:Config", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/config2.py:Config", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/config2.py:Config", "target": "metagpt/context.py:Context:config"}, {"predicate": "is_composite_of", "source": "metagpt/config2.py:Config", "target": "metagpt/configs/redis_config.py:RedisConfig"}, {"predicate": "is_composite_of", "source": "metagpt/config2.py:Config", "target": "metagpt/configs/s3_config.py:S3Config"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:Config", "target": "{\"lineno\":44,\"end_lineno\":126,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Config\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/config2.py:Config", "target": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"azure_tts_region\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"azure_tts_subscription_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"browser\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_review_k_times\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"enable_longterm_memory\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"iflytek_api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"iflytek_api_secret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"iflytek_app_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inc\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_auto_summarize_code\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mermaid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"metagpt_tti_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"Literal['json','markdown','raw']\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"redis\",\"visibility\":\"+\",\"value_type\":\"Optional[RedisConfig]\",\"default_value\":\"\"},{\"name\":\"redis_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"repair_llm_output\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"reqa_file\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"s3\",\"visibility\":\"+\",\"value_type\":\"Optional[S3Config]\",\"default_value\":\"\"},{\"name\":\"search\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/config2.py:Config", "target": "?:RedisConfig"}, {"predicate": "isCompositeOf", "source": "metagpt/config2.py:Config", "target": "?:S3Config"}, {"predicate": "is", "source": "metagpt/config2.py:Config:azure_tts_region", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:azure_tts_region", "target": "{\"name\":\"azure_tts_region\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"azure_tts_region : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:azure_tts_subscription_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:azure_tts_subscription_key", "target": "{\"name\":\"azure_tts_subscription_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"azure_tts_subscription_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:browser", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:browser", "target": "{\"name\":\"browser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"browser\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:code_review_k_times", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:code_review_k_times", "target": "{\"name\":\"code_review_k_times\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code_review_k_times : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:enable_longterm_memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:enable_longterm_memory", "target": "{\"name\":\"enable_longterm_memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"enable_longterm_memory : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:iflytek_api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:iflytek_api_key", "target": "{\"name\":\"iflytek_api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:iflytek_api_secret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:iflytek_api_secret", "target": "{\"name\":\"iflytek_api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_api_secret : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:iflytek_app_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:iflytek_app_id", "target": "{\"name\":\"iflytek_app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"iflytek_app_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:inc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:inc", "target": "{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:max_auto_summarize_code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:max_auto_summarize_code", "target": "{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:mermaid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:mermaid", "target": "{\"name\":\"mermaid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mermaid\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:metagpt_tti_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:metagpt_tti_url", "target": "{\"name\":\"metagpt_tti_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"metagpt_tti_url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:project_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:project_path", "target": "{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:prompt_schema", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:prompt_schema", "target": "{\"name\":\"prompt_schema\",\"type_\":\"Literal['json','markdown','raw']\",\"default_\":\"\",\"description\":\"prompt_schema : Literal['json', 'markdown', 'raw']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:redis", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:redis", "target": "{\"name\":\"redis\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"redis : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:redis_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:redis_key", "target": "{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:repair_llm_output", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:repair_llm_output", "target": "{\"name\":\"repair_llm_output\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"repair_llm_output : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:reqa_file", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:reqa_file", "target": "{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:s3", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:s3", "target": "{\"name\":\"s3\",\"type_\":\"Optional[S3Config]\",\"default_\":\"\",\"description\":\"s3 : Optional[S3Config]\",\"compositions\":[\"S3Config\"]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:search", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:search", "target": "{\"name\":\"search\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:workspace", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:workspace", "target": "{\"name\":\"workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workspace\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:default", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:default", "target": "{\"name\":\"default\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"default()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:from_home", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:from_home", "target": "{\"name\":\"from_home\",\"args\":[{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_home(path)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:get_azure_llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:get_azure_llm", "target": "{\"name\":\"get_azure_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_azure_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:get_openai_llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:get_openai_llm", "target": "{\"name\":\"get_openai_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_openai_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:update_via_cli", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:update_via_cli", "target": "{\"name\":\"update_via_cli\",\"args\":[{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},{\"name\":\"inc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"inc\",\"compositions\":[]},{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:Usage"}, {"predicate": "has_function", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:oas3_openai_text_to_embedding"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config", "target": "{\"name\":\"Config\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config\",\"attributes\":{\"alias\":{\"name\":\"alias\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"alias : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config:alias"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config", "target": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"alias\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config:alias", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config:alias", "target": "{\"name\":\"alias\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"alias : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config", "target": "{\"name\":\"Config\",\"package\":\"metagpt/memory/brain_memory.py:BrainMemory:Config\",\"attributes\":{\"arbitrary_types_allowed\":{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config", "target": "metagpt/memory/brain_memory.py:BrainMemory:Config:arbitrary_types_allowed"}, {"predicate": "has_class_view", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config", "target": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arbitrary_types_allowed\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config:arbitrary_types_allowed", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config:arbitrary_types_allowed", "target": "{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:Config", "target": "{\"name\":\"Config\",\"package\":\"metagpt/strategy/tot.py:TreeofThought:Config\",\"attributes\":{\"arbitrary_types_allowed\":{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:TreeofThought:Config", "target": "metagpt/strategy/tot.py:TreeofThought:Config:arbitrary_types_allowed"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:TreeofThought:Config", "target": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arbitrary_types_allowed\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:Config:arbitrary_types_allowed", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:Config:arbitrary_types_allowed", "target": "{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context", "target": "{\"name\":\"Context\",\"package\":\"metagpt/context.py:Context\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"Optional[GitRepository]\",\"default_\":\"\",\"description\":\"git_repo : Optional[GitRepository]\",\"compositions\":[\"GitRepository\"]},\"kwargs\":{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"Optional[ProjectRepo]\",\"default_\":\"\",\"description\":\"repo : Optional[ProjectRepo]\",\"compositions\":[\"ProjectRepo\"]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"src_workspace : Optional[Path]\",\"compositions\":[\"Path\"]}},\"methods\":{\"llm\":{\"name\":\"llm\",\"args\":[],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm(): BaseLLM\",\"aggregations\":[\"BaseLLM\"]},\"llm_with_cost_manager_from_llm_config\":{\"name\":\"llm_with_cost_manager_from_llm_config\",\"args\":[{\"name\":\"llm_config\",\"type_\":\"LLMConfig\",\"default_\":\"\",\"description\":\"llm_config: LLMConfig\",\"compositions\":[\"LLMConfig\"]}],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm_with_cost_manager_from_llm_config(llm_config: LLMConfig): BaseLLM\",\"aggregations\":[\"LLMConfig\",\"BaseLLM\"]},\"new_environ\":{\"name\":\"new_environ\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_environ()\",\"aggregations\":[]}},\"compositions\":[\"GitRepository\",\"ProjectRepo\",\"Path\"],\"aggregations\":[\"BaseLLM\",\"LLMConfig\"]}"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:config"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:git_repo"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:kwargs"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:model_config"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:repo"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:src_workspace"}, {"predicate": "has_class_method", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:llm"}, {"predicate": "has_class_method", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:llm_with_cost_manager_from_llm_config"}, {"predicate": "has_class_method", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:new_environ"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:Context", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/context.py:Context", "target": "?:BaseLLM"}, {"predicate": "isAggregateOf", "source": "metagpt/context.py:Context", "target": "?:LLMConfig"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:Context", "target": "metagpt/environment/base_env.py:Environment"}, {"predicate": "isCompositeOn", "source": "metagpt/context.py:Context", "target": "metagpt/environment/base_env.py:Environment:context"}, {"predicate": "is_composite_of", "source": "metagpt/context.py:Context", "target": "metagpt/utils/git_repository.py:GitRepository"}, {"predicate": "is_composite_of", "source": "metagpt/context.py:Context", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "has_page_info", "source": "metagpt/context.py:Context", "target": "{\"lineno\":55,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Context\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/context.py:Context", "target": "{\"name\":\"Context\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"Optional[GitRepository]\",\"default_value\":\"\"},{\"name\":\"kwargs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"Optional[ProjectRepo]\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:Context", "target": "?:GitRepository"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:Context", "target": "?:ProjectRepo"}, {"predicate": "is", "source": "metagpt/context.py:Context:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:git_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:git_repo", "target": "{\"name\":\"git_repo\",\"type_\":\"Optional[GitRepository]\",\"default_\":\"\",\"description\":\"git_repo : Optional[GitRepository]\",\"compositions\":[\"GitRepository\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:kwargs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:kwargs", "target": "{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:repo", "target": "{\"name\":\"repo\",\"type_\":\"Optional[ProjectRepo]\",\"default_\":\"\",\"description\":\"repo : Optional[ProjectRepo]\",\"compositions\":[\"ProjectRepo\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:src_workspace", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:src_workspace", "target": "{\"name\":\"src_workspace\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"src_workspace : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:llm", "target": "{\"name\":\"llm\",\"args\":[],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm(): BaseLLM\",\"aggregations\":[\"BaseLLM\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:llm_with_cost_manager_from_llm_config", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:llm_with_cost_manager_from_llm_config", "target": "{\"name\":\"llm_with_cost_manager_from_llm_config\",\"args\":[{\"name\":\"llm_config\",\"type_\":\"LLMConfig\",\"default_\":\"\",\"description\":\"llm_config: LLMConfig\",\"compositions\":[\"LLMConfig\"]}],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm_with_cost_manager_from_llm_config(llm_config: LLMConfig): BaseLLM\",\"aggregations\":[\"LLMConfig\",\"BaseLLM\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:new_environ", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:new_environ", "target": "{\"name\":\"new_environ\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_environ()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/context_mixin.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/context_mixin.py", "target": "metagpt/context_mixin.py:ContextMixin"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin", "target": "{\"name\":\"ContextMixin\",\"package\":\"metagpt/context_mixin.py:ContextMixin\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"private_config\":{\"name\":\"private_config\",\"type_\":\"Optional[Config]\",\"default_\":\"\",\"description\":\"private_config : Optional[Config]\",\"compositions\":[\"Config\"]},\"private_context\":{\"name\":\"private_context\",\"type_\":\"Optional[Context]\",\"default_\":\"\",\"description\":\"private_context : Optional[Context]\",\"compositions\":[\"Context\"]},\"private_llm\":{\"name\":\"private_llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"private_llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}},\"methods\":{\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(k, v, override)\",\"aggregations\":[]},\"set_config\":{\"name\":\"set_config\",\"args\":[{\"name\":\"config\",\"type_\":\"Config\",\"default_\":\"\",\"description\":\"config: Config\",\"compositions\":[\"Config\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_config(config: Config, override)\",\"aggregations\":[\"Config\"]},\"set_context\":{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context: Context, override)\",\"aggregations\":[\"Context\"]},\"set_llm\":{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"BaseLLM\",\"default_\":\"\",\"description\":\"llm: BaseLLM\",\"compositions\":[\"BaseLLM\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm: BaseLLM, override)\",\"aggregations\":[\"BaseLLM\"]},\"validate_context_mixin_extra\":{\"name\":\"validate_context_mixin_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_context_mixin_extra()\",\"aggregations\":[]}},\"compositions\":[\"Config\",\"Context\",\"BaseLLM\"],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:config"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:context"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:llm"}, {"predicate": "has_class_property", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:model_config"}, {"predicate": "has_class_property", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:private_config"}, {"predicate": "has_class_property", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:private_context"}, {"predicate": "has_class_property", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:private_llm"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:set"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:set_config"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:set_context"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:set_llm"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:validate_context_mixin_extra"}, {"predicate": "is_composite_of", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/config2.py:Config"}, {"predicate": "is_composite_of", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context.py:Context"}, {"predicate": "is_composite_of", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:_process_context_mixin_extra"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:ContextMixin", "target": "{\"lineno\":17,\"end_lineno\":101,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ContextMixin\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/context_mixin.py:ContextMixin", "target": "{\"name\":\"ContextMixin\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"private_config\",\"visibility\":\"+\",\"value_type\":\"Optional[Config]\",\"default_value\":\"\"},{\"name\":\"private_context\",\"visibility\":\"+\",\"value_type\":\"Optional[Context]\",\"default_value\":\"\"},{\"name\":\"private_llm\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseLLM]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/context_mixin.py:ContextMixin", "target": "?:BaseLLM"}, {"predicate": "isCompositeOf", "source": "metagpt/context_mixin.py:ContextMixin", "target": "?:Config"}, {"predicate": "isCompositeOf", "source": "metagpt/context_mixin.py:ContextMixin", "target": "?:Context"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:config", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:context", "target": "{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:context", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:llm", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:private_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:private_config", "target": "{\"name\":\"private_config\",\"type_\":\"Optional[Config]\",\"default_\":\"\",\"description\":\"private_config : Optional[Config]\",\"compositions\":[\"Config\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:private_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:private_context", "target": "{\"name\":\"private_context\",\"type_\":\"Optional[Context]\",\"default_\":\"\",\"description\":\"private_context : Optional[Context]\",\"compositions\":[\"Context\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:private_llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:private_llm", "target": "{\"name\":\"private_llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"private_llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:set", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:set", "target": "{\"name\":\"set\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(k, v, override)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:set_config", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:set_config", "target": "{\"name\":\"set_config\",\"args\":[{\"name\":\"config\",\"type_\":\"Config\",\"default_\":\"\",\"description\":\"config: Config\",\"compositions\":[\"Config\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_config(config: Config, override)\",\"aggregations\":[\"Config\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:set_context", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:set_context", "target": "{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context: Context, override)\",\"aggregations\":[\"Context\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:set_llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:set_llm", "target": "{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"BaseLLM\",\"default_\":\"\",\"description\":\"llm: BaseLLM\",\"compositions\":[\"BaseLLM\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm: BaseLLM, override)\",\"aggregations\":[\"BaseLLM\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:validate_context_mixin_extra", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:validate_context_mixin_extra", "target": "{\"name\":\"validate_context_mixin_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_context_mixin_extra()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/cost_manager.py", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "has_class", "source": "metagpt/utils/cost_manager.py", "target": "metagpt/utils/cost_manager.py:Costs"}, {"predicate": "has_class", "source": "metagpt/utils/cost_manager.py", "target": "metagpt/utils/cost_manager.py:TokenCostManager"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "{\"name\":\"CostManager\",\"package\":\"metagpt/utils/cost_manager.py:CostManager\",\"attributes\":{\"max_budget\":{\"name\":\"max_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"max_budget : float\",\"compositions\":[]},\"total_budget\":{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]},\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]},\"get_total_completion_tokens\":{\"name\":\"get_total_completion_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_completion_tokens()\",\"aggregations\":[]},\"get_total_cost\":{\"name\":\"get_total_cost\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_cost()\",\"aggregations\":[]},\"get_total_prompt_tokens\":{\"name\":\"get_total_prompt_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_prompt_tokens()\",\"aggregations\":[]},\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:max_budget"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:total_budget"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:total_completion_tokens"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:total_cost"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:total_prompt_tokens"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:get_costs"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:get_total_completion_tokens"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:get_total_cost"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:get_total_prompt_tokens"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:update_cost"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "?:Costs"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/context.py:Context:cost_manager"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "{\"lineno\":24,\"end_lineno\":84,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CostManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "{\"name\":\"CostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"max_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:max_budget", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:max_budget", "target": "{\"name\":\"max_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"max_budget : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:total_budget", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:total_budget", "target": "{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:total_completion_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:total_completion_tokens", "target": "{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:total_cost", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:total_cost", "target": "{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:total_prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:total_prompt_tokens", "target": "{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:get_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:get_costs", "target": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_completion_tokens", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_completion_tokens", "target": "{\"name\":\"get_total_completion_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_completion_tokens()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_cost", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_cost", "target": "{\"name\":\"get_total_cost\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_cost()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_prompt_tokens", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_prompt_tokens", "target": "{\"name\":\"get_total_prompt_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_prompt_tokens()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:update_cost", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:update_cost", "target": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs", "target": "{\"name\":\"Costs\",\"package\":\"metagpt/utils/cost_manager.py:Costs\",\"attributes\":{\"total_budget\":{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]},\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:Costs", "target": "metagpt/utils/cost_manager.py:Costs:total_budget"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:Costs", "target": "metagpt/utils/cost_manager.py:Costs:total_completion_tokens"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:Costs", "target": "metagpt/utils/cost_manager.py:Costs:total_cost"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:Costs", "target": "metagpt/utils/cost_manager.py:Costs:total_prompt_tokens"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:Costs", "target": "{\"lineno\":17,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Costs\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/cost_manager.py:Costs", "target": "{\"name\":\"Costs\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs:total_budget", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs:total_budget", "target": "{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs:total_completion_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs:total_completion_tokens", "target": "{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs:total_cost", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs:total_cost", "target": "{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs:total_prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs:total_prompt_tokens", "target": "{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/custom_decoder.py", "target": "metagpt/utils/custom_decoder.py:CustomDecoder"}, {"predicate": "has_function", "source": "metagpt/utils/custom_decoder.py", "target": "metagpt/utils/custom_decoder.py:py_make_scanner"}, {"predicate": "has_function", "source": "metagpt/utils/custom_decoder.py", "target": "metagpt/utils/custom_decoder.py:JSONObject"}, {"predicate": "has_function", "source": "metagpt/utils/custom_decoder.py", "target": "metagpt/utils/custom_decoder.py:py_scanstring"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "{\"name\":\"CustomDecoder\",\"package\":\"metagpt/utils/custom_decoder.py:CustomDecoder\",\"attributes\":{\"parse_object\":{\"name\":\"parse_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_object\",\"compositions\":[]},\"parse_string\":{\"name\":\"parse_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_string\",\"compositions\":[]},\"scan_once\":{\"name\":\"scan_once\",\"type_\":\"\",\"default_\":\"\",\"description\":\"scan_once\",\"compositions\":[]}},\"methods\":{\"decode\":{\"name\":\"decode\",\"args\":[{\"name\":\"s\",\"type_\":\"\",\"default_\":\"\",\"description\":\"s\",\"compositions\":[]},{\"name\":\"_w\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_w\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"decode(s, _w)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_object"}, {"predicate": "has_class_property", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_string"}, {"predicate": "has_class_property", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:scan_once"}, {"predicate": "has_class_method", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:decode"}, {"predicate": "has_class_method", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "{\"lineno\":273,\"end_lineno\":297,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CustomDecoder\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "{\"name\":\"CustomDecoder\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"parse_object\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"parse_string\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"scan_once\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_object", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_object", "target": "{\"name\":\"parse_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_object\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_string", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_string", "target": "{\"name\":\"parse_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_string\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:scan_once", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:scan_once", "target": "{\"name\":\"scan_once\",\"type_\":\"\",\"default_\":\"\",\"description\":\"scan_once\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:decode", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:decode", "target": "{\"name\":\"decode\",\"args\":[{\"name\":\"s\",\"type_\":\"\",\"default_\":\"\",\"description\":\"s\",\"compositions\":[]},{\"name\":\"_w\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_w\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"decode(s, _w)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/customer_service.py", "target": "metagpt/roles/customer_service.py:CustomerService"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "{\"name\":\"CustomerService\",\"package\":\"metagpt/roles/customer_service.py:CustomerService\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}},\"methods\":{},\"compositions\":[\"BaseStore\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/customer_service.py:CustomerService:desc"}, {"predicate": "has_class_property", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/customer_service.py:CustomerService:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/customer_service.py:CustomerService:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/customer_service.py:CustomerService:store"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/sales.py:Sales"}, {"predicate": "is_composite_of", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "{\"lineno\":27,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CustomerService\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "{\"name\":\"CustomerService\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseStore]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "?:BaseStore"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService:store", "target": "{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_ddg.py", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "{\"name\":\"DDGAPIWrapper\",\"package\":\"metagpt/tools/search_engine_ddg.py:DDGAPIWrapper\",\"attributes\":{\"ddgs\":{\"name\":\"ddgs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ddgs\",\"compositions\":[]},\"executor\":{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]},\"loop\":{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True], focus: list[str] \\\\| None): str\",\"aggregations\":[\"\\\\\"]}},\"compositions\":[\"futures.Executor\",\"asyncio.AbstractEventLoop\"],\"aggregations\":[\"\\\\\"]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:ddgs"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:executor"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:loop"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:model_config"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:proxy"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:run"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "?:futures.Executor"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "?:asyncio.AbstractEventLoop"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "?:\\"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:_search_from_ddgs"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "{\"lineno\":21,\"end_lineno\":88,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DDGAPIWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "{\"name\":\"DDGAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ddgs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"Optional[futures.Executor]\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"Optional[asyncio.AbstractEventLoop]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:ddgs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:ddgs", "target": "{\"name\":\"ddgs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ddgs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:ddgs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:executor", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:executor", "target": "{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:loop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:loop", "target": "{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True], focus: list[str] \\\\| None): str\",\"aggregations\":[\"\\\\\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "{\"name\":\"DFSSolver\",\"package\":\"metagpt/strategy/tot.py:DFSSolver\",\"attributes\":{\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]},{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt, root)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:DFSSolver:thought_tree"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:DFSSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:DFSSolver:_dfs"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "{\"lineno\":180,\"end_lineno\":227,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DFSSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "{\"name\":\"DFSSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:DFSSolver:thought_tree", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:DFSSolver:thought_tree", "target": "{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:DFSSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:DFSSolver:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]},{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt, root)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:FillMissingValue"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:LabelEncode"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:MinMaxScale"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:OneHotEncode"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:RobustScale"}, {"predicate": "has_class", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:StandardScale"}, {"predicate": "has_function", "source": "metagpt/tools/libs/data_preprocess.py", "target": "metagpt/tools/libs/data_preprocess.py:get_column_info"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "{\"name\":\"DataPreprocessTool\",\"package\":\"metagpt/tools/libs/data_preprocess.py:DataPreprocessTool\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:features"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:model"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "{\"lineno\":60,\"end_lineno\":85,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DataPreprocessTool\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool", "target": "{\"name\":\"DataPreprocessTool\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:features", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:features", "target": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:model", "target": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_meilisearch.py", "target": "metagpt/tools/search_engine_meilisearch.py:DataSource"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_meilisearch.py", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "{\"name\":\"DataSource\",\"package\":\"metagpt/tools/search_engine_meilisearch.py:DataSource\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "metagpt/tools/search_engine_meilisearch.py:DataSource:name"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "metagpt/tools/search_engine_meilisearch.py:DataSource:url"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "metagpt/tools/search_engine_meilisearch.py:DataSource:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "{\"lineno\":17,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DataSource\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "{\"name\":\"DataSource\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:url", "target": "{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/debug_error.py", "target": "metagpt/actions/debug_error.py:DebugError"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py:DebugError", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/debug_error.py:DebugError", "target": "{\"name\":\"DebugError\",\"package\":\"metagpt/actions/debug_error.py:DebugError\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/debug_error.py:DebugError", "target": "metagpt/actions/debug_error.py:DebugError:i_context"}, {"predicate": "has_class_method", "source": "metagpt/actions/debug_error.py:DebugError", "target": "metagpt/actions/debug_error.py:DebugError:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/debug_error.py:DebugError", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:DebugError", "target": "{\"lineno\":48,\"end_lineno\":75,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DebugError\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/debug_error.py:DebugError", "target": "{\"name\":\"DebugError\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py:DebugError:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/debug_error.py:DebugError:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py:DebugError:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/debug_error.py:DebugError:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/dependency_file.py", "target": "metagpt/utils/dependency_file.py:DependencyFile"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "{\"name\":\"DependencyFile\",\"package\":\"metagpt/utils/dependency_file.py:DependencyFile\",\"attributes\":{\"exists\":{\"name\":\"exists\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exists\",\"compositions\":[]}},\"methods\":{\"delete_file\":{\"name\":\"delete_file\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_file()\",\"aggregations\":[]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(filename: Path \\\\| str, persist)\",\"aggregations\":[\"Path\\\\\"]},\"load\":{\"name\":\"load\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load()\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]},\"update\":{\"name\":\"update\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"dependencies\",\"type_\":\"Set[Path\\\\|str]\",\"default_\":\"\",\"description\":\"dependencies: Set[Path \\\\| str]\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update(filename: Path \\\\| str, dependencies: Set[Path \\\\| str], persist)\",\"aggregations\":[\"Path\\\\\"]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:exists"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:delete_file"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:get"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:load"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:save"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:update"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "?:Path\\"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/git_repository.py:GitRepository"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/git_repository.py:GitRepository:_dependency"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "{\"lineno\":22,\"end_lineno\":107,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DependencyFile\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "{\"name\":\"DependencyFile\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"exists\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:exists", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:exists", "target": "{\"name\":\"exists\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exists\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:exists", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:delete_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:delete_file", "target": "{\"name\":\"delete_file\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_file()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(filename: Path \\\\| str, persist)\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:load", "target": "{\"name\":\"load\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:save", "target": "{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:update", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:update", "target": "{\"name\":\"update\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"dependencies\",\"type_\":\"Set[Path\\\\|str]\",\"default_\":\"\",\"description\":\"dependencies: Set[Path \\\\| str]\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update(filename: Path \\\\| str, dependencies: Set[Path \\\\| str], persist)\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/design_api_review.py", "target": "metagpt/actions/design_api_review.py:DesignReview"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "{\"name\":\"DesignReview\",\"package\":\"metagpt/actions/design_api_review.py:DesignReview\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},{\"name\":\"api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_design\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd, api_design)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "metagpt/actions/design_api_review.py:DesignReview:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "metagpt/actions/design_api_review.py:DesignReview:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "metagpt/actions/design_api_review.py:DesignReview:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "{\"lineno\":14,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DesignReview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "{\"name\":\"DesignReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py:DesignReview:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api_review.py:DesignReview:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py:DesignReview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api_review.py:DesignReview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py:DesignReview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api_review.py:DesignReview:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},{\"name\":\"api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_design\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd, api_design)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/di_graph_repository.py", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "{\"name\":\"DiGraphRepository\",\"package\":\"metagpt/utils/di_graph_repository.py:DiGraphRepository\",\"attributes\":{\"pathname\":{\"name\":\"pathname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pathname\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]},\"root\":{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]},\"insert\":{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]},\"json\":{\"name\":\"json\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"json(): str\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(pathname: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"load_from\":{\"name\":\"load_from\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"GraphRepository\",\"description\":\"GraphRepository\",\"compositions\":[\"GraphRepository\"]},\"description\":\"load_from(pathname: str \\\\| Path): GraphRepository\",\"aggregations\":[\"str\\\\\",\"GraphRepository\",\"Path\"]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"select\":{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\",\"GraphRepository\",\"SPO\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:delete"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:insert"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:json"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load_from"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:save"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:select"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "?:GraphRepository"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "?:SPO"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "{\"lineno\":23,\"end_lineno\":299,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DiGraphRepository\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "{\"name\":\"DiGraphRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"pathname\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"root\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname", "target": "{\"name\":\"pathname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pathname\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo", "target": "{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root", "target": "{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:insert", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:insert", "target": "{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:json", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:json", "target": "{\"name\":\"json\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"json(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load", "target": "{\"name\":\"load\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(pathname: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load_from", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load_from", "target": "{\"name\":\"load_from\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"GraphRepository\",\"description\":\"GraphRepository\",\"compositions\":[\"GraphRepository\"]},\"description\":\"load_from(pathname: str \\\\| Path): GraphRepository\",\"aggregations\":[\"str\\\\\",\"GraphRepository\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:save", "target": "{\"name\":\"save\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:select", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:select", "target": "{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/project_repo.py", "target": "metagpt/utils/project_repo.py:DocFileRepositories"}, {"predicate": "has_class", "source": "metagpt/utils/project_repo.py", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "has_class", "source": "metagpt/utils/project_repo.py", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "{\"name\":\"DocFileRepositories\",\"package\":\"metagpt/utils/project_repo.py:DocFileRepositories\",\"attributes\":{\"class_view\":{\"name\":\"class_view\",\"type_\":\"\",\"default_\":\"\",\"description\":\"class_view\",\"compositions\":[]},\"code_plan_and_change\":{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]},\"code_summary\":{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]},\"graph_repo\":{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},\"system_design\":{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]},\"task\":{\"name\":\"task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:class_view"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:code_plan_and_change"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:code_summary"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:graph_repo"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:prd"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:system_design"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:task"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/file_repository.py:FileRepository"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:ProjectRepo:docs"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "{\"lineno\":42,\"end_lineno\":60,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocFileRepositories\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "{\"name\":\"DocFileRepositories\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"class_view\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_summary\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"system_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:class_view", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:class_view", "target": "{\"name\":\"class_view\",\"type_\":\"\",\"default_\":\"\",\"description\":\"class_view\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:code_plan_and_change", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:code_plan_and_change", "target": "{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:code_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:code_summary", "target": "{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:graph_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:graph_repo", "target": "{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:prd", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:prd", "target": "{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:system_design", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:system_design", "target": "{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:task", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:task", "target": "{\"name\":\"task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/pycst.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:DocstringCollector"}, {"predicate": "has_class", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:DocstringTransformer"}, {"predicate": "has_function", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:get_docstring_statement"}, {"predicate": "has_function", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:has_decorator"}, {"predicate": "has_function", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:merge_docstring"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "{\"name\":\"DocstringCollector\",\"package\":\"metagpt/utils/pycst.py:DocstringCollector\",\"attributes\":{\"docstrings\":{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]},\"stack\":{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}},\"methods\":{\"leave_ClassDef\":{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_ClassDef(node: cst.ClassDef): None\",\"aggregations\":[\"cst.ClassDef\"]},\"leave_FunctionDef\":{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_FunctionDef(node: cst.FunctionDef): None\",\"aggregations\":[\"cst.FunctionDef\"]},\"leave_Module\":{\"name\":\"leave_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_Module(node: cst.Module): None\",\"aggregations\":[\"cst.Module\"]},\"visit_ClassDef\":{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"bool\\\\\",\"cst.ClassDef\"]},\"visit_FunctionDef\":{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]},\"visit_Module\":{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}},\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"],\"aggregations\":[\"cst.ClassDef\",\"cst.FunctionDef\",\"cst.Module\",\"bool\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:docstrings"}, {"predicate": "has_class_property", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:stack"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:leave_ClassDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:leave_FunctionDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:leave_Module"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:visit_ClassDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:visit_FunctionDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:visit_Module"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:..."}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:cst.SimpleStatementLine"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:tuple"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:cst.ClassDef"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:cst.FunctionDef"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:cst.Module"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:bool\\"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:_leave"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "{\"lineno\":60,\"end_lineno\":98,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringCollector\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "{\"name\":\"DocstringCollector\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstrings\",\"visibility\":\"+\",\"value_type\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_value\":\"\"},{\"name\":\"stack\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:docstrings", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:docstrings", "target": "{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:stack", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:stack", "target": "{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_ClassDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_ClassDef", "target": "{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_ClassDef(node: cst.ClassDef): None\",\"aggregations\":[\"cst.ClassDef\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_FunctionDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_FunctionDef", "target": "{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_FunctionDef(node: cst.FunctionDef): None\",\"aggregations\":[\"cst.FunctionDef\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_Module", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_Module", "target": "{\"name\":\"leave_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_Module(node: cst.Module): None\",\"aggregations\":[\"cst.Module\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_ClassDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_ClassDef", "target": "{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"bool\\\\\",\"cst.ClassDef\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_FunctionDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_FunctionDef", "target": "{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_Module", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_Module", "target": "{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/parse_docstring.py", "target": "metagpt/utils/parse_docstring.py:DocstringParser"}, {"predicate": "has_class", "source": "metagpt/utils/parse_docstring.py", "target": "metagpt/utils/parse_docstring.py:GoogleDocstringParser"}, {"predicate": "has_class", "source": "metagpt/utils/parse_docstring.py", "target": "metagpt/utils/parse_docstring.py:reSTDocstringParser"}, {"predicate": "has_function", "source": "metagpt/utils/parse_docstring.py", "target": "metagpt/utils/parse_docstring.py:remove_spaces"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "{\"name\":\"DocstringParser\",\"package\":\"metagpt/utils/parse_docstring.py:DocstringParser\",\"attributes\":{\"docstring\":{\"name\":\"docstring\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"docstring : str\",\"compositions\":[]}},\"methods\":{\"check_and_parse_default_value\":{\"name\":\"check_and_parse_default_value\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_default_value(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]},\"check_and_parse_enum\":{\"name\":\"check_and_parse_enum\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_enum(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]},\"check_and_parse_optional\":{\"name\":\"check_and_parse_optional\",\"args\":[{\"name\":\"param_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_optional(param_type: str): Tuple[bool, str]\",\"aggregations\":[]},\"parse_desc\":{\"name\":\"parse_desc\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_desc(): str\",\"aggregations\":[]},\"parse_params\":{\"name\":\"parse_params\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str,str]]\",\"description\":\"list[Tuple[str, str, str]]\",\"compositions\":[]},\"description\":\"parse_params(): list[Tuple[str, str, str]]\",\"aggregations\":[]},\"parse_returns\":{\"name\":\"parse_returns\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str]]\",\"description\":\"list[Tuple[str, str]]\",\"compositions\":[]},\"description\":\"parse_returns(): list[Tuple[str, str]]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "metagpt/utils/parse_docstring.py:DocstringParser:docstring"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_default_value"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_enum"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_optional"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "metagpt/utils/parse_docstring.py:DocstringParser:parse_desc"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "metagpt/utils/parse_docstring.py:DocstringParser:parse_params"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "metagpt/utils/parse_docstring.py:DocstringParser:parse_returns"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "{\"lineno\":11,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/parse_docstring.py:DocstringParser", "target": "{\"name\":\"DocstringParser\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstring\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:DocstringParser:docstring", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:DocstringParser:docstring", "target": "{\"name\":\"docstring\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"docstring : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_default_value", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_default_value", "target": "{\"name\":\"check_and_parse_default_value\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_default_value(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_enum", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_enum", "target": "{\"name\":\"check_and_parse_enum\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_enum(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_optional", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:DocstringParser:check_and_parse_optional", "target": "{\"name\":\"check_and_parse_optional\",\"args\":[{\"name\":\"param_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_optional(param_type: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:DocstringParser:parse_desc", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:DocstringParser:parse_desc", "target": "{\"name\":\"parse_desc\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_desc(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:DocstringParser:parse_params", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:DocstringParser:parse_params", "target": "{\"name\":\"parse_params\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str,str]]\",\"description\":\"list[Tuple[str, str, str]]\",\"compositions\":[]},\"description\":\"parse_params(): list[Tuple[str, str, str]]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:DocstringParser:parse_returns", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:DocstringParser:parse_returns", "target": "{\"name\":\"parse_returns\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str]]\",\"description\":\"list[Tuple[str, str]]\",\"compositions\":[]},\"description\":\"parse_returns(): list[Tuple[str, str]]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "{\"name\":\"DocstringTransformer\",\"package\":\"metagpt/utils/pycst.py:DocstringTransformer\",\"attributes\":{\"docstrings\":{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]},\"stack\":{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}},\"methods\":{\"leave_ClassDef\":{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"original_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"updated_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_ClassDef(original_node: cst.ClassDef, updated_node: cst.ClassDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.ClassDef\"]},\"leave_FunctionDef\":{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"original_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"updated_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_FunctionDef(original_node: cst.FunctionDef, updated_node: cst.FunctionDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.FunctionDef\"]},\"leave_Module\":{\"name\":\"leave_Module\",\"args\":[{\"name\":\"original_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"original_node: Module\",\"compositions\":[\"Module\"]},{\"name\":\"updated_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"updated_node: Module\",\"compositions\":[\"Module\"]}],\"return_args\":{\"type_\":\"Module\",\"description\":\"Module\",\"compositions\":[\"Module\"]},\"description\":\"leave_Module(original_node: Module, updated_node: Module): Module\",\"aggregations\":[\"Module\"]},\"visit_ClassDef\":{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"bool\\\\\",\"cst.ClassDef\"]},\"visit_FunctionDef\":{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]},\"visit_Module\":{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}},\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"],\"aggregations\":[\"cst.CSTNode\",\"cst.ClassDef\",\"cst.FunctionDef\",\"Module\",\"bool\\\\\",\"cst.Module\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:docstrings"}, {"predicate": "has_class_property", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:stack"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:leave_ClassDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:leave_FunctionDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:leave_Module"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:visit_ClassDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:visit_FunctionDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:visit_Module"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:..."}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.SimpleStatementLine"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:tuple"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.CSTNode"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.ClassDef"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.FunctionDef"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:Module"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:bool\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.Module"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:_leave"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "{\"lineno\":101,\"end_lineno\":156,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringTransformer\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "{\"name\":\"DocstringTransformer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstrings\",\"visibility\":\"+\",\"value_type\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_value\":\"\"},{\"name\":\"stack\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:docstrings", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:docstrings", "target": "{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:stack", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:stack", "target": "{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_ClassDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_ClassDef", "target": "{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"original_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"updated_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_ClassDef(original_node: cst.ClassDef, updated_node: cst.ClassDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.ClassDef\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_FunctionDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_FunctionDef", "target": "{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"original_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"updated_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_FunctionDef(original_node: cst.FunctionDef, updated_node: cst.FunctionDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.FunctionDef\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_Module", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_Module", "target": "{\"name\":\"leave_Module\",\"args\":[{\"name\":\"original_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"original_node: Module\",\"compositions\":[\"Module\"]},{\"name\":\"updated_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"updated_node: Module\",\"compositions\":[\"Module\"]}],\"return_args\":{\"type_\":\"Module\",\"description\":\"Module\",\"compositions\":[\"Module\"]},\"description\":\"leave_Module(original_node: Module, updated_node: Module): Module\",\"aggregations\":[\"Module\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_ClassDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_ClassDef", "target": "{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"bool\\\\\",\"cst.ClassDef\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_FunctionDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_FunctionDef", "target": "{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_Module", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_Module", "target": "{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/document.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:Document"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:DocumentStatus"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:IndexableDocument"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:Repo"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:RepoMetadata"}, {"predicate": "has_function", "source": "metagpt/document.py", "target": "metagpt/document.py:validate_cols"}, {"predicate": "has_function", "source": "metagpt/document.py", "target": "metagpt/document.py:read_data"}, {"predicate": "is", "source": "metagpt/document.py:Document", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document", "target": "{\"name\":\"Document\",\"package\":\"metagpt/document.py:Document\",\"attributes\":{\"author\":{\"name\":\"author\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"author : str\",\"compositions\":[]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]},\"reviews\":{\"name\":\"reviews\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"reviews : list\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}},\"methods\":{\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]},\"from_text\":{\"name\":\"from_text\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_text(text: str, path: Optional[Path])\",\"aggregations\":[\"Path\"]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"to_path\":{\"name\":\"to_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path(path: Optional[Path])\",\"aggregations\":[\"Path\"]}},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:author"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:content"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:name"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:path"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:reviews"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:status"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:from_path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:from_text"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:persist"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:to_path"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:Document", "target": "?:Path"}, {"predicate": "has_page_info", "source": "metagpt/document.py:Document", "target": "{\"lineno\":63,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Document\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:Document", "target": "{\"name\":\"Document\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"author\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"reviews\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:author", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:author", "target": "{\"name\":\"author\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"author : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:path", "target": "{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:reviews", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:reviews", "target": "{\"name\":\"reviews\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"reviews : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:status", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:status", "target": "{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:from_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:from_path", "target": "{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:from_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:from_text", "target": "{\"name\":\"from_text\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_text(text: str, path: Optional[Path])\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:to_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:to_path", "target": "{\"name\":\"to_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path(path: Optional[Path])\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document", "target": "{\"name\":\"Document\",\"package\":\"metagpt/schema.py:Document\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"root_path\":{\"name\":\"root_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"root_path : str\",\"compositions\":[]},\"root_relative_path\":{\"name\":\"root_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_relative_path\",\"compositions\":[]}},\"methods\":{\"get_meta\":{\"name\":\"get_meta\",\"args\":[],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"get_meta(): Document\",\"aggregations\":[\"Document\"]}},\"compositions\":[],\"aggregations\":[\"Document\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:content"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:root_path"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:root_relative_path"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:get_meta"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:Document", "target": "?:Document"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Document", "target": "metagpt/actions/write_code.py:WriteCode"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Document", "target": "metagpt/actions/write_code.py:WriteCode:i_context"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:CodingContext"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:CodingContext:code_doc"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:TestingContext"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:TestingContext:code_doc"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:__str__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:__repr__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:Document", "target": "{\"lineno\":126,\"end_lineno\":155,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Document\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:Document", "target": "{\"name\":\"Document\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"root_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"root_relative_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:root_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:root_path", "target": "{\"name\":\"root_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"root_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:root_relative_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:root_relative_path", "target": "{\"name\":\"root_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_relative_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:root_relative_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Document:get_meta", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:get_meta", "target": "{\"name\":\"get_meta\",\"args\":[],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"get_meta(): Document\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/document.py:DocumentStatus", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:DocumentStatus", "target": "{\"name\":\"DocumentStatus\",\"package\":\"metagpt/document.py:DocumentStatus\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:DocumentStatus", "target": "metagpt/document.py:DocumentStatus:name"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:DocumentStatus", "target": "metagpt/document.py:Document"}, {"predicate": "isCompositeOn", "source": "metagpt/document.py:DocumentStatus", "target": "metagpt/document.py:Document:status"}, {"predicate": "has_page_info", "source": "metagpt/document.py:DocumentStatus", "target": "{\"lineno\":54,\"end_lineno\":60,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocumentStatus\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:DocumentStatus", "target": "{\"name\":\"DocumentStatus\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:DocumentStatus:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:DocumentStatus:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Documents", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Documents", "target": "{\"name\":\"Documents\",\"package\":\"metagpt/schema.py:Documents\",\"attributes\":{\"docs\":{\"name\":\"docs\",\"type_\":\"Dict[str,Document]\",\"default_\":\"\",\"description\":\"docs : Dict[str, Document]\",\"compositions\":[\"Document\"]}},\"methods\":{\"from_iterable\":{\"name\":\"from_iterable\",\"args\":[{\"name\":\"documents\",\"type_\":\"Iterable[Document]\",\"default_\":\"\",\"description\":\"documents: Iterable[Document]\",\"compositions\":[\"Document\",\"Iterable\"]}],\"return_args\":{\"type_\":\"Documents\",\"description\":\"Documents\",\"compositions\":[\"Documents\"]},\"description\":\"from_iterable(documents: Iterable[Document]): Documents\",\"aggregations\":[\"Document\",\"Documents\",\"Iterable\"]},\"to_action_output\":{\"name\":\"to_action_output\",\"args\":[],\"return_args\":{\"type_\":\"'ActionOutput'\",\"description\":\"'ActionOutput'\",\"compositions\":[\"ActionOutput\"]},\"description\":\"to_action_output(): 'ActionOutput'\",\"aggregations\":[\"ActionOutput\"]}},\"compositions\":[\"Document\"],\"aggregations\":[\"Documents\",\"Iterable\",\"ActionOutput\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Documents", "target": "metagpt/schema.py:Documents:docs"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Documents", "target": "metagpt/schema.py:Documents:from_iterable"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Documents", "target": "metagpt/schema.py:Documents:to_action_output"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Documents", "target": "?:Document"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:Documents", "target": "?:Documents"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:Documents", "target": "?:Iterable"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:Documents", "target": "?:ActionOutput"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:Documents", "target": "{\"lineno\":158,\"end_lineno\":185,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Documents\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:Documents", "target": "{\"name\":\"Documents\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Documents:docs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Documents:docs", "target": "{\"name\":\"docs\",\"type_\":\"Dict[str,Document]\",\"default_\":\"\",\"description\":\"docs : Dict[str, Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Documents:from_iterable", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Documents:from_iterable", "target": "{\"name\":\"from_iterable\",\"args\":[{\"name\":\"documents\",\"type_\":\"Iterable[Document]\",\"default_\":\"\",\"description\":\"documents: Iterable[Document]\",\"compositions\":[\"Document\",\"Iterable\"]}],\"return_args\":{\"type_\":\"Documents\",\"description\":\"Documents\",\"compositions\":[\"Documents\"]},\"description\":\"from_iterable(documents: Iterable[Document]): Documents\",\"aggregations\":[\"Document\",\"Documents\",\"Iterable\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Documents:to_action_output", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Documents:to_action_output", "target": "{\"name\":\"to_action_output\",\"args\":[],\"return_args\":{\"type_\":\"'ActionOutput'\",\"description\":\"'ActionOutput'\",\"compositions\":[\"ActionOutput\"]},\"description\":\"to_action_output(): 'ActionOutput'\",\"aggregations\":[\"ActionOutput\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "{\"name\":\"DotClassAttribute\",\"package\":\"metagpt/repo_parser.py:DotClassAttribute\",\"attributes\":{\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"default_\":{\"name\":\"default_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_ : str\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"type_\":{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassAttribute'\",\"description\":\"'DotClassAttribute'\",\"compositions\":[\"DotClassAttribute\"]},\"description\":\"parse(v: str): 'DotClassAttribute'\",\"aggregations\":[\"DotClassAttribute\"]},\"parse_compositions\":{\"name\":\"parse_compositions\",\"args\":[{\"name\":\"types_part\",\"type_\":\"\",\"default_\":\"\",\"description\":\"types_part\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_compositions(types_part): List[str]\",\"aggregations\":[]},\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"DotClassAttribute\"]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:compositions"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:default_"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:description"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:name"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:type_"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:parse"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:parse_compositions"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:sort"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "?:DotClassAttribute"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:_split_literal"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "{\"lineno\":68,\"end_lineno\":226,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassAttribute\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "{\"name\":\"DotClassAttribute\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"default_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"type_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:compositions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:compositions", "target": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:default_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:default_", "target": "{\"name\":\"default_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:type_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:type_", "target": "{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:parse", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:parse", "target": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassAttribute'\",\"description\":\"'DotClassAttribute'\",\"compositions\":[\"DotClassAttribute\"]},\"description\":\"parse(v: str): 'DotClassAttribute'\",\"aggregations\":[\"DotClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:parse_compositions", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:parse_compositions", "target": "{\"name\":\"parse_compositions\",\"args\":[{\"name\":\"types_part\",\"type_\":\"\",\"default_\":\"\",\"description\":\"types_part\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_compositions(types_part): List[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:sort", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:sort", "target": "{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "{\"name\":\"DotClassInfo\",\"package\":\"metagpt/repo_parser.py:DotClassInfo\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"attributes\":{\"name\":\"attributes\",\"type_\":\"Dict[str,DotClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : Dict[str, DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]},\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"methods\":{\"name\":\"methods\",\"type_\":\"Dict[str,DotClassMethod]\",\"default_\":\"\",\"description\":\"methods : Dict[str, DotClassMethod]\",\"compositions\":[\"DotClassMethod\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"package\":{\"name\":\"package\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"package : Optional[str]\",\"compositions\":[]}},\"methods\":{\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[\"DotClassAttribute\",\"DotClassMethod\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:aggregations"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:attributes"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:compositions"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:methods"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:name"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:package"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:sort"}, {"predicate": "is_composite_of", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassAttribute"}, {"predicate": "is_composite_of", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassMethod"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "{\"lineno\":229,\"end_lineno\":262,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassInfo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "{\"name\":\"DotClassInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"attributes\",\"visibility\":\"+\",\"value_type\":\"Dict[str,DotClassAttribute]\",\"default_value\":\"\"},{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"methods\",\"visibility\":\"+\",\"value_type\":\"Dict[str,DotClassMethod]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"package\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "?:DotClassAttribute"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "?:DotClassMethod"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:aggregations", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:aggregations", "target": "{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:attributes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:attributes", "target": "{\"name\":\"attributes\",\"type_\":\"Dict[str,DotClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : Dict[str, DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:compositions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:compositions", "target": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:methods", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:methods", "target": "{\"name\":\"methods\",\"type_\":\"Dict[str,DotClassMethod]\",\"default_\":\"\",\"description\":\"methods : Dict[str, DotClassMethod]\",\"compositions\":[\"DotClassMethod\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:package", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:package", "target": "{\"name\":\"package\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"package : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:sort", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:sort", "target": "{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "{\"name\":\"DotClassMethod\",\"package\":\"metagpt/repo_parser.py:DotClassMethod\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"args\":{\"name\":\"args\",\"type_\":\"List[DotClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"return_args\":{\"name\":\"return_args\",\"type_\":\"Optional[DotReturn]\",\"default_\":\"\",\"description\":\"return_args : Optional[DotReturn]\",\"compositions\":[\"DotReturn\"]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassMethod'\",\"description\":\"'DotClassMethod'\",\"compositions\":[\"DotClassMethod\"]},\"description\":\"parse(v: str): 'DotClassMethod'\",\"aggregations\":[\"DotClassMethod\"]}},\"compositions\":[\"DotClassAttribute\",\"DotReturn\"],\"aggregations\":[\"DotClassMethod\"]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:aggregations"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:args"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:description"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:name"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:return_args"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:parse"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "?:DotClassMethod"}, {"predicate": "is_composite_of", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassAttribute"}, {"predicate": "is_composite_of", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotReturn"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:_parse_name"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:_parse_args"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "{\"lineno\":330,\"end_lineno\":419,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassMethod\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "{\"name\":\"DotClassMethod\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"List[DotClassAttribute]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"return_args\",\"visibility\":\"+\",\"value_type\":\"Optional[DotReturn]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "?:DotClassAttribute"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "?:DotReturn"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:aggregations", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:aggregations", "target": "{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:args", "target": "{\"name\":\"args\",\"type_\":\"List[DotClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:return_args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:return_args", "target": "{\"name\":\"return_args\",\"type_\":\"Optional[DotReturn]\",\"default_\":\"\",\"description\":\"return_args : Optional[DotReturn]\",\"compositions\":[\"DotReturn\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:parse", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:parse", "target": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassMethod'\",\"description\":\"'DotClassMethod'\",\"compositions\":[\"DotClassMethod\"]},\"description\":\"parse(v: str): 'DotClassMethod'\",\"aggregations\":[\"DotClassMethod\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "{\"name\":\"DotClassRelationship\",\"package\":\"metagpt/repo_parser.py:DotClassRelationship\",\"attributes\":{\"dest\":{\"name\":\"dest\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dest : str\",\"compositions\":[]},\"label\":{\"name\":\"label\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"label : Optional[str]\",\"compositions\":[]},\"relationship\":{\"name\":\"relationship\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"relationship : str\",\"compositions\":[]},\"src\":{\"name\":\"src\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"src : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "metagpt/repo_parser.py:DotClassRelationship:dest"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "metagpt/repo_parser.py:DotClassRelationship:label"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "metagpt/repo_parser.py:DotClassRelationship:relationship"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "metagpt/repo_parser.py:DotClassRelationship:src"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "{\"lineno\":265,\"end_lineno\":279,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassRelationship\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "{\"name\":\"DotClassRelationship\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"dest\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"label\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"relationship\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship:dest", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship:dest", "target": "{\"name\":\"dest\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dest : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship:label", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship:label", "target": "{\"name\":\"label\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"label : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship:relationship", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship:relationship", "target": "{\"name\":\"relationship\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"relationship : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship:src", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship:src", "target": "{\"name\":\"src\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"src : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn", "target": "{\"name\":\"DotReturn\",\"package\":\"metagpt/repo_parser.py:DotReturn\",\"attributes\":{\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"type_\":{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotReturn'\\\\|None\",\"description\":\"'DotReturn' \\\\| None\",\"compositions\":[\"DotReturn\\\\\"]},\"description\":\"parse(v: str): 'DotReturn' \\\\| None\",\"aggregations\":[\"DotReturn\\\\\"]},\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"DotReturn\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:compositions"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:description"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:type_"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:parse"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:sort"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:DotReturn", "target": "?:DotReturn\\"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotReturn", "target": "{\"lineno\":282,\"end_lineno\":327,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotReturn\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotReturn", "target": "{\"name\":\"DotReturn\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"type_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:compositions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:compositions", "target": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:type_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:type_", "target": "{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:parse", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:parse", "target": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotReturn'\\\\|None\",\"description\":\"'DotReturn' \\\\| None\",\"compositions\":[\"DotReturn\\\\\"]},\"description\":\"parse(v: str): 'DotReturn' \\\\| None\",\"aggregations\":[\"DotReturn\\\\\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:sort", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:sort", "target": "{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "{\"name\":\"Embedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:Embedding\",\"attributes\":{\"embedding\":{\"name\":\"embedding\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"embedding : List[float]\",\"compositions\":[]},\"index\":{\"name\":\"index\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"index : int\",\"compositions\":[]},\"object\":{\"name\":\"object\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding:embedding"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding:index"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding:object"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "{\"lineno\":19,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Embedding\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "{\"name\":\"Embedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"List[float]\",\"default_value\":\"\"},{\"name\":\"index\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"object\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:embedding", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:embedding", "target": "{\"name\":\"embedding\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"embedding : List[float]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:index", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:index", "target": "{\"name\":\"index\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"index : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:object", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:object", "target": "{\"name\":\"object\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/engineer.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/engineer.py", "target": "metagpt/roles/engineer.py:Engineer"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer", "target": "{\"name\":\"Engineer\",\"package\":\"metagpt/roles/engineer.py:Engineer\",\"attributes\":{\"action_description\":{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]},\"code_todos\":{\"name\":\"code_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"code_todos : list\",\"compositions\":[]},\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"n_borg\":{\"name\":\"n_borg\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_borg : int\",\"compositions\":[]},\"n_summarize\":{\"name\":\"n_summarize\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_summarize : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"next_todo_action\":{\"name\":\"next_todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"next_todo_action : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]},\"summarize_todos\":{\"name\":\"summarize_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"summarize_todos : list\",\"compositions\":[]},\"use_code_review\":{\"name\":\"use_code_review\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_code_review : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:action_description"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:code_todos"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:n_borg"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:n_summarize"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:next_todo_action"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:src_workspace"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:summarize_todos"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:use_code_review"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_parse_tasks"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act_sp_with_cr"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act_write_code"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act_summarize"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act_code_plan_and_change"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_is_pass"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_coding_context"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_coding_doc"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_code_actions"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_summarize_actions"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_code_plan_and_change_action"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:Engineer", "target": "{\"lineno\":60,\"end_lineno\":386,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Engineer\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/engineer.py:Engineer", "target": "{\"name\":\"Engineer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"action_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_todos\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_borg\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_summarize\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"next_todo_action\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"summarize_todos\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"use_code_review\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:action_description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:action_description", "target": "{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:action_description", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:code_todos", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:code_todos", "target": "{\"name\":\"code_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"code_todos : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:n_borg", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:n_borg", "target": "{\"name\":\"n_borg\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_borg : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:n_summarize", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:n_summarize", "target": "{\"name\":\"n_summarize\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_summarize : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:next_todo_action", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:next_todo_action", "target": "{\"name\":\"next_todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"next_todo_action : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:src_workspace", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:src_workspace", "target": "{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:summarize_todos", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:summarize_todos", "target": "{\"name\":\"summarize_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"summarize_todos : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:use_code_review", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:use_code_review", "target": "{\"name\":\"use_code_review\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_code_review : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "{\"name\":\"EnronTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:EnronTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"subj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen(subj)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "metagpt/tools/prompt_writer.py:EnronTemplate:gen"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "metagpt/tools/prompt_writer.py:EnronTemplate:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "{\"lineno\":77,\"end_lineno\":92,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnronTemplate\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "{\"name\":\"EnronTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:EnronTemplate:gen", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:EnronTemplate:gen", "target": "{\"name\":\"gen\",\"args\":[{\"name\":\"subj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen(subj)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Entity", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Entity", "target": "{\"name\":\"Entity\",\"package\":\"metagpt/learn/skill_loader.py:Entity\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"name : Optional[str]\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"List[Skill]\",\"default_\":\"\",\"description\":\"skills : List[Skill]\",\"compositions\":[\"Skill\"]}},\"methods\":{},\"compositions\":[\"Skill\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Entity", "target": "metagpt/learn/skill_loader.py:Entity:name"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Entity", "target": "metagpt/learn/skill_loader.py:Entity:skills"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:Entity", "target": "metagpt/learn/skill_loader.py:Skill"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Entity", "target": "{\"lineno\":53,\"end_lineno\":55,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Entity\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Entity", "target": "{\"name\":\"Entity\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"List[Skill]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Entity", "target": "?:Skill"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Entity:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Entity:name", "target": "{\"name\":\"name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"name : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Entity:skills", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Entity:skills", "target": "{\"name\":\"skills\",\"type_\":\"List[Skill]\",\"default_\":\"\",\"description\":\"skills : List[Skill]\",\"compositions\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/api/env_api.py", "target": "metagpt/environment/api/env_api.py:EnvAPIAbstract"}, {"predicate": "has_class", "source": "metagpt/environment/api/env_api.py", "target": "metagpt/environment/api/env_api.py:EnvAPIRegistry"}, {"predicate": "has_class", "source": "metagpt/environment/api/env_api.py", "target": "metagpt/environment/api/env_api.py:ReadAPIRegistry"}, {"predicate": "has_class", "source": "metagpt/environment/api/env_api.py", "target": "metagpt/environment/api/env_api.py:WriteAPIRegistry"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract", "target": "{\"name\":\"EnvAPIAbstract\",\"package\":\"metagpt/environment/api/env_api.py:EnvAPIAbstract\",\"attributes\":{\"api_name\":{\"name\":\"api_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_name : str\",\"compositions\":[]},\"args\":{\"name\":\"args\",\"type_\":\"set\",\"default_\":\"\",\"description\":\"args : set\",\"compositions\":[]},\"kwargs\":{\"name\":\"kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"kwargs : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract", "target": "metagpt/environment/api/env_api.py:EnvAPIAbstract:api_name"}, {"predicate": "has_class_property", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract", "target": "metagpt/environment/api/env_api.py:EnvAPIAbstract:args"}, {"predicate": "has_class_property", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract", "target": "metagpt/environment/api/env_api.py:EnvAPIAbstract:kwargs"}, {"predicate": "has_page_info", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract", "target": "{\"lineno\":10,\"end_lineno\":15,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnvAPIAbstract\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract", "target": "{\"name\":\"EnvAPIAbstract\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"set\",\"default_value\":\"\"},{\"name\":\"kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract:api_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract:api_name", "target": "{\"name\":\"api_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract:args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract:args", "target": "{\"name\":\"args\",\"type_\":\"set\",\"default_\":\"\",\"description\":\"args : set\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract:kwargs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:EnvAPIAbstract:kwargs", "target": "{\"name\":\"kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"kwargs : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "{\"name\":\"EnvAPIRegistry\",\"package\":\"metagpt/environment/api/env_api.py:EnvAPIRegistry\",\"attributes\":{\"registry\":{\"name\":\"registry\",\"type_\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"default_\":\"\",\"description\":\"registry : dict[str, dict[str, Union[dict, Any, str]]]\",\"compositions\":[]}},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"api_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(api_name: str)\",\"aggregations\":[]},\"get_apis\":{\"name\":\"get_apis\",\"args\":[{\"name\":\"as_str\",\"type_\":\"\",\"default_\":\"\",\"description\":\"as_str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"description\":\"dict[str, dict[str, Union[dict, Any, str]]]\",\"compositions\":[]},\"description\":\"get_apis(as_str): dict[str, dict[str, Union[dict, Any, str]]]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "metagpt/environment/api/env_api.py:EnvAPIRegistry:registry"}, {"predicate": "has_class_method", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "metagpt/environment/api/env_api.py:EnvAPIRegistry:get"}, {"predicate": "has_class_method", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "metagpt/environment/api/env_api.py:EnvAPIRegistry:get_apis"}, {"predicate": "has_class_method", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "metagpt/environment/api/env_api.py:EnvAPIRegistry:__getitem__"}, {"predicate": "has_class_method", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "metagpt/environment/api/env_api.py:EnvAPIRegistry:__setitem__"}, {"predicate": "has_class_method", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "metagpt/environment/api/env_api.py:EnvAPIRegistry:__len__"}, {"predicate": "has_page_info", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "{\"lineno\":18,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnvAPIRegistry\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry", "target": "{\"name\":\"EnvAPIRegistry\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"registry\",\"visibility\":\"+\",\"value_type\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry:registry", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry:registry", "target": "{\"name\":\"registry\",\"type_\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"default_\":\"\",\"description\":\"registry : dict[str, dict[str, Union[dict, Any, str]]]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"api_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(api_name: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry:get_apis", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry:get_apis", "target": "{\"name\":\"get_apis\",\"args\":[{\"name\":\"as_str\",\"type_\":\"\",\"default_\":\"\",\"description\":\"as_str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,dict[str,Union[dict,Any,str]]]\",\"description\":\"dict[str, dict[str, Union[dict, Any, str]]]\",\"compositions\":[]},\"description\":\"get_apis(as_str): dict[str, dict[str, Union[dict, Any, str]]]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/base_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/base_env.py", "target": "metagpt/environment/base_env.py:EnvType"}, {"predicate": "has_class", "source": "metagpt/environment/base_env.py", "target": "metagpt/environment/base_env.py:Environment"}, {"predicate": "has_class", "source": "metagpt/environment/base_env.py", "target": "metagpt/environment/base_env.py:ExtEnv"}, {"predicate": "has_function", "source": "metagpt/environment/base_env.py", "target": "metagpt/environment/base_env.py:mark_as_readable"}, {"predicate": "has_function", "source": "metagpt/environment/base_env.py", "target": "metagpt/environment/base_env.py:mark_as_writeable"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:EnvType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:EnvType", "target": "{\"name\":\"EnvType\",\"package\":\"metagpt/environment/base_env.py:EnvType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/base_env.py:EnvType", "target": "metagpt/environment/base_env.py:EnvType:name"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:EnvType", "target": "{\"lineno\":25,\"end_lineno\":30,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnvType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/base_env.py:EnvType", "target": "{\"name\":\"EnvType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:EnvType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:EnvType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment", "target": "{\"name\":\"Environment\",\"package\":\"metagpt/environment/base_env.py:Environment\",\"attributes\":{\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history : str\",\"compositions\":[]},\"is_idle\":{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]},\"member_addrs\":{\"name\":\"member_addrs\",\"type_\":\"Dict[Role,Set]\",\"default_\":\"\",\"description\":\"member_addrs : Dict['Role', Set]\",\"compositions\":[\"Role\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"roles\":{\"name\":\"roles\",\"type_\":\"dict[str,SerializeAsAny[Role]]\",\"default_\":\"\",\"description\":\"roles : dict[str, SerializeAsAny['Role']]\",\"compositions\":[\"Role\",\"SerializeAsAny\"]}},\"methods\":{\"add_role\":{\"name\":\"add_role\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: 'Role'\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_role(role: 'Role')\",\"aggregations\":[\"Role\"]},\"add_roles\":{\"name\":\"add_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Role]\",\"default_\":\"\",\"description\":\"roles: Iterable['Role']\",\"compositions\":[\"Iterable\",\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_roles(roles: Iterable['Role'])\",\"aggregations\":[\"Role\",\"Iterable\"]},\"archive\":{\"name\":\"archive\",\"args\":[{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(auto_archive)\",\"aggregations\":[]},\"get_addresses\":{\"name\":\"get_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_addresses(obj)\",\"aggregations\":[]},\"get_role\":{\"name\":\"get_role\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'Role'\",\"description\":\"'Role'\",\"compositions\":[\"Role\"]},\"description\":\"get_role(name: str): 'Role'\",\"aggregations\":[\"Role\"]},\"get_roles\":{\"name\":\"get_roles\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,'Role']\",\"description\":\"dict[str, 'Role']\",\"compositions\":[\"Role\"]},\"description\":\"get_roles(): dict[str, 'Role']\",\"aggregations\":[\"Role\"]},\"init_roles\":{\"name\":\"init_roles\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_roles()\",\"aggregations\":[]},\"model_rebuild\":{\"name\":\"model_rebuild\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"model_rebuild()\",\"aggregations\":[]},\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"peekable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"peekable: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"publish_message(message: Message, peekable: bool): bool\",\"aggregations\":[\"Message\"]},\"role_names\":{\"name\":\"role_names\",\"args\":[],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"role_names(): list[str]\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]},\"set_addresses\":{\"name\":\"set_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]},{\"name\":\"addresses\",\"type_\":\"\",\"default_\":\"\",\"description\":\"addresses\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(obj, addresses)\",\"aggregations\":[]}},\"compositions\":[\"Role\",\"SerializeAsAny\"],\"aggregations\":[\"Iterable\",\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:context"}, {"predicate": "has_class_property", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:desc"}, {"predicate": "has_class_property", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:history"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:is_idle"}, {"predicate": "has_class_property", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:member_addrs"}, {"predicate": "has_class_property", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:model_config"}, {"predicate": "has_class_property", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:roles"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:add_role"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:add_roles"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:archive"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:get_addresses"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:get_role"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:get_roles"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:init_roles"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:model_rebuild"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:publish_message"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:role_names"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:run"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:Environment:set_addresses"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/base_env.py:Environment", "target": "?:SerializeAsAny"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/base_env.py:Environment", "target": "?:Iterable"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/base_env.py:Environment", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/environment/base_env.py:ExtEnv"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/team.py:Team"}, {"predicate": "isCompositeOn", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/team.py:Team:env"}, {"predicate": "is_composite_of", "source": "metagpt/environment/base_env.py:Environment", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:Environment", "target": "{\"lineno\":98,\"end_lineno\":209,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Environment\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/base_env.py:Environment", "target": "{\"name\":\"Environment\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_idle\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"member_addrs\",\"visibility\":\"+\",\"value_type\":\"Dict[Role,Set]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"roles\",\"visibility\":\"+\",\"value_type\":\"dict[str,SerializeAsAny[Role]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/base_env.py:Environment", "target": "?:Role"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:context", "target": "{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:history", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:history", "target": "{\"name\":\"history\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:is_idle", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:is_idle", "target": "{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:is_idle", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:member_addrs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:member_addrs", "target": "{\"name\":\"member_addrs\",\"type_\":\"Dict[Role,Set]\",\"default_\":\"\",\"description\":\"member_addrs : Dict['Role', Set]\",\"compositions\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:roles", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:roles", "target": "{\"name\":\"roles\",\"type_\":\"dict[str,SerializeAsAny[Role]]\",\"default_\":\"\",\"description\":\"roles : dict[str, SerializeAsAny['Role']]\",\"compositions\":[\"Role\",\"SerializeAsAny\"]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:add_role", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:add_role", "target": "{\"name\":\"add_role\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: 'Role'\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_role(role: 'Role')\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:add_roles", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:add_roles", "target": "{\"name\":\"add_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Role]\",\"default_\":\"\",\"description\":\"roles: Iterable['Role']\",\"compositions\":[\"Iterable\",\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_roles(roles: Iterable['Role'])\",\"aggregations\":[\"Role\",\"Iterable\"]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:archive", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:archive", "target": "{\"name\":\"archive\",\"args\":[{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(auto_archive)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:get_addresses", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:get_addresses", "target": "{\"name\":\"get_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_addresses(obj)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:get_role", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:get_role", "target": "{\"name\":\"get_role\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'Role'\",\"description\":\"'Role'\",\"compositions\":[\"Role\"]},\"description\":\"get_role(name: str): 'Role'\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:get_roles", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:get_roles", "target": "{\"name\":\"get_roles\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,'Role']\",\"description\":\"dict[str, 'Role']\",\"compositions\":[\"Role\"]},\"description\":\"get_roles(): dict[str, 'Role']\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:init_roles", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:init_roles", "target": "{\"name\":\"init_roles\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_roles()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:model_rebuild", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:model_rebuild", "target": "{\"name\":\"model_rebuild\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"model_rebuild()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:publish_message", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:publish_message", "target": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"peekable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"peekable: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"publish_message(message: Message, peekable: bool): bool\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:role_names", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:role_names", "target": "{\"name\":\"role_names\",\"args\":[],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"role_names(): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:Environment:set_addresses", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:Environment:set_addresses", "target": "{\"name\":\"set_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]},{\"name\":\"addresses\",\"type_\":\"\",\"default_\":\"\",\"description\":\"addresses\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(obj, addresses)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Example", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Example", "target": "{\"name\":\"Example\",\"package\":\"metagpt/learn/skill_loader.py:Example\",\"attributes\":{\"answer\":{\"name\":\"answer\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"answer : str\",\"compositions\":[]},\"ask\":{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Example", "target": "metagpt/learn/skill_loader.py:Example:answer"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Example", "target": "metagpt/learn/skill_loader.py:Example:ask"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Example", "target": "{\"lineno\":19,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Example\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Example", "target": "{\"name\":\"Example\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"answer\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ask\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Example:answer", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Example:answer", "target": "{\"name\":\"answer\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"answer : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Example:ask", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Example:ask", "target": "{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/execute_task.py", "target": "metagpt/actions/execute_task.py:ExecuteTask"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "{\"name\":\"ExecuteTask\",\"package\":\"metagpt/actions/execute_task.py:ExecuteTask\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"i_context : list[Message]\",\"compositions\":[\"Message\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/actions/execute_task.py:ExecuteTask:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/actions/execute_task.py:ExecuteTask:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/actions/execute_task.py:ExecuteTask:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "{\"lineno\":14,\"end_lineno\":19,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExecuteTask\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "{\"name\":\"ExecuteTask\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"list[Message]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py:ExecuteTask:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/execute_task.py:ExecuteTask:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"i_context : list[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py:ExecuteTask:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/execute_task.py:ExecuteTask:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py:ExecuteTask:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/execute_task.py:ExecuteTask:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "{\"name\":\"ExtEnv\",\"package\":\"metagpt/environment/base_env.py:ExtEnv\",\"attributes\":{},\"methods\":{\"get_all_available_apis\":{\"name\":\"get_all_available_apis\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Any]\",\"description\":\"list[Any]\",\"compositions\":[]},\"description\":\"get_all_available_apis(mode: str): list[Any]\",\"aggregations\":[]},\"observe\":{\"name\":\"observe\",\"args\":[{\"name\":\"env_action\",\"type_\":\"Union[str,EnvAPIAbstract]\",\"default_\":\"\",\"description\":\"env_action: Union[str, EnvAPIAbstract]\",\"compositions\":[\"EnvAPIAbstract\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"observe(env_action: Union[str, EnvAPIAbstract])\",\"aggregations\":[\"EnvAPIAbstract\"]},\"step\":{\"name\":\"step\",\"args\":[{\"name\":\"env_action\",\"type_\":\"Union[str,Message,EnvAPIAbstract,list[EnvAPIAbstract]]\",\"default_\":\"\",\"description\":\"env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]]\",\"compositions\":[\"EnvAPIAbstract\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"step(env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]])\",\"aggregations\":[\"Message\",\"EnvAPIAbstract\"]}},\"compositions\":[],\"aggregations\":[\"EnvAPIAbstract\",\"Message\"]}"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "metagpt/environment/base_env.py:ExtEnv:get_all_available_apis"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "metagpt/environment/base_env.py:ExtEnv:observe"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "metagpt/environment/base_env.py:ExtEnv:step"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "?:EnvAPIAbstract"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "?:Message"}, {"predicate": "has_class_method", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "metagpt/environment/base_env.py:ExtEnv:_check_api_exist"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "{\"lineno\":49,\"end_lineno\":95,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExtEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/base_env.py:ExtEnv", "target": "{\"name\":\"ExtEnv\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:ExtEnv:get_all_available_apis", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:ExtEnv:get_all_available_apis", "target": "{\"name\":\"get_all_available_apis\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Any]\",\"description\":\"list[Any]\",\"compositions\":[]},\"description\":\"get_all_available_apis(mode: str): list[Any]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:ExtEnv:observe", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:ExtEnv:observe", "target": "{\"name\":\"observe\",\"args\":[{\"name\":\"env_action\",\"type_\":\"Union[str,EnvAPIAbstract]\",\"default_\":\"\",\"description\":\"env_action: Union[str, EnvAPIAbstract]\",\"compositions\":[\"EnvAPIAbstract\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"observe(env_action: Union[str, EnvAPIAbstract])\",\"aggregations\":[\"EnvAPIAbstract\"]}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:ExtEnv:step", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/base_env.py:ExtEnv:step", "target": "{\"name\":\"step\",\"args\":[{\"name\":\"env_action\",\"type_\":\"Union[str,Message,EnvAPIAbstract,list[EnvAPIAbstract]]\",\"default_\":\"\",\"description\":\"env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]]\",\"compositions\":[\"EnvAPIAbstract\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"step(env_action: Union[str, Message, EnvAPIAbstract, list[EnvAPIAbstract]])\",\"aggregations\":[\"Message\",\"EnvAPIAbstract\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "{\"name\":\"ExtractTimeComps\",\"package\":\"metagpt/tools/libs/feature_engineering.py:ExtractTimeComps\",\"attributes\":{\"time_col\":{\"name\":\"time_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"time_col : str\",\"compositions\":[]},\"time_comps\":{\"name\":\"time_comps\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"time_comps : list\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:time_col"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:time_comps"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "{\"lineno\":280,\"end_lineno\":316,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExtractTimeComps\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps", "target": "{\"name\":\"ExtractTimeComps\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"time_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"time_comps\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:time_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:time_col", "target": "{\"name\":\"time_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"time_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:time_comps", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:time_comps", "target": "{\"name\":\"time_comps\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"time_comps : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/faiss_store.py", "target": "metagpt/document_store/faiss_store.py:FaissStore"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "{\"name\":\"FaissStore\",\"package\":\"metagpt/document_store/faiss_store.py:FaissStore\",\"attributes\":{\"content_col\":{\"name\":\"content_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content_col : str\",\"compositions\":[]},\"embedding\":{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]},\"meta_col\":{\"name\":\"meta_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"meta_col : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"texts\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"texts: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"add(texts: list[str]): list[str]\",\"aggregations\":[]},\"asearch\":{\"name\":\"asearch\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"asearch()\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete()\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"expand_cols\",\"type_\":\"\",\"default_\":\"\",\"description\":\"expand_cols\",\"compositions\":[]},{\"name\":\"sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, expand_cols, sep)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[\"OpenAIEmbeddings\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:content_col"}, {"predicate": "has_class_property", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:embedding"}, {"predicate": "has_class_property", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:meta_col"}, {"predicate": "has_class_property", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:store"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:asearch"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:delete"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:persist"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:write"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "?:OpenAIEmbeddings"}, {"predicate": "isGeneralizeOf", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/base_store.py:LocalStore"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:__init__"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:_load"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:_write"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "{\"lineno\":21,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FaissStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "{\"name\":\"FaissStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"OpenAIEmbeddings\",\"default_value\":\"\"},{\"name\":\"meta_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:content_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:content_col", "target": "{\"name\":\"content_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:embedding", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:embedding", "target": "{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:meta_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:meta_col", "target": "{\"name\":\"meta_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"meta_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:store", "target": "{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"texts\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"texts: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"add(texts: list[str]): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:asearch", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:asearch", "target": "{\"name\":\"asearch\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"asearch()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:delete", "target": "{\"name\":\"delete\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"expand_cols\",\"type_\":\"\",\"default_\":\"\",\"description\":\"expand_cols\",\"compositions\":[]},{\"name\":\"sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, expand_cols, sep)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:write", "target": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/file.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/file.py", "target": "metagpt/utils/file.py:File"}, {"predicate": "is", "source": "metagpt/utils/file.py:File", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/file.py:File", "target": "{\"name\":\"File\",\"package\":\"metagpt/utils/file.py:File\",\"attributes\":{\"CHUNK_SIZE\":{\"name\":\"CHUNK_SIZE\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"CHUNK_SIZE : int\",\"compositions\":[]}},\"methods\":{\"read\":{\"name\":\"read\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"chunk_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"chunk_size: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"read(file_path: Path, chunk_size: int): bytes\",\"aggregations\":[\"Path\",\"bytes\"]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"root_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"root_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"bytes\",\"default_\":\"\",\"description\":\"content: bytes\",\"compositions\":[\"bytes\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"write(root_path: Path, filename: str, content: bytes): Path\",\"aggregations\":[\"Path\",\"bytes\"]}},\"compositions\":[],\"aggregations\":[\"Path\",\"bytes\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/file.py:File", "target": "metagpt/utils/file.py:File:CHUNK_SIZE"}, {"predicate": "has_class_method", "source": "metagpt/utils/file.py:File", "target": "metagpt/utils/file.py:File:read"}, {"predicate": "has_class_method", "source": "metagpt/utils/file.py:File", "target": "metagpt/utils/file.py:File:write"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file.py:File", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file.py:File", "target": "?:bytes"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:File", "target": "{\"lineno\":17,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"File\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/file.py:File", "target": "{\"name\":\"File\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"CHUNK_SIZE\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file.py:File:CHUNK_SIZE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file.py:File:CHUNK_SIZE", "target": "{\"name\":\"CHUNK_SIZE\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"CHUNK_SIZE : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file.py:File:read", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file.py:File:read", "target": "{\"name\":\"read\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"chunk_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"chunk_size: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"read(file_path: Path, chunk_size: int): bytes\",\"aggregations\":[\"Path\",\"bytes\"]}"}, {"predicate": "is", "source": "metagpt/utils/file.py:File:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file.py:File:write", "target": "{\"name\":\"write\",\"args\":[{\"name\":\"root_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"root_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"bytes\",\"default_\":\"\",\"description\":\"content: bytes\",\"compositions\":[\"bytes\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"write(root_path: Path, filename: str, content: bytes): Path\",\"aggregations\":[\"Path\",\"bytes\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/file_repository.py", "target": "metagpt/utils/file_repository.py:FileRepository"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "{\"name\":\"FileRepository\",\"package\":\"metagpt/utils/file_repository.py:FileRepository\",\"attributes\":{\"all_files\":{\"name\":\"all_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_files\",\"compositions\":[]},\"changed_files\":{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]},\"root_path\":{\"name\":\"root_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_path\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(filename: Path \\\\| str)\",\"aggregations\":[\"Path\\\\\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Document\\\\|None\",\"description\":\"Document \\\\| None\",\"compositions\":[\"Document\\\\\"]},\"description\":\"get(filename: Path \\\\| str): Document \\\\| None\",\"aggregations\":[\"Path\\\\\",\"Document\\\\\"]},\"get_all\":{\"name\":\"get_all\",\"args\":[{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[Document]\",\"description\":\"List[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_all(filter_ignored): List[Document]\",\"aggregations\":[\"Document\"]},\"get_change_dir_files\":{\"name\":\"get_change_dir_files\",\"args\":[{\"name\":\"dir\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"dir: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_change_dir_files(dir: Path \\\\| str): List\",\"aggregations\":[\"Path\\\\\"]},\"get_changed_dependency\":{\"name\":\"get_changed_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_changed_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]},\"get_dependency\":{\"name\":\"get_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]},\"new_filename\":{\"name\":\"new_filename\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_filename()\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"save(filename: Path \\\\| str, content, dependencies: List[str]): Document\",\"aggregations\":[\"Document\",\"Path\\\\\"]},\"save_doc\":{\"name\":\"save_doc\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_doc(doc: Document, dependencies: List[str])\",\"aggregations\":[\"Document\"]},\"save_pdf\":{\"name\":\"save_pdf\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"with_suffix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"with_suffix: str\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_pdf(doc: Document, with_suffix: str, dependencies: List[str])\",\"aggregations\":[\"Document\"]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\",\"Document\\\\\",\"Document\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:all_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:changed_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:root_path"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:workdir"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:delete"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get_all"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get_change_dir_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get_changed_dependency"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get_dependency"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:new_filename"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:save"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:save_doc"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:save_pdf"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "?:Path\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "?:Document\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "?:Document"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo:tests"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "{\"lineno\":25,\"end_lineno\":240,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FileRepository\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "{\"name\":\"FileRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"all_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"changed_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"root_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:all_files", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:all_files", "target": "{\"name\":\"all_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_files\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:all_files", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:changed_files", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:changed_files", "target": "{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:changed_files", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:root_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:root_path", "target": "{\"name\":\"root_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:root_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:workdir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:workdir", "target": "{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:workdir", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(filename: Path \\\\| str)\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Document\\\\|None\",\"description\":\"Document \\\\| None\",\"compositions\":[\"Document\\\\\"]},\"description\":\"get(filename: Path \\\\| str): Document \\\\| None\",\"aggregations\":[\"Path\\\\\",\"Document\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get_all", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get_all", "target": "{\"name\":\"get_all\",\"args\":[{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[Document]\",\"description\":\"List[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_all(filter_ignored): List[Document]\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get_change_dir_files", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get_change_dir_files", "target": "{\"name\":\"get_change_dir_files\",\"args\":[{\"name\":\"dir\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"dir: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_change_dir_files(dir: Path \\\\| str): List\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get_changed_dependency", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get_changed_dependency", "target": "{\"name\":\"get_changed_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_changed_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get_dependency", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get_dependency", "target": "{\"name\":\"get_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:new_filename", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:new_filename", "target": "{\"name\":\"new_filename\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_filename()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:save", "target": "{\"name\":\"save\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"save(filename: Path \\\\| str, content, dependencies: List[str]): Document\",\"aggregations\":[\"Document\",\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:save_doc", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:save_doc", "target": "{\"name\":\"save_doc\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_doc(doc: Document, dependencies: List[str])\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:save_pdf", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:save_pdf", "target": "{\"name\":\"save_pdf\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"with_suffix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"with_suffix: str\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_pdf(doc: Document, with_suffix: str, dependencies: List[str])\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue", "target": "{\"name\":\"FillMissingValue\",\"package\":\"metagpt/tools/libs/data_preprocess.py:FillMissingValue\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"SimpleImputer\",\"default_\":\"\",\"description\":\"model : SimpleImputer\",\"compositions\":[\"SimpleImputer\"]}},\"methods\":{},\"compositions\":[\"SimpleImputer\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue", "target": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:features"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue", "target": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:model"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue", "target": "?:SimpleImputer"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue", "target": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue", "target": "{\"lineno\":89,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FillMissingValue\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue", "target": "{\"name\":\"FillMissingValue\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"SimpleImputer\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:features", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:features", "target": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:model", "target": "{\"name\":\"model\",\"type_\":\"SimpleImputer\",\"default_\":\"\",\"description\":\"model : SimpleImputer\",\"compositions\":[\"SimpleImputer\"]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/fireworks_api.py", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager"}, {"predicate": "has_class", "source": "metagpt/provider/fireworks_api.py", "target": "metagpt/provider/fireworks_api.py:FireworksLLM"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "{\"name\":\"FireworksCostManager\",\"package\":\"metagpt/provider/fireworks_api.py:FireworksCostManager\",\"attributes\":{\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_cost\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{\"model_grade_token_costs\":{\"name\":\"model_grade_token_costs\",\"args\":[{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,float]\",\"description\":\"dict[str, float]\",\"compositions\":[]},\"description\":\"model_grade_token_costs(model: str): dict[str, float]\",\"aggregations\":[]},\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens: int\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"completion_tokens: int\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens: int, completion_tokens: int, model: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_completion_tokens"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_cost"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_prompt_tokens"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:model_grade_token_costs"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:update_cost"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "{\"lineno\":32,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FireworksCostManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "{\"name\":\"FireworksCostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_completion_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_completion_tokens", "target": "{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_cost", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_cost", "target": "{\"name\":\"total_cost\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_cost\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_prompt_tokens", "target": "{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:model_grade_token_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:model_grade_token_costs", "target": "{\"name\":\"model_grade_token_costs\",\"args\":[{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,float]\",\"description\":\"dict[str, float]\",\"compositions\":[]},\"description\":\"model_grade_token_costs(model: str): dict[str, float]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:update_cost", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:update_cost", "target": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens: int\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"completion_tokens: int\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens: int, completion_tokens: int, model: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "{\"name\":\"FireworksLLM\",\"package\":\"metagpt/provider/fireworks_api.py:FireworksLLM\",\"attributes\":{\"auto_max_tokens\":{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}},\"methods\":{\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:auto_max_tokens"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:get_costs"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "?:Costs"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:_make_client_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:_achat_completion_stream"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "{\"lineno\":74,\"end_lineno\":123,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FireworksLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "{\"name\":\"FireworksLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auto_max_tokens\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:auto_max_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:auto_max_tokens", "target": "{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:get_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:get_costs", "target": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"predicate": "is", "source": "metagpt/actions/fix_bug.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/fix_bug.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/fix_bug.py", "target": "metagpt/actions/fix_bug.py:FixBug"}, {"predicate": "is", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "{\"name\":\"FixBug\",\"package\":\"metagpt/actions/fix_bug.py:FixBug\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "metagpt/actions/fix_bug.py:FixBug:name"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "{\"lineno\":10,\"end_lineno\":13,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FixBug\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "{\"name\":\"FixBug\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/fix_bug.py:FixBug:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/fix_bug.py:FixBug:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "{\"name\":\"GPTPromptGenerator\",\"package\":\"metagpt/tools/prompt_writer.py:GPTPromptGenerator\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"example\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"example: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"style: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[list[str],str]\",\"description\":\"Union[list[str], str]\",\"compositions\":[]},\"description\":\"gen(example: str, style: str): Union[list[str], str]\",\"aggregations\":[]},\"gen_chatbot_style\":{\"name\":\"gen_chatbot_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_chatbot_style(example)\",\"aggregations\":[]},\"gen_instruction_style\":{\"name\":\"gen_instruction_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_instruction_style(example)\",\"aggregations\":[]},\"gen_query_style\":{\"name\":\"gen_query_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_query_style(example)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_chatbot_style"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_instruction_style"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_query_style"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "{\"lineno\":11,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GPTPromptGenerator\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "{\"name\":\"GPTPromptGenerator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen", "target": "{\"name\":\"gen\",\"args\":[{\"name\":\"example\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"example: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"style: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[list[str],str]\",\"description\":\"Union[list[str], str]\",\"compositions\":[]},\"description\":\"gen(example: str, style: str): Union[list[str], str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_chatbot_style", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_chatbot_style", "target": "{\"name\":\"gen_chatbot_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_chatbot_style(example)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_instruction_style", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_instruction_style", "target": "{\"name\":\"gen_instruction_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_instruction_style(example)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_query_style", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_query_style", "target": "{\"name\":\"gen_query_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_query_style(example)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/libs/gpt_v_generator.py", "target": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "{\"name\":\"GPTvGenerator\",\"package\":\"metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"analyze_layout\":{\"name\":\"analyze_layout\",\"args\":[{\"name\":\"image_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"image_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"analyze_layout(image_path: Path): str\",\"aggregations\":[\"Path\"]},\"generate_webpages\":{\"name\":\"generate_webpages\",\"args\":[{\"name\":\"image_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"image_path: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_webpages(image_path: str): str\",\"aggregations\":[]},\"save_webpages\":{\"name\":\"save_webpages\",\"args\":[{\"name\":\"image_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"image_path: str\",\"compositions\":[]},{\"name\":\"webpages\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"webpages: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"save_webpages(image_path: str, webpages: str): Path\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:llm"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:analyze_layout"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:generate_webpages"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:save_webpages"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "?:Path"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "{\"lineno\":34,\"end_lineno\":124,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GPTvGenerator\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator", "target": "{\"name\":\"GPTvGenerator\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:analyze_layout", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:analyze_layout", "target": "{\"name\":\"analyze_layout\",\"args\":[{\"name\":\"image_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"image_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"analyze_layout(image_path: Path): str\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:generate_webpages", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:generate_webpages", "target": "{\"name\":\"generate_webpages\",\"args\":[{\"name\":\"image_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"image_path: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_webpages(image_path: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:save_webpages", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:save_webpages", "target": "{\"name\":\"save_webpages\",\"args\":[{\"name\":\"image_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"image_path: str\",\"compositions\":[]},{\"name\":\"webpages\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"webpages: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"save_webpages(image_path: str, webpages: str): Path\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/google_gemini_api.py", "target": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel"}, {"predicate": "has_class", "source": "metagpt/provider/google_gemini_api.py", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "{\"name\":\"GeminiGenerativeModel\",\"package\":\"metagpt/provider/google_gemini_api.py:GeminiGenerativeModel\",\"attributes\":{},\"methods\":{\"count_tokens\":{\"name\":\"count_tokens\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]},\"count_tokens_async\":{\"name\":\"count_tokens_async\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens_async(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]}},\"compositions\":[],\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]}"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens_async"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "?:glm.CountTokensResponse"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "?:content_types.ContentsType"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "{\"lineno\":31,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeminiGenerativeModel\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "{\"name\":\"GeminiGenerativeModel\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens", "target": "{\"name\":\"count_tokens\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens_async", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens_async", "target": "{\"name\":\"count_tokens_async\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens_async(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"glm.CountTokensResponse\",\"content_types.ContentsType\"]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "{\"name\":\"GeminiLLM\",\"package\":\"metagpt/provider/google_gemini_api.py:GeminiLLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"aget_usage\":{\"name\":\"aget_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aget_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]},\"completion\":{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'GenerateContentResponse'\",\"description\":\"'GenerateContentResponse'\",\"compositions\":[\"GenerateContentResponse\"]},\"description\":\"completion(messages: list[dict]): 'GenerateContentResponse'\",\"aggregations\":[\"GenerateContentResponse\"]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"GenerateContentResponse\",\"default_\":\"\",\"description\":\"resp: GenerateContentResponse\",\"compositions\":[\"GenerateContentResponse\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: GenerateContentResponse): str\",\"aggregations\":[\"GenerateContentResponse\"]},\"get_usage\":{\"name\":\"get_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"GenerateContentResponse\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm"}, {"predicate": "has_class_property", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:pricing_plan"}, {"predicate": "has_class_property", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:use_system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:aget_usage"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_choice_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_usage"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "?:GenerateContentResponse"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init_gemini"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_user_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_assistant_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_const_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion_stream"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "{\"lineno\":47,\"end_lineno\":136,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeminiLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "{\"name\":\"GeminiLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:model", "target": "{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:pricing_plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:pricing_plan", "target": "{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:use_system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:use_system_prompt", "target": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:aget_usage", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:aget_usage", "target": "{\"name\":\"aget_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aget_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:completion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:completion", "target": "{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'GenerateContentResponse'\",\"description\":\"'GenerateContentResponse'\",\"compositions\":[\"GenerateContentResponse\"]},\"description\":\"completion(messages: list[dict]): 'GenerateContentResponse'\",\"aggregations\":[\"GenerateContentResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"GenerateContentResponse\",\"default_\":\"\",\"description\":\"resp: GenerateContentResponse\",\"compositions\":[\"GenerateContentResponse\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: GenerateContentResponse): str\",\"aggregations\":[\"GenerateContentResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_usage", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_usage", "target": "{\"name\":\"get_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/general_api_requestor.py", "target": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_requestor.py", "target": "metagpt/provider/general_api_requestor.py:parse_stream_helper"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_requestor.py", "target": "metagpt/provider/general_api_requestor.py:parse_stream"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "{\"name\":\"GeneralAPIRequestor\",\"package\":\"metagpt/provider/general_api_requestor.py:GeneralAPIRequestor\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/ollama_api.py:OllamaLLM:client"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response_line"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_async_response"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "{\"lineno\":38,\"end_lineno\":104,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeneralAPIRequestor\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "{\"name\":\"GeneralAPIRequestor\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "{\"name\":\"GeneralSelection\",\"package\":\"metagpt/tools/libs/feature_engineering.py:GeneralSelection\",\"attributes\":{\"feats\":{\"name\":\"feats\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"feats : list\",\"compositions\":[]},\"label_col\":{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:feats"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:label_col"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "{\"lineno\":320,\"end_lineno\":348,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeneralSelection\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection", "target": "{\"name\":\"GeneralSelection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"feats\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"label_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:feats", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:feats", "target": "{\"name\":\"feats\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"feats : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:label_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:label_col", "target": "{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/generate_questions.py", "target": "metagpt/actions/generate_questions.py:GenerateQuestions"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "{\"name\":\"GenerateQuestions\",\"package\":\"metagpt/actions/generate_questions.py:GenerateQuestions\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionNode\",\"description\":\"ActionNode\",\"compositions\":[\"ActionNode\"]},\"description\":\"run(context): ActionNode\",\"aggregations\":[\"ActionNode\"]}},\"compositions\":[],\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "metagpt/actions/generate_questions.py:GenerateQuestions:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "metagpt/actions/generate_questions.py:GenerateQuestions:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "?:ActionNode"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "{\"lineno\":18,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GenerateQuestions\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "{\"name\":\"GenerateQuestions\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py:GenerateQuestions:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/generate_questions.py:GenerateQuestions:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py:GenerateQuestions:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/generate_questions.py:GenerateQuestions:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionNode\",\"description\":\"ActionNode\",\"compositions\":[\"ActionNode\"]},\"description\":\"run(context): ActionNode\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/invoice_ocr.py", "target": "metagpt/actions/invoice_ocr.py:GenerateTable"}, {"predicate": "has_class", "source": "metagpt/actions/invoice_ocr.py", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR"}, {"predicate": "has_class", "source": "metagpt/actions/invoice_ocr.py", "target": "metagpt/actions/invoice_ocr.py:ReplyQuestion"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "{\"name\":\"GenerateTable\",\"package\":\"metagpt/actions/invoice_ocr.py:GenerateTable\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"ocr_results\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_results: list\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(ocr_results: list, filename: str): dict[str, str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/invoice_ocr.py:GenerateTable:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/invoice_ocr.py:GenerateTable:language"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/invoice_ocr.py:GenerateTable:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/invoice_ocr.py:GenerateTable:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "{\"lineno\":122,\"end_lineno\":163,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GenerateTable\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "{\"name\":\"GenerateTable\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"ocr_results\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_results: list\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(ocr_results: list, filename: str): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/spark_api.py", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb"}, {"predicate": "has_class", "source": "metagpt/provider/spark_api.py", "target": "metagpt/provider/spark_api.py:SparkLLM"}, {"predicate": "has_class", "source": "metagpt/provider/spark_api.py", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "{\"name\":\"GetMessageFromWeb\",\"package\":\"metagpt/provider/spark_api.py:GetMessageFromWeb\",\"attributes\":{\"domain\":{\"name\":\"domain\",\"type_\":\"\",\"default_\":\"\",\"description\":\"domain\",\"compositions\":[]},\"ret\":{\"name\":\"ret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ret : str\",\"compositions\":[]},\"spark_api_key\":{\"name\":\"spark_api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_key\",\"compositions\":[]},\"spark_api_secret\":{\"name\":\"spark_api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_secret\",\"compositions\":[]},\"spark_appid\":{\"name\":\"spark_appid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_appid\",\"compositions\":[]},\"spark_url\":{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]},\"text\":{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}},\"methods\":{\"gen_params\":{\"name\":\"gen_params\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_params()\",\"aggregations\":[]},\"on_close\":{\"name\":\"on_close\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"one\",\"type_\":\"\",\"default_\":\"\",\"description\":\"one\",\"compositions\":[]},{\"name\":\"two\",\"type_\":\"\",\"default_\":\"\",\"description\":\"two\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_close(ws, one, two)\",\"aggregations\":[]},\"on_error\":{\"name\":\"on_error\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"error\",\"type_\":\"\",\"default_\":\"\",\"description\":\"error\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_error(ws, error)\",\"aggregations\":[]},\"on_message\":{\"name\":\"on_message\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_message(ws, message)\",\"aggregations\":[]},\"on_open\":{\"name\":\"on_open\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_open(ws)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"send\":{\"name\":\"send\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"send(ws)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:domain"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:ret"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_key"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_secret"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_appid"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_url"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:text"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:gen_params"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_close"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_error"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_message"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_open"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:run"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:send"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:_run"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "{\"lineno\":46,\"end_lineno\":168,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GetMessageFromWeb\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "{\"name\":\"GetMessageFromWeb\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"domain\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"ret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"spark_api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_api_secret\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_appid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"text\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:domain", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:domain", "target": "{\"name\":\"domain\",\"type_\":\"\",\"default_\":\"\",\"description\":\"domain\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:ret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:ret", "target": "{\"name\":\"ret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ret : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_key", "target": "{\"name\":\"spark_api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_key\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_secret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_secret", "target": "{\"name\":\"spark_api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_secret\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_appid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_appid", "target": "{\"name\":\"spark_appid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_appid\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_url", "target": "{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:text", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:text", "target": "{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:gen_params", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:gen_params", "target": "{\"name\":\"gen_params\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_params()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_close", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_close", "target": "{\"name\":\"on_close\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"one\",\"type_\":\"\",\"default_\":\"\",\"description\":\"one\",\"compositions\":[]},{\"name\":\"two\",\"type_\":\"\",\"default_\":\"\",\"description\":\"two\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_close(ws, one, two)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_error", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_error", "target": "{\"name\":\"on_error\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"error\",\"type_\":\"\",\"default_\":\"\",\"description\":\"error\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_error(ws, error)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_message", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_message", "target": "{\"name\":\"on_message\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_message(ws, message)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_open", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_open", "target": "{\"name\":\"on_open\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_open(ws)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:send", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:send", "target": "{\"name\":\"send\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"send(ws)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "{\"name\":\"GitRepository\",\"package\":\"metagpt/utils/git_repository.py:GitRepository\",\"attributes\":{\"changed_files\":{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]},\"is_valid\":{\"name\":\"is_valid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_valid\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"add_change\":{\"name\":\"add_change\",\"args\":[{\"name\":\"files\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"files: Dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_change(files: Dict)\",\"aggregations\":[]},\"archive\":{\"name\":\"archive\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(comments)\",\"aggregations\":[]},\"commit\":{\"name\":\"commit\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"commit(comments)\",\"aggregations\":[]},\"delete_repository\":{\"name\":\"delete_repository\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_repository()\",\"aggregations\":[]},\"filter_gitignore\":{\"name\":\"filter_gitignore\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"filenames: List[str]\",\"compositions\":[]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"filter_gitignore(filenames: List[str], root_relative_path: Path \\\\| str): List[str]\",\"aggregations\":[\"Path\\\\\"]},\"get_dependency\":{\"name\":\"get_dependency\",\"args\":[],\"return_args\":{\"type_\":\"DependencyFile\",\"description\":\"DependencyFile\",\"compositions\":[\"DependencyFile\"]},\"description\":\"get_dependency(): DependencyFile\",\"aggregations\":[\"DependencyFile\"]},\"get_files\":{\"name\":\"get_files\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_files(relative_path: Path \\\\| str, root_relative_path: Path \\\\| str, filter_ignored): List\",\"aggregations\":[\"Path\\\\\"]},\"is_git_dir\":{\"name\":\"is_git_dir\",\"args\":[{\"name\":\"local_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"local_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_git_dir(local_path)\",\"aggregations\":[]},\"new_file_repository\":{\"name\":\"new_file_repository\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"FileRepository\",\"description\":\"FileRepository\",\"compositions\":[\"FileRepository\"]},\"description\":\"new_file_repository(relative_path: Path \\\\| str): FileRepository\",\"aggregations\":[\"FileRepository\",\"Path\\\\\"]},\"open\":{\"name\":\"open\",\"args\":[{\"name\":\"local_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"auto_init\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_init\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"open(local_path: Path, auto_init)\",\"aggregations\":[\"Path\"]},\"rename_root\":{\"name\":\"rename_root\",\"args\":[{\"name\":\"new_dir_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_dir_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rename_root(new_dir_name)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\",\"DependencyFile\",\"FileRepository\",\"Path\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:changed_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:is_valid"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:status"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:workdir"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:add_change"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:archive"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:commit"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:delete_repository"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:filter_gitignore"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:get_dependency"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:get_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:is_git_dir"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:new_file_repository"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:open"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:rename_root"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "?:Path\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "?:DependencyFile"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "?:FileRepository"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "?:Path"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/context.py:Context:git_repo"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "isAggregateOn", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo:_git_repo"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:_init"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "{\"lineno\":35,\"end_lineno\":285,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GitRepository\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "{\"name\":\"GitRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"changed_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"is_valid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:changed_files", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:changed_files", "target": "{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:changed_files", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:is_valid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:is_valid", "target": "{\"name\":\"is_valid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_valid\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:is_valid", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:status", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:status", "target": "{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:status", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:workdir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:workdir", "target": "{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:workdir", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:add_change", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:add_change", "target": "{\"name\":\"add_change\",\"args\":[{\"name\":\"files\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"files: Dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_change(files: Dict)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:archive", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:archive", "target": "{\"name\":\"archive\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(comments)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:commit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:commit", "target": "{\"name\":\"commit\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"commit(comments)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:delete_repository", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:delete_repository", "target": "{\"name\":\"delete_repository\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_repository()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:filter_gitignore", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:filter_gitignore", "target": "{\"name\":\"filter_gitignore\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"filenames: List[str]\",\"compositions\":[]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"filter_gitignore(filenames: List[str], root_relative_path: Path \\\\| str): List[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:get_dependency", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:get_dependency", "target": "{\"name\":\"get_dependency\",\"args\":[],\"return_args\":{\"type_\":\"DependencyFile\",\"description\":\"DependencyFile\",\"compositions\":[\"DependencyFile\"]},\"description\":\"get_dependency(): DependencyFile\",\"aggregations\":[\"DependencyFile\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:get_files", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:get_files", "target": "{\"name\":\"get_files\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_files(relative_path: Path \\\\| str, root_relative_path: Path \\\\| str, filter_ignored): List\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:is_git_dir", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:is_git_dir", "target": "{\"name\":\"is_git_dir\",\"args\":[{\"name\":\"local_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"local_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_git_dir(local_path)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:new_file_repository", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:new_file_repository", "target": "{\"name\":\"new_file_repository\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"FileRepository\",\"description\":\"FileRepository\",\"compositions\":[\"FileRepository\"]},\"description\":\"new_file_repository(relative_path: Path \\\\| str): FileRepository\",\"aggregations\":[\"FileRepository\",\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:open", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:open", "target": "{\"name\":\"open\",\"args\":[{\"name\":\"local_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"auto_init\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_init\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"open(local_path: Path, auto_init)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:rename_root", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:rename_root", "target": "{\"name\":\"rename_root\",\"args\":[{\"name\":\"new_dir_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_dir_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rename_root(new_dir_name)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_googleapi.py", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper"}, {"predicate": "has_function", "source": "metagpt/tools/search_engine_googleapi.py", "target": "metagpt/tools/search_engine_googleapi.py:safe_google_results"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "{\"name\":\"GoogleAPIWrapper\",\"package\":\"metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"cse_id\":{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]},\"executor\":{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]},\"google_api_client\":{\"name\":\"google_api_client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"google_api_client\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\\\\|list[dict]\",\"description\":\"str \\\\| list[dict]\",\"compositions\":[\"str\\\\\"]},\"description\":\"run(query: str, max_results: int, as_string: bool, focus: list[str] \\\\| None): str \\\\| list[dict]\",\"aggregations\":[\"str\\\\\",\"\\\\\"]},\"validate_google\":{\"name\":\"validate_google\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_google(values: dict): dict\",\"aggregations\":[]}},\"compositions\":[\"futures.Executor\",\"asyncio.AbstractEventLoop\"],\"aggregations\":[\"str\\\\\",\"\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:api_key"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:cse_id"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:executor"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:loop"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:model_config"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:proxy"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:run"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:validate_google"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "?:futures.Executor"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "?:asyncio.AbstractEventLoop"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "?:\\"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "{\"lineno\":24,\"end_lineno\":109,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GoogleAPIWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "{\"name\":\"GoogleAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"cse_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"Optional[futures.Executor]\",\"default_value\":\"\"},{\"name\":\"google_api_client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"Optional[asyncio.AbstractEventLoop]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:cse_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:cse_id", "target": "{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:executor", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:executor", "target": "{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client", "target": "{\"name\":\"google_api_client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"google_api_client\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:loop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:loop", "target": "{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\\\\|list[dict]\",\"description\":\"str \\\\| list[dict]\",\"compositions\":[\"str\\\\\"]},\"description\":\"run(query: str, max_results: int, as_string: bool, focus: list[str] \\\\| None): str \\\\| list[dict]\",\"aggregations\":[\"str\\\\\",\"\\\\\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:validate_google", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:validate_google", "target": "{\"name\":\"validate_google\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_google(values: dict): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "{\"name\":\"GoogleDocstringParser\",\"package\":\"metagpt/utils/parse_docstring.py:GoogleDocstringParser\",\"attributes\":{\"docstring\":{\"name\":\"docstring\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"docstring : str\",\"compositions\":[]}},\"methods\":{\"check_and_parse_default_value\":{\"name\":\"check_and_parse_default_value\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_default_value(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]},\"check_and_parse_enum\":{\"name\":\"check_and_parse_enum\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_enum(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]},\"check_and_parse_optional\":{\"name\":\"check_and_parse_optional\",\"args\":[{\"name\":\"param_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_optional(param_type: str): Tuple[bool, str]\",\"aggregations\":[]},\"parse_desc\":{\"name\":\"parse_desc\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_desc(): str\",\"aggregations\":[]},\"parse_params\":{\"name\":\"parse_params\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str,str]]\",\"description\":\"list[Tuple[str, str, str]]\",\"compositions\":[]},\"description\":\"parse_params(): list[Tuple[str, str, str]]\",\"aggregations\":[]},\"parse_returns\":{\"name\":\"parse_returns\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str]]\",\"description\":\"list[Tuple[str, str]]\",\"compositions\":[]},\"description\":\"parse_returns(): list[Tuple[str, str]]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:docstring"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_default_value"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_enum"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_optional"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_desc"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_params"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_returns"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "metagpt/utils/parse_docstring.py:DocstringParser"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "{\"lineno\":48,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GoogleDocstringParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser", "target": "{\"name\":\"GoogleDocstringParser\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstring\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:docstring", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:docstring", "target": "{\"name\":\"docstring\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"docstring : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_default_value", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_default_value", "target": "{\"name\":\"check_and_parse_default_value\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_default_value(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_enum", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_enum", "target": "{\"name\":\"check_and_parse_enum\",\"args\":[{\"name\":\"param_desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_desc: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_enum(param_desc: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_optional", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:check_and_parse_optional", "target": "{\"name\":\"check_and_parse_optional\",\"args\":[{\"name\":\"param_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"param_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[bool,str]\",\"description\":\"Tuple[bool, str]\",\"compositions\":[]},\"description\":\"check_and_parse_optional(param_type: str): Tuple[bool, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_desc", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_desc", "target": "{\"name\":\"parse_desc\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_desc(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_params", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_params", "target": "{\"name\":\"parse_params\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str,str]]\",\"description\":\"list[Tuple[str, str, str]]\",\"compositions\":[]},\"description\":\"parse_params(): list[Tuple[str, str, str]]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_returns", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:GoogleDocstringParser:parse_returns", "target": "{\"name\":\"parse_returns\",\"args\":[],\"return_args\":{\"type_\":\"list[Tuple[str,str]]\",\"description\":\"list[Tuple[str, str]]\",\"compositions\":[]},\"description\":\"parse_returns(): list[Tuple[str, str]]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/graph_repository.py", "target": "metagpt/utils/graph_repository.py:GraphKeyword"}, {"predicate": "has_class", "source": "metagpt/utils/graph_repository.py", "target": "metagpt/utils/graph_repository.py:GraphRepository"}, {"predicate": "has_class", "source": "metagpt/utils/graph_repository.py", "target": "metagpt/utils/graph_repository.py:SPO"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "{\"name\":\"GraphKeyword\",\"package\":\"metagpt/utils/graph_repository.py:GraphKeyword\",\"attributes\":{\"CLASS\":{\"name\":\"CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS : str\",\"compositions\":[]},\"CLASS_METHOD\":{\"name\":\"CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_METHOD : str\",\"compositions\":[]},\"CLASS_PROPERTY\":{\"name\":\"CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_PROPERTY : str\",\"compositions\":[]},\"FUNCTION\":{\"name\":\"FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FUNCTION : str\",\"compositions\":[]},\"GLOBAL_VARIABLE\":{\"name\":\"GLOBAL_VARIABLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"GLOBAL_VARIABLE : str\",\"compositions\":[]},\"HAS_CLASS\":{\"name\":\"HAS_CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS : str\",\"compositions\":[]},\"HAS_CLASS_METHOD\":{\"name\":\"HAS_CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_METHOD : str\",\"compositions\":[]},\"HAS_CLASS_PROPERTY\":{\"name\":\"HAS_CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_PROPERTY : str\",\"compositions\":[]},\"HAS_CLASS_USE_CASE\":{\"name\":\"HAS_CLASS_USE_CASE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_USE_CASE : str\",\"compositions\":[]},\"HAS_CLASS_VIEW\":{\"name\":\"HAS_CLASS_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_VIEW : str\",\"compositions\":[]},\"HAS_DETAIL\":{\"name\":\"HAS_DETAIL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_DETAIL : str\",\"compositions\":[]},\"HAS_FUNCTION\":{\"name\":\"HAS_FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_FUNCTION : str\",\"compositions\":[]},\"HAS_PAGE_INFO\":{\"name\":\"HAS_PAGE_INFO\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PAGE_INFO : str\",\"compositions\":[]},\"HAS_PARTICIPANT\":{\"name\":\"HAS_PARTICIPANT\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PARTICIPANT : str\",\"compositions\":[]},\"HAS_SEQUENCE_VIEW\":{\"name\":\"HAS_SEQUENCE_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW : str\",\"compositions\":[]},\"HAS_SEQUENCE_VIEW_VER\":{\"name\":\"HAS_SEQUENCE_VIEW_VER\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW_VER : str\",\"compositions\":[]},\"IS\":{\"name\":\"IS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS : str\",\"compositions\":[]},\"IS_AGGREGATE_OF\":{\"name\":\"IS_AGGREGATE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_AGGREGATE_OF : str\",\"compositions\":[]},\"IS_COMPOSITE_OF\":{\"name\":\"IS_COMPOSITE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_COMPOSITE_OF : str\",\"compositions\":[]},\"NULL\":{\"name\":\"NULL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"NULL : str\",\"compositions\":[]},\"OF\":{\"name\":\"OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"OF : str\",\"compositions\":[]},\"ON\":{\"name\":\"ON\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ON : str\",\"compositions\":[]},\"SOURCE_CODE\":{\"name\":\"SOURCE_CODE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"SOURCE_CODE : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_METHOD"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_PROPERTY"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:FUNCTION"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:GLOBAL_VARIABLE"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_METHOD"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_PROPERTY"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_USE_CASE"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_VIEW"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_DETAIL"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_FUNCTION"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PAGE_INFO"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PARTICIPANT"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW_VER"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:IS"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:IS_AGGREGATE_OF"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:IS_COMPOSITE_OF"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:NULL"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:OF"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:ON"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:SOURCE_CODE"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "{\"lineno\":23,\"end_lineno\":51,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GraphKeyword\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "{\"name\":\"GraphKeyword\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"CLASS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"CLASS_METHOD\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"CLASS_PROPERTY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FUNCTION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"GLOBAL_VARIABLE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_METHOD\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_PROPERTY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_USE_CASE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_VIEW\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_DETAIL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_FUNCTION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_PAGE_INFO\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_PARTICIPANT\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_SEQUENCE_VIEW\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_SEQUENCE_VIEW_VER\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS_AGGREGATE_OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS_COMPOSITE_OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"NULL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ON\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"SOURCE_CODE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS", "target": "{\"name\":\"CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_METHOD", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_METHOD", "target": "{\"name\":\"CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_METHOD : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_PROPERTY", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_PROPERTY", "target": "{\"name\":\"CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_PROPERTY : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:FUNCTION", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:FUNCTION", "target": "{\"name\":\"FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FUNCTION : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:GLOBAL_VARIABLE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:GLOBAL_VARIABLE", "target": "{\"name\":\"GLOBAL_VARIABLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"GLOBAL_VARIABLE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS", "target": "{\"name\":\"HAS_CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_METHOD", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_METHOD", "target": "{\"name\":\"HAS_CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_METHOD : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_PROPERTY", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_PROPERTY", "target": "{\"name\":\"HAS_CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_PROPERTY : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_USE_CASE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_USE_CASE", "target": "{\"name\":\"HAS_CLASS_USE_CASE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_USE_CASE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_VIEW", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_VIEW", "target": "{\"name\":\"HAS_CLASS_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_VIEW : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_DETAIL", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_DETAIL", "target": "{\"name\":\"HAS_DETAIL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_DETAIL : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_FUNCTION", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_FUNCTION", "target": "{\"name\":\"HAS_FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_FUNCTION : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PAGE_INFO", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PAGE_INFO", "target": "{\"name\":\"HAS_PAGE_INFO\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PAGE_INFO : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PARTICIPANT", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PARTICIPANT", "target": "{\"name\":\"HAS_PARTICIPANT\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PARTICIPANT : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW", "target": "{\"name\":\"HAS_SEQUENCE_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW_VER", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW_VER", "target": "{\"name\":\"HAS_SEQUENCE_VIEW_VER\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW_VER : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS", "target": "{\"name\":\"IS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS_AGGREGATE_OF", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS_AGGREGATE_OF", "target": "{\"name\":\"IS_AGGREGATE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_AGGREGATE_OF : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS_COMPOSITE_OF", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS_COMPOSITE_OF", "target": "{\"name\":\"IS_COMPOSITE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_COMPOSITE_OF : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:NULL", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:NULL", "target": "{\"name\":\"NULL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"NULL : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:OF", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:OF", "target": "{\"name\":\"OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"OF : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:ON", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:ON", "target": "{\"name\":\"ON\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ON : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:SOURCE_CODE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:SOURCE_CODE", "target": "{\"name\":\"SOURCE_CODE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"SOURCE_CODE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "{\"name\":\"GraphRepository\",\"package\":\"metagpt/utils/graph_repository.py:GraphRepository\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]},\"insert\":{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]},\"rebuild_composition_relationship\":{\"name\":\"rebuild_composition_relationship\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_composition_relationship(graph_db: 'GraphRepository')\",\"aggregations\":[\"GraphRepository\"]},\"save\":{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]},\"select\":{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]},\"update_graph_db_with_class_relationship_views\":{\"name\":\"update_graph_db_with_class_relationship_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"relationship_views\",\"type_\":\"List[DotClassRelationship]\",\"default_\":\"\",\"description\":\"relationship_views: List[DotClassRelationship]\",\"compositions\":[\"DotClassRelationship\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_relationship_views(graph_db: 'GraphRepository', relationship_views: List[DotClassRelationship])\",\"aggregations\":[\"GraphRepository\",\"DotClassRelationship\"]},\"update_graph_db_with_class_views\":{\"name\":\"update_graph_db_with_class_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"class_views\",\"type_\":\"List[DotClassInfo]\",\"default_\":\"\",\"description\":\"class_views: List[DotClassInfo]\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_views(graph_db: 'GraphRepository', class_views: List[DotClassInfo])\",\"aggregations\":[\"GraphRepository\",\"DotClassInfo\"]},\"update_graph_db_with_file_info\":{\"name\":\"update_graph_db_with_file_info\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"file_info\",\"type_\":\"RepoFileInfo\",\"default_\":\"\",\"description\":\"file_info: RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_file_info(graph_db: 'GraphRepository', file_info: RepoFileInfo)\",\"aggregations\":[\"GraphRepository\",\"RepoFileInfo\"]}},\"compositions\":[],\"aggregations\":[\"GraphRepository\",\"SPO\",\"DotClassRelationship\",\"DotClassInfo\",\"RepoFileInfo\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:name"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:delete"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:insert"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:rebuild_composition_relationship"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:save"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:select"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_relationship_views"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_views"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_file_info"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:GraphRepository"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:SPO"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:DotClassRelationship"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:DotClassInfo"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:RepoFileInfo"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "{\"lineno\":81,\"end_lineno\":499,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GraphRepository\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "{\"name\":\"GraphRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:insert", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:insert", "target": "{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:rebuild_composition_relationship", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:rebuild_composition_relationship", "target": "{\"name\":\"rebuild_composition_relationship\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_composition_relationship(graph_db: 'GraphRepository')\",\"aggregations\":[\"GraphRepository\"]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:save", "target": "{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:select", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:select", "target": "{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_relationship_views", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_relationship_views", "target": "{\"name\":\"update_graph_db_with_class_relationship_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"relationship_views\",\"type_\":\"List[DotClassRelationship]\",\"default_\":\"\",\"description\":\"relationship_views: List[DotClassRelationship]\",\"compositions\":[\"DotClassRelationship\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_relationship_views(graph_db: 'GraphRepository', relationship_views: List[DotClassRelationship])\",\"aggregations\":[\"GraphRepository\",\"DotClassRelationship\"]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_views", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_views", "target": "{\"name\":\"update_graph_db_with_class_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"class_views\",\"type_\":\"List[DotClassInfo]\",\"default_\":\"\",\"description\":\"class_views: List[DotClassInfo]\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_views(graph_db: 'GraphRepository', class_views: List[DotClassInfo])\",\"aggregations\":[\"GraphRepository\",\"DotClassInfo\"]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_file_info", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_file_info", "target": "{\"name\":\"update_graph_db_with_file_info\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"file_info\",\"type_\":\"RepoFileInfo\",\"default_\":\"\",\"description\":\"file_info: RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_file_info(graph_db: 'GraphRepository', file_info: RepoFileInfo)\",\"aggregations\":[\"GraphRepository\",\"RepoFileInfo\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "{\"name\":\"GroupStat\",\"package\":\"metagpt/tools/libs/feature_engineering.py:GroupStat\",\"attributes\":{\"agg_col\":{\"name\":\"agg_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"agg_col : str\",\"compositions\":[]},\"agg_funcs\":{\"name\":\"agg_funcs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"agg_funcs : list\",\"compositions\":[]},\"group_col\":{\"name\":\"group_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"group_col : str\",\"compositions\":[]},\"group_df\":{\"name\":\"group_df\",\"type_\":\"\",\"default_\":\"\",\"description\":\"group_df : NoneType\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "metagpt/tools/libs/feature_engineering.py:GroupStat:agg_col"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "metagpt/tools/libs/feature_engineering.py:GroupStat:agg_funcs"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "metagpt/tools/libs/feature_engineering.py:GroupStat:group_col"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "metagpt/tools/libs/feature_engineering.py:GroupStat:group_df"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "metagpt/tools/libs/feature_engineering.py:GroupStat:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "metagpt/tools/libs/feature_engineering.py:GroupStat:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "metagpt/tools/libs/feature_engineering.py:GroupStat:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "{\"lineno\":220,\"end_lineno\":248,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GroupStat\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat", "target": "{\"name\":\"GroupStat\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"agg_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"agg_funcs\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"group_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"group_df\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:agg_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:agg_col", "target": "{\"name\":\"agg_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"agg_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:agg_funcs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:agg_funcs", "target": "{\"name\":\"agg_funcs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"agg_funcs : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:group_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:group_col", "target": "{\"name\":\"group_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"group_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:group_df", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:group_df", "target": "{\"name\":\"group_df\",\"type_\":\"\",\"default_\":\"\",\"description\":\"group_df : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/human_interaction.py", "target": "metagpt/utils/human_interaction.py:HumanInteraction"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "{\"name\":\"HumanInteraction\",\"package\":\"metagpt/utils/human_interaction.py:HumanInteraction\",\"attributes\":{\"stop_list\":{\"name\":\"stop_list\",\"type_\":\"tuple\",\"default_\":\"\",\"description\":\"stop_list : tuple\",\"compositions\":[\"tuple\"]}},\"methods\":{\"check_input_type\":{\"name\":\"check_input_type\",\"args\":[{\"name\":\"input_str\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_str: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Tuple[bool,Any]\",\"description\":\"Tuple[bool, Any]\",\"compositions\":[]},\"description\":\"check_input_type(input_str: str, req_type: Type): Tuple[bool, Any]\",\"aggregations\":[\"Type\"]},\"input_num_until_valid\":{\"name\":\"input_num_until_valid\",\"args\":[{\"name\":\"num_max\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_max: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"input_num_until_valid(num_max: int): int\",\"aggregations\":[]},\"input_until_valid\":{\"name\":\"input_until_valid\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Any\",\"description\":\"Any\",\"compositions\":[]},\"description\":\"input_until_valid(prompt: str, req_type: Type): Any\",\"aggregations\":[\"Type\"]},\"interact_with_instruct_content\":{\"name\":\"interact_with_instruct_content\",\"args\":[{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content: BaseModel\",\"compositions\":[\"BaseModel\"]},{\"name\":\"mapping\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"mapping: dict\",\"compositions\":[]},{\"name\":\"interact_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"interact_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Any]\",\"description\":\"dict[str, Any]\",\"compositions\":[]},\"description\":\"interact_with_instruct_content(instruct_content: BaseModel, mapping: dict, interact_type: str): dict[str, Any]\",\"aggregations\":[\"BaseModel\"]},\"multilines_input\":{\"name\":\"multilines_input\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"multilines_input(prompt: str): str\",\"aggregations\":[]}},\"compositions\":[\"tuple\"],\"aggregations\":[\"Type\",\"BaseModel\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:stop_list"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:check_input_type"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:input_num_until_valid"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:input_until_valid"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:interact_with_instruct_content"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:multilines_input"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "?:tuple"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "?:Type"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "?:BaseModel"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "{\"lineno\":14,\"end_lineno\":107,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"HumanInteraction\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "{\"name\":\"HumanInteraction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"stop_list\",\"visibility\":\"+\",\"value_type\":\"tuple\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:stop_list", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:stop_list", "target": "{\"name\":\"stop_list\",\"type_\":\"tuple\",\"default_\":\"\",\"description\":\"stop_list : tuple\",\"compositions\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:check_input_type", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:check_input_type", "target": "{\"name\":\"check_input_type\",\"args\":[{\"name\":\"input_str\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_str: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Tuple[bool,Any]\",\"description\":\"Tuple[bool, Any]\",\"compositions\":[]},\"description\":\"check_input_type(input_str: str, req_type: Type): Tuple[bool, Any]\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:input_num_until_valid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:input_num_until_valid", "target": "{\"name\":\"input_num_until_valid\",\"args\":[{\"name\":\"num_max\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_max: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"input_num_until_valid(num_max: int): int\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:input_until_valid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:input_until_valid", "target": "{\"name\":\"input_until_valid\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Any\",\"description\":\"Any\",\"compositions\":[]},\"description\":\"input_until_valid(prompt: str, req_type: Type): Any\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:interact_with_instruct_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:interact_with_instruct_content", "target": "{\"name\":\"interact_with_instruct_content\",\"args\":[{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content: BaseModel\",\"compositions\":[\"BaseModel\"]},{\"name\":\"mapping\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"mapping: dict\",\"compositions\":[]},{\"name\":\"interact_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"interact_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Any]\",\"description\":\"dict[str, Any]\",\"compositions\":[]},\"description\":\"interact_with_instruct_content(instruct_content: BaseModel, mapping: dict, interact_type: str): dict[str, Any]\",\"aggregations\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:multilines_input", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:multilines_input", "target": "{\"name\":\"multilines_input\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"multilines_input(prompt: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/human_provider.py", "target": "metagpt/provider/human_provider.py:HumanProvider"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "{\"name\":\"HumanProvider\",\"package\":\"metagpt/provider/human_provider.py:HumanProvider\",\"attributes\":{\"system_prompt\":{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"generator\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"generator: bool\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], generator: bool, timeout): str\",\"aggregations\":[]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"ask\":{\"name\":\"ask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(msg: str, timeout): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:aask"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:ask"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/roles/role.py:Role"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/roles/role.py:Role:llm"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "{\"lineno\":13,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"HumanProvider\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "{\"name\":\"HumanProvider\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"system_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:system_prompt", "target": "{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:aask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:aask", "target": "{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"generator\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"generator: bool\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], generator: bool, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:ask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:ask", "target": "{\"name\":\"ask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(msg: str, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "{\"name\":\"IFlyTekTTS\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTS\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_secret : str\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"app_id : str\",\"compositions\":[]}},\"methods\":{\"synthesize_speech\":{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output_file: str\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(text, output_file: str, voice)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_key"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_secret"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:app_id"}, {"predicate": "has_class_method", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:synthesize_speech"}, {"predicate": "has_class_method", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:_create_url"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "{\"lineno\":51,\"end_lineno\":113,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTS\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "{\"name\":\"IFlyTekTTS\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_secret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_secret", "target": "{\"name\":\"api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_secret : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:app_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:app_id", "target": "{\"name\":\"app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"app_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:synthesize_speech", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:synthesize_speech", "target": "{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output_file: str\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(text, output_file: str, voice)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "{\"name\":\"IFlyTekTTSResponse\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code : int\",\"compositions\":[]},\"data\":{\"name\":\"data\",\"type_\":\"Optional[AudioData]\",\"default_\":\"\",\"description\":\"data : Optional[AudioData]\",\"compositions\":[\"AudioData\"]},\"message\":{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]},\"sid\":{\"name\":\"sid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sid : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"AudioData\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:code"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:data"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:message"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:sid"}, {"predicate": "is_composite_of", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:AudioData"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "{\"lineno\":41,\"end_lineno\":45,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTSResponse\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "{\"name\":\"IFlyTekTTSResponse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"Optional[AudioData]\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"sid\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "?:AudioData"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:code", "target": "{\"name\":\"code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:data", "target": "{\"name\":\"data\",\"type_\":\"Optional[AudioData]\",\"default_\":\"\",\"description\":\"data : Optional[AudioData]\",\"compositions\":[\"AudioData\"]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:message", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:message", "target": "{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:sid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:sid", "target": "{\"name\":\"sid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sid : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "{\"name\":\"IFlyTekTTSStatus\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus:name"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "{\"lineno\":29,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTSStatus\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "{\"name\":\"IFlyTekTTSStatus\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:IOSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:IOSolver", "target": "{\"name\":\"IOSolver\",\"package\":\"metagpt/strategy/solver.py:IOSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/solver.py:IOSolver", "target": "metagpt/strategy/solver.py:IOSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/solver.py:IOSolver", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:IOSolver", "target": "{\"lineno\":66,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IOSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/solver.py:IOSolver", "target": "{\"name\":\"IOSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:IOSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:IOSolver:solve", "target": "{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult"}, {"predicate": "has_class", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image"}, {"predicate": "has_function", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "metagpt/tools/metagpt_text_to_image.py:oas3_metagpt_text_to_image"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "{\"name\":\"ImageResult\",\"package\":\"metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult\",\"attributes\":{\"images\":{\"name\":\"images\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"images : List\",\"compositions\":[]},\"parameters\":{\"name\":\"parameters\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"parameters : Dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:images"}, {"predicate": "has_class_property", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:parameters"}, {"predicate": "has_class_view", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "{\"name\":\"ImageResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"images\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"parameters\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:images", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:images", "target": "{\"name\":\"images\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"images : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:parameters", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:parameters", "target": "{\"name\":\"parameters\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"parameters : Dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument", "target": "{\"name\":\"IndexableDocument\",\"package\":\"metagpt/document.py:IndexableDocument\",\"attributes\":{\"content_col\":{\"name\":\"content_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content_col : Optional[str]\",\"compositions\":[]},\"data\":{\"name\":\"data\",\"type_\":\"Union[pd.DataFrame,list]\",\"default_\":\"\",\"description\":\"data : Union[pd.DataFrame, list]\",\"compositions\":[\"pd.DataFrame\"]},\"meta_col\":{\"name\":\"meta_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"meta_col : Optional[str]\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"data_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"content_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content_col\",\"compositions\":[]},{\"name\":\"meta_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"meta_col\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(data_path: Path, content_col, meta_col)\",\"aggregations\":[\"Path\"]},\"get_docs_and_metadatas\":{\"name\":\"get_docs_and_metadatas\",\"args\":[{\"name\":\")\",\"type_\":\"(list\",\"default_\":\"\",\"description\":\"): (list\",\"compositions\":[]},{\"name\":\"list\",\"type_\":\"\",\"default_\":\"\",\"description\":\"list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_docs_and_metadatas(): (list, list)\",\"aggregations\":[]}},\"compositions\":[\"pd.DataFrame\"],\"aggregations\":[\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:content_col"}, {"predicate": "has_class_property", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:data"}, {"predicate": "has_class_property", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:meta_col"}, {"predicate": "has_class_property", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:model_config"}, {"predicate": "has_class_method", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:from_path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:get_docs_and_metadatas"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:IndexableDocument", "target": "?:pd.DataFrame"}, {"predicate": "isAggregateOf", "source": "metagpt/document.py:IndexableDocument", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:Document"}, {"predicate": "has_class_method", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_df"}, {"predicate": "has_class_method", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_langchain"}, {"predicate": "has_page_info", "source": "metagpt/document.py:IndexableDocument", "target": "{\"lineno\":115,\"end_lineno\":165,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IndexableDocument\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:IndexableDocument", "target": "{\"name\":\"IndexableDocument\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content_col\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"Union[pd.DataFrame,list]\",\"default_value\":\"\"},{\"name\":\"meta_col\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:content_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:content_col", "target": "{\"name\":\"content_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content_col : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:data", "target": "{\"name\":\"data\",\"type_\":\"Union[pd.DataFrame,list]\",\"default_\":\"\",\"description\":\"data : Union[pd.DataFrame, list]\",\"compositions\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:meta_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:meta_col", "target": "{\"name\":\"meta_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"meta_col : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:from_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:from_path", "target": "{\"name\":\"from_path\",\"args\":[{\"name\":\"data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"data_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"content_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content_col\",\"compositions\":[]},{\"name\":\"meta_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"meta_col\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(data_path: Path, content_col, meta_col)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:get_docs_and_metadatas", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:get_docs_and_metadatas", "target": "{\"name\":\"get_docs_and_metadatas\",\"args\":[{\"name\":\")\",\"type_\":\"(list\",\"default_\":\"\",\"description\":\"): (list\",\"compositions\":[]},{\"name\":\"list\",\"type_\":\"\",\"default_\":\"\",\"description\":\"list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_docs_and_metadatas(): (list, list)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:OCRResults"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:ReplyData"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "{\"name\":\"InvoiceData\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoiceData\",\"attributes\":{\"invoice_data\":{\"name\":\"invoice_data\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"invoice_data : list[dict]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData:invoice_data"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "{\"lineno\":31,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceData\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "{\"name\":\"InvoiceData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"invoice_data\",\"visibility\":\"+\",\"value_type\":\"list[dict]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData:invoice_data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData:invoice_data", "target": "{\"name\":\"invoice_data\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"invoice_data : list[dict]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "{\"name\":\"InvoiceOCR\",\"package\":\"metagpt/actions/invoice_ocr.py:InvoiceOCR\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"run(file_path: Path): list\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_check_file_type"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_unzip"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_ocr"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "{\"lineno\":31,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceOCR\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "{\"name\":\"InvoiceOCR\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"run(file_path: Path): list\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "{\"name\":\"InvoiceOCRAssistant\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"orc_data\":{\"name\":\"orc_data\",\"type_\":\"Optional[list]\",\"default_\":\"\",\"description\":\"orc_data : Optional[list]\",\"compositions\":[]},\"origin_query\":{\"name\":\"origin_query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"origin_query : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:filename"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:language"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:orc_data"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:origin_query"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:profile"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "{\"lineno\":39,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceOCRAssistant\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "{\"name\":\"InvoiceOCRAssistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"orc_data\",\"visibility\":\"+\",\"value_type\":\"Optional[list]\",\"default_value\":\"\"},{\"name\":\"origin_query\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:orc_data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:orc_data", "target": "{\"name\":\"orc_data\",\"type_\":\"Optional[list]\",\"default_\":\"\",\"description\":\"orc_data : Optional[list]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:origin_query", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:origin_query", "target": "{\"name\":\"origin_query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"origin_query : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "{\"name\":\"InvoicePath\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoicePath\",\"attributes\":{\"file_path\":{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path : Path\",\"compositions\":[\"Path\"]}},\"methods\":{},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath:file_path"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "?:Path"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "{\"lineno\":23,\"end_lineno\":24,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoicePath\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "{\"name\":\"InvoicePath\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"file_path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath:file_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath:file_path", "target": "{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "{\"name\":\"KFoldTargetMeanEncoder\",\"package\":\"metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder\",\"attributes\":{\"col\":{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]},\"encoder_dict\":{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]},\"label\":{\"name\":\"label\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label : str\",\"compositions\":[]},\"n_splits\":{\"name\":\"n_splits\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_splits : int\",\"compositions\":[]},\"random_state\":{\"name\":\"random_state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"random_state : int\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:col"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:encoder_dict"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:label"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:n_splits"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:random_state"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "{\"lineno\":123,\"end_lineno\":159,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"KFoldTargetMeanEncoder\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder", "target": "{\"name\":\"KFoldTargetMeanEncoder\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"encoder_dict\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"label\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_splits\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"random_state\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:col", "target": "{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:encoder_dict", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:encoder_dict", "target": "{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:label", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:label", "target": "{\"name\":\"label\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:n_splits", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:n_splits", "target": "{\"name\":\"n_splits\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_splits : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:random_state", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:random_state", "target": "{\"name\":\"random_state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"random_state : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/llm_config.py", "target": "metagpt/configs/llm_config.py:LLMConfig"}, {"predicate": "has_class", "source": "metagpt/configs/llm_config.py", "target": "metagpt/configs/llm_config.py:LLMType"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "{\"name\":\"LLMConfig\",\"package\":\"metagpt/configs/llm_config.py:LLMConfig\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_secret : Optional[str]\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]},\"api_version\":{\"name\":\"api_version\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_version : Optional[str]\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"app_id : Optional[str]\",\"compositions\":[]},\"base_url\":{\"name\":\"base_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"base_url : str\",\"compositions\":[]},\"best_of\":{\"name\":\"best_of\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"best_of : Optional[int]\",\"compositions\":[]},\"calc_usage\":{\"name\":\"calc_usage\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"calc_usage : bool\",\"compositions\":[]},\"domain\":{\"name\":\"domain\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"domain : Optional[str]\",\"compositions\":[]},\"frequency_penalty\":{\"name\":\"frequency_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"frequency_penalty : float\",\"compositions\":[]},\"logprobs\":{\"name\":\"logprobs\",\"type_\":\"Optional[bool]\",\"default_\":\"\",\"description\":\"logprobs : Optional[bool]\",\"compositions\":[]},\"max_token\":{\"name\":\"max_token\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_token : int\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]},\"n\":{\"name\":\"n\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"n : Optional[int]\",\"compositions\":[]},\"presence_penalty\":{\"name\":\"presence_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"presence_penalty : float\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"pricing_plan : Optional[str]\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]},\"repetition_penalty\":{\"name\":\"repetition_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"repetition_penalty : float\",\"compositions\":[]},\"stop\":{\"name\":\"stop\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"stop : Optional[str]\",\"compositions\":[]},\"stream\":{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream : bool\",\"compositions\":[]},\"temperature\":{\"name\":\"temperature\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"temperature : float\",\"compositions\":[]},\"timeout\":{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout : int\",\"compositions\":[]},\"top_k\":{\"name\":\"top_k\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"top_k : int\",\"compositions\":[]},\"top_logprobs\":{\"name\":\"top_logprobs\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"top_logprobs : Optional[int]\",\"compositions\":[]},\"top_p\":{\"name\":\"top_p\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"top_p : float\",\"compositions\":[]}},\"methods\":{\"check_llm_key\":{\"name\":\"check_llm_key\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_llm_key(v)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:api_key"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:api_secret"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:api_type"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:api_version"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:app_id"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:base_url"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:best_of"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:calc_usage"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:domain"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:frequency_penalty"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:logprobs"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:max_token"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:model"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:n"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:presence_penalty"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:pricing_plan"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:proxy"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:repetition_penalty"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:stop"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:stream"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:temperature"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:timeout"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:top_k"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:top_logprobs"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:top_p"}, {"predicate": "has_class_method", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:check_llm_key"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/config2.py:Config"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/config2.py:Config:llm"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/base_llm.py:BaseLLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/anthropic_api.py:Claude2"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/anthropic_api.py:Claude2:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/ollama_api.py:OllamaLLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/openai_api.py:OpenAILLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/spark_api.py:SparkLLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/spark_api.py:SparkLLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "{\"lineno\":32,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "{\"name\":\"LLMConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_version\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"base_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"best_of\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"calc_usage\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"domain\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"frequency_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"logprobs\",\"visibility\":\"+\",\"value_type\":\"Optional[bool]\",\"default_value\":\"\"},{\"name\":\"max_token\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"n\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"presence_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"repetition_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"stop\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"stream\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"temperature\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"timeout\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"top_k\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"top_logprobs\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"top_p\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:api_secret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:api_secret", "target": "{\"name\":\"api_secret\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_secret : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:api_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:api_type", "target": "{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:api_version", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:api_version", "target": "{\"name\":\"api_version\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_version : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:app_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:app_id", "target": "{\"name\":\"app_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"app_id : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:base_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:base_url", "target": "{\"name\":\"base_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"base_url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:best_of", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:best_of", "target": "{\"name\":\"best_of\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"best_of : Optional[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:calc_usage", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:calc_usage", "target": "{\"name\":\"calc_usage\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"calc_usage : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:domain", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:domain", "target": "{\"name\":\"domain\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"domain : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:frequency_penalty", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:frequency_penalty", "target": "{\"name\":\"frequency_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"frequency_penalty : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:logprobs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:logprobs", "target": "{\"name\":\"logprobs\",\"type_\":\"Optional[bool]\",\"default_\":\"\",\"description\":\"logprobs : Optional[bool]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:max_token", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:max_token", "target": "{\"name\":\"max_token\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_token : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:model", "target": "{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:n", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:n", "target": "{\"name\":\"n\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"n : Optional[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:presence_penalty", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:presence_penalty", "target": "{\"name\":\"presence_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"presence_penalty : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:pricing_plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:pricing_plan", "target": "{\"name\":\"pricing_plan\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"pricing_plan : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:repetition_penalty", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:repetition_penalty", "target": "{\"name\":\"repetition_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"repetition_penalty : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:stop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:stop", "target": "{\"name\":\"stop\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"stop : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:stream", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:stream", "target": "{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:temperature", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:temperature", "target": "{\"name\":\"temperature\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"temperature : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:timeout", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:timeout", "target": "{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:top_k", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:top_k", "target": "{\"name\":\"top_k\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"top_k : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:top_logprobs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:top_logprobs", "target": "{\"name\":\"top_logprobs\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"top_logprobs : Optional[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:top_p", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:top_p", "target": "{\"name\":\"top_p\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"top_p : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:check_llm_key", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:check_llm_key", "target": "{\"name\":\"check_llm_key\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_llm_key(v)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/llm_provider_registry.py", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry"}, {"predicate": "has_function", "source": "metagpt/provider/llm_provider_registry.py", "target": "metagpt/provider/llm_provider_registry.py:register_provider"}, {"predicate": "has_function", "source": "metagpt/provider/llm_provider_registry.py", "target": "metagpt/provider/llm_provider_registry.py:create_llm_instance"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "{\"name\":\"LLMProviderRegistry\",\"package\":\"metagpt/provider/llm_provider_registry.py:LLMProviderRegistry\",\"attributes\":{\"providers\":{\"name\":\"providers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"providers : dict\",\"compositions\":[]}},\"methods\":{\"get_provider\":{\"name\":\"get_provider\",\"args\":[{\"name\":\"enum\",\"type_\":\"LLMType\",\"default_\":\"\",\"description\":\"enum: LLMType\",\"compositions\":[\"LLMType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_provider(enum: LLMType)\",\"aggregations\":[\"LLMType\"]},\"register\":{\"name\":\"register\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"provider_cls\",\"type_\":\"\",\"default_\":\"\",\"description\":\"provider_cls\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register(key, provider_cls)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"LLMType\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:providers"}, {"predicate": "has_class_method", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:get_provider"}, {"predicate": "has_class_method", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:register"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "?:LLMType"}, {"predicate": "has_class_method", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "{\"lineno\":12,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMProviderRegistry\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "{\"name\":\"LLMProviderRegistry\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"providers\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:providers", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:providers", "target": "{\"name\":\"providers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"providers : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:get_provider", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:get_provider", "target": "{\"name\":\"get_provider\",\"args\":[{\"name\":\"enum\",\"type_\":\"LLMType\",\"default_\":\"\",\"description\":\"enum: LLMType\",\"compositions\":[\"LLMType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_provider(enum: LLMType)\",\"aggregations\":[\"LLMType\"]}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:register", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:register", "target": "{\"name\":\"register\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"provider_cls\",\"type_\":\"\",\"default_\":\"\",\"description\":\"provider_cls\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register(key, provider_cls)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMType", "target": "{\"name\":\"LLMType\",\"package\":\"metagpt/configs/llm_config.py:LLMType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMType", "target": "metagpt/configs/llm_config.py:LLMType:name"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/llm_config.py:LLMType", "target": "metagpt/configs/llm_config.py:LLMConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/llm_config.py:LLMType", "target": "metagpt/configs/llm_config.py:LLMConfig:api_type"}, {"predicate": "has_class_method", "source": "metagpt/configs/llm_config.py:LLMType", "target": "metagpt/configs/llm_config.py:LLMType:__missing__"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:LLMType", "target": "{\"lineno\":16,\"end_lineno\":29,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/llm_config.py:LLMType", "target": "{\"name\":\"LLMType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "{\"name\":\"LabelEncode\",\"package\":\"metagpt/tools/libs/data_preprocess.py:LabelEncode\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"le_encoders\":{\"name\":\"le_encoders\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"le_encoders : list\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "metagpt/tools/libs/data_preprocess.py:LabelEncode:features"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "metagpt/tools/libs/data_preprocess.py:LabelEncode:le_encoders"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "metagpt/tools/libs/data_preprocess.py:LabelEncode:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "metagpt/tools/libs/data_preprocess.py:LabelEncode:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "metagpt/tools/libs/data_preprocess.py:LabelEncode:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "{\"lineno\":184,\"end_lineno\":216,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LabelEncode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode", "target": "{\"name\":\"LabelEncode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"le_encoders\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode:features", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode:features", "target": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode:le_encoders", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode:le_encoders", "target": "{\"name\":\"le_encoders\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"le_encoders : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/lancedb_store.py", "target": "metagpt/document_store/lancedb_store.py:LanceStore"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "{\"name\":\"LanceStore\",\"package\":\"metagpt/document_store/lancedb_store.py:LanceStore\",\"attributes\":{\"db\":{\"name\":\"db\",\"type_\":\"LanceDBConnection,RemoteDBConnection\",\"default_\":\"\",\"description\":\"db : LanceDBConnection, RemoteDBConnection\",\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\"]},\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"table\":{\"name\":\"table\",\"type_\":\"LanceTable,NoneType,RemoteTable\",\"default_\":\"\",\"description\":\"table : LanceTable, NoneType, RemoteTable\",\"compositions\":[\"LanceTable\",\"RemoteTable\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(data, metadata, _id)\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]},\"drop\":{\"name\":\"drop\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"drop(name)\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metric\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metric\",\"compositions\":[]},{\"name\":\"nprobes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"nprobes\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metric, nprobes)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(data, metadatas, ids)\",\"aggregations\":[]}},\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\",\"LanceTable\",\"RemoteTable\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:db"}, {"predicate": "has_class_property", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:name"}, {"predicate": "has_class_property", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:table"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:delete"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:drop"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:persist"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:write"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "?:LanceDBConnection"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "?:RemoteDBConnection"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "?:LanceTable"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "?:RemoteTable"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:__init__"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "{\"lineno\":14,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LanceStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "{\"name\":\"LanceStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"db\",\"visibility\":\"+\",\"value_type\":\"LanceDBConnection,RemoteDBConnection\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"table\",\"visibility\":\"+\",\"value_type\":\"LanceTable,NoneType,RemoteTable\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:db", "target": "{\"name\":\"db\",\"type_\":\"LanceDBConnection,RemoteDBConnection\",\"default_\":\"\",\"description\":\"db : LanceDBConnection, RemoteDBConnection\",\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\"]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:table", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:table", "target": "{\"name\":\"table\",\"type_\":\"LanceTable,NoneType,RemoteTable\",\"default_\":\"\",\"description\":\"table : LanceTable, NoneType, RemoteTable\",\"compositions\":[\"LanceTable\",\"RemoteTable\"]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(data, metadata, _id)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:drop", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:drop", "target": "{\"name\":\"drop\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"drop(name)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metric\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metric\",\"compositions\":[]},{\"name\":\"nprobes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"nprobes\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metric, nprobes)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:write", "target": "{\"name\":\"write\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(data, metadatas, ids)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "{\"name\":\"LocalStore\",\"package\":\"metagpt/document_store/base_store.py:LocalStore\",\"attributes\":{\"cache_dir\":{\"name\":\"cache_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"cache_dir : Optional[Path]\",\"compositions\":[\"Path\"]},\"fname\":{\"name\":\"fname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"fname\",\"compositions\":[]},\"raw_data_path\":{\"name\":\"raw_data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"raw_data_path : Path\",\"compositions\":[\"Path\"]},\"store\":{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:cache_dir"}, {"predicate": "has_class_property", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:fname"}, {"predicate": "has_class_property", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:raw_data_path"}, {"predicate": "has_class_property", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:store"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:__init__"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:_get_index_and_store_fname"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:_load"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:_write"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "{\"lineno\":28,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LocalStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "{\"name\":\"LocalStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cache_dir\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"},{\"name\":\"fname\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"raw_data_path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:cache_dir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore:cache_dir", "target": "{\"name\":\"cache_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"cache_dir : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:fname", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore:fname", "target": "{\"name\":\"fname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"fname\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:raw_data_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore:raw_data_path", "target": "{\"name\":\"raw_data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"raw_data_path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore:store", "target": "{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/memory/longterm_memory.py", "target": "metagpt/memory/longterm_memory.py:LongTermMemory"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "{\"name\":\"LongTermMemory\",\"package\":\"metagpt/memory/longterm_memory.py:LongTermMemory\",\"attributes\":{\"memory_storage\":{\"name\":\"memory_storage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory_storage\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"msg_from_recover\":{\"name\":\"msg_from_recover\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"msg_from_recover : bool\",\"compositions\":[]},\"rc\":{\"name\":\"rc\",\"type_\":\"Optional[RoleContext]\",\"default_\":\"\",\"description\":\"rc : Optional[RoleContext]\",\"compositions\":[\"RoleContext\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]},\"clear\":{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]},\"find_news\":{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]},\"recover_memory\":{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]},{\"name\":\"rc\",\"type_\":\"RoleContext\",\"default_\":\"\",\"description\":\"rc: RoleContext\",\"compositions\":[\"RoleContext\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"recover_memory(role_id: str, rc: RoleContext)\",\"aggregations\":[\"RoleContext\"]}},\"compositions\":[\"RoleContext\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage"}, {"predicate": "has_class_property", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:model_config"}, {"predicate": "has_class_property", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:msg_from_recover"}, {"predicate": "has_class_property", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:rc"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:add"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:clear"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:delete"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:find_news"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:recover_memory"}, {"predicate": "isAggregateOf", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/memory.py:Memory"}, {"predicate": "is_composite_of", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "{\"lineno\":18,\"end_lineno\":77,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LongTermMemory\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "{\"name\":\"LongTermMemory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"memory_storage\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"msg_from_recover\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"rc\",\"visibility\":\"+\",\"value_type\":\"Optional[RoleContext]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "?:RoleContext"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage", "target": "{\"name\":\"memory_storage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory_storage\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:msg_from_recover", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:msg_from_recover", "target": "{\"name\":\"msg_from_recover\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"msg_from_recover : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:rc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:rc", "target": "{\"name\":\"rc\",\"type_\":\"Optional[RoleContext]\",\"default_\":\"\",\"description\":\"rc : Optional[RoleContext]\",\"compositions\":[\"RoleContext\"]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:clear", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:clear", "target": "{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:find_news", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:find_news", "target": "{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:recover_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:recover_memory", "target": "{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]},{\"name\":\"rc\",\"type_\":\"RoleContext\",\"default_\":\"\",\"description\":\"rc: RoleContext\",\"compositions\":[\"RoleContext\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"recover_memory(role_id: str, rc: RoleContext)\",\"aggregations\":[\"RoleContext\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "{\"name\":\"MCTSSolver\",\"package\":\"metagpt/strategy/tot.py:MCTSSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "metagpt/strategy/tot.py:MCTSSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "{\"lineno\":230,\"end_lineno\":232,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MCTSSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "{\"name\":\"MCTSSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:MCTSSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:MCTSSolver:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess", "target": "{\"name\":\"MLProcess\",\"package\":\"metagpt/tools/libs/data_preprocess.py:MLProcess\",\"attributes\":{},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"fit_transform\":{\"name\":\"fit_transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"fit_transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess:fit_transform"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess", "target": "?:pd.DataFrame"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess", "target": "{\"lineno\":24,\"end_lineno\":57,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MLProcess\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess", "target": "{\"name\":\"MLProcess\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess:fit_transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess:fit_transform", "target": "{\"name\":\"fit_transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"fit_transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MLProcess:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale", "target": "{\"name\":\"MaxAbsScale\",\"package\":\"metagpt/tools/libs/data_preprocess.py:MaxAbsScale\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"MaxAbsScaler\",\"default_\":\"\",\"description\":\"model : MaxAbsScaler\",\"compositions\":[\"MaxAbsScaler\"]}},\"methods\":{},\"compositions\":[\"MaxAbsScaler\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale", "target": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:features"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale", "target": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:model"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale", "target": "?:MaxAbsScaler"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale", "target": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale", "target": "{\"lineno\":132,\"end_lineno\":139,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MaxAbsScale\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale", "target": "{\"name\":\"MaxAbsScale\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"MaxAbsScaler\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:features", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:features", "target": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:model", "target": "{\"name\":\"model\",\"type_\":\"MaxAbsScaler\",\"default_\":\"\",\"description\":\"model : MaxAbsScaler\",\"compositions\":[\"MaxAbsScaler\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "{\"name\":\"MeilisearchEngine\",\"package\":\"metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"Client\",\"default_\":\"\",\"description\":\"client : Client\",\"compositions\":[\"Client\"]}},\"methods\":{\"add_documents\":{\"name\":\"add_documents\",\"args\":[{\"name\":\"data_source\",\"type_\":\"DataSource\",\"default_\":\"\",\"description\":\"data_source: DataSource\",\"compositions\":[\"DataSource\"]},{\"name\":\"documents\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"documents: List[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_documents(data_source: DataSource, documents: List[dict])\",\"aggregations\":[\"DataSource\"]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query)\",\"aggregations\":[]},\"set_index\":{\"name\":\"set_index\",\"args\":[{\"name\":\"index\",\"type_\":\"\",\"default_\":\"\",\"description\":\"index\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_index(index)\",\"aggregations\":[]}},\"compositions\":[\"Client\"],\"aggregations\":[\"DataSource\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:client"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:add_documents"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:search"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:set_index"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "?:Client"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "?:DataSource"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "{\"lineno\":23,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MeilisearchEngine\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "{\"name\":\"MeilisearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"Client\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:client", "target": "{\"name\":\"client\",\"type_\":\"Client\",\"default_\":\"\",\"description\":\"client : Client\",\"compositions\":[\"Client\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:add_documents", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:add_documents", "target": "{\"name\":\"add_documents\",\"args\":[{\"name\":\"data_source\",\"type_\":\"DataSource\",\"default_\":\"\",\"description\":\"data_source: DataSource\",\"compositions\":[\"DataSource\"]},{\"name\":\"documents\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"documents: List[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_documents(data_source: DataSource, documents: List[dict])\",\"aggregations\":[\"DataSource\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:set_index", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:set_index", "target": "{\"name\":\"set_index\",\"args\":[{\"name\":\"index\",\"type_\":\"\",\"default_\":\"\",\"description\":\"index\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_index(index)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/memory.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/memory/memory.py", "target": "metagpt/memory/memory.py:Memory"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory", "target": "{\"name\":\"Memory\",\"package\":\"metagpt/memory/memory.py:Memory\",\"attributes\":{\"ignore_id\":{\"name\":\"ignore_id\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"ignore_id : bool\",\"compositions\":[]},\"index\":{\"name\":\"index\",\"type_\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_\":\"\",\"description\":\"index : DefaultDict[str, list[SerializeAsAny[Message]]]\",\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"]},\"storage\":{\"name\":\"storage\",\"type_\":\"list[SerializeAsAny[Message]]\",\"default_\":\"\",\"description\":\"storage : list[SerializeAsAny[Message]]\",\"compositions\":[\"Message\",\"SerializeAsAny\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]},\"add_batch\":{\"name\":\"add_batch\",\"args\":[{\"name\":\"messages\",\"type_\":\"Iterable[Message]\",\"default_\":\"\",\"description\":\"messages: Iterable[Message]\",\"compositions\":[\"Iterable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_batch(messages: Iterable[Message])\",\"aggregations\":[\"Message\",\"Iterable\"]},\"clear\":{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]},\"count\":{\"name\":\"count\",\"args\":[],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"count(): int\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]},\"delete_newest\":{\"name\":\"delete_newest\",\"args\":[],\"return_args\":{\"type_\":\"'Message'\",\"description\":\"'Message'\",\"compositions\":[\"Message\"]},\"description\":\"delete_newest(): 'Message'\",\"aggregations\":[\"Message\"]},\"find_news\":{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get(k): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_action\":{\"name\":\"get_by_action\",\"args\":[{\"name\":\"action\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_action(action): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_actions\":{\"name\":\"get_by_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"Set\",\"default_\":\"\",\"description\":\"actions: Set\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_actions(actions: Set): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_content\":{\"name\":\"get_by_content\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_content(content: str): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_role\":{\"name\":\"get_by_role\",\"args\":[{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_role(role: str): list[Message]\",\"aggregations\":[\"Message\"]},\"try_remember\":{\"name\":\"try_remember\",\"args\":[{\"name\":\"keyword\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"keyword: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"try_remember(keyword: str): list[Message]\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"],\"aggregations\":[\"Iterable\"]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:ignore_id"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:index"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:storage"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:add"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:add_batch"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:clear"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:count"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:delete"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:delete_newest"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:find_news"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get_by_action"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get_by_actions"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get_by_content"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get_by_role"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:try_remember"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory.py:Memory", "target": "?:DefaultDict"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory.py:Memory", "target": "?:SerializeAsAny"}, {"predicate": "isAggregateOf", "source": "metagpt/memory/memory.py:Memory", "target": "?:Iterable"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "isCompositeOn", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/roles/role.py:RoleContext:memory"}, {"predicate": "isCompositeOn", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/roles/role.py:RoleContext:working_memory"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/strategy/planner.py:Planner"}, {"predicate": "isCompositeOn", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/strategy/planner.py:Planner:working_memory"}, {"predicate": "is_composite_of", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:Memory", "target": "{\"lineno\":19,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Memory\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/memory/memory.py:Memory", "target": "{\"name\":\"Memory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ignore_id\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"index\",\"visibility\":\"+\",\"value_type\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_value\":\"\"},{\"name\":\"storage\",\"visibility\":\"+\",\"value_type\":\"list[SerializeAsAny[Message]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory.py:Memory", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:ignore_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:ignore_id", "target": "{\"name\":\"ignore_id\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"ignore_id : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:index", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:index", "target": "{\"name\":\"index\",\"type_\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_\":\"\",\"description\":\"index : DefaultDict[str, list[SerializeAsAny[Message]]]\",\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:storage", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:storage", "target": "{\"name\":\"storage\",\"type_\":\"list[SerializeAsAny[Message]]\",\"default_\":\"\",\"description\":\"storage : list[SerializeAsAny[Message]]\",\"compositions\":[\"Message\",\"SerializeAsAny\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:add_batch", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:add_batch", "target": "{\"name\":\"add_batch\",\"args\":[{\"name\":\"messages\",\"type_\":\"Iterable[Message]\",\"default_\":\"\",\"description\":\"messages: Iterable[Message]\",\"compositions\":[\"Iterable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_batch(messages: Iterable[Message])\",\"aggregations\":[\"Message\",\"Iterable\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:clear", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:clear", "target": "{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:count", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:count", "target": "{\"name\":\"count\",\"args\":[],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"count(): int\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:delete_newest", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:delete_newest", "target": "{\"name\":\"delete_newest\",\"args\":[],\"return_args\":{\"type_\":\"'Message'\",\"description\":\"'Message'\",\"compositions\":[\"Message\"]},\"description\":\"delete_newest(): 'Message'\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:find_news", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:find_news", "target": "{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get(k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get_by_action", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get_by_action", "target": "{\"name\":\"get_by_action\",\"args\":[{\"name\":\"action\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_action(action): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get_by_actions", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get_by_actions", "target": "{\"name\":\"get_by_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"Set\",\"default_\":\"\",\"description\":\"actions: Set\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_actions(actions: Set): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get_by_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get_by_content", "target": "{\"name\":\"get_by_content\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_content(content: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get_by_role", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get_by_role", "target": "{\"name\":\"get_by_role\",\"args\":[{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_role(role: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:try_remember", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:try_remember", "target": "{\"name\":\"try_remember\",\"args\":[{\"name\":\"keyword\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"keyword: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"try_remember(keyword: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/memory/memory_storage.py", "target": "metagpt/memory/memory_storage.py:MemoryStorage"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "{\"name\":\"MemoryStorage\",\"package\":\"metagpt/memory/memory_storage.py:MemoryStorage\",\"attributes\":{\"embedding\":{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]},\"is_initialized\":{\"name\":\"is_initialized\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_initialized\",\"compositions\":[]},\"mem_ttl\":{\"name\":\"mem_ttl\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mem_ttl : int\",\"compositions\":[]},\"role_id\":{\"name\":\"role_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"role_id : Optional[str]\",\"compositions\":[]},\"role_mem_path\":{\"name\":\"role_mem_path\",\"type_\":\"Optional[str],Path\",\"default_\":\"\",\"description\":\"role_mem_path : Optional[str], Path\",\"compositions\":[\"Path\"]},\"store\":{\"name\":\"store\",\"type_\":\"NoneType,Optional[FAISS]\",\"default_\":\"\",\"description\":\"store : NoneType, Optional[FAISS]\",\"compositions\":[\"FAISS\"]},\"threshold\":{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"add(message: Message): bool\",\"aggregations\":[\"Message\"]},\"clean\":{\"name\":\"clean\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clean()\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"recover_memory\":{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"recover_memory(role_id: str): list[Message]\",\"aggregations\":[\"Message\"]},\"search_dissimilar\":{\"name\":\"search_dissimilar\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"search_dissimilar(message: Message, k): list[Message]\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"OpenAIEmbeddings\",\"Path\",\"FAISS\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:embedding"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:mem_ttl"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:role_id"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:role_mem_path"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:store"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:threshold"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:add"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:clean"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:persist"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:recover_memory"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:search_dissimilar"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "?:OpenAIEmbeddings"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "?:Path"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "?:FAISS"}, {"predicate": "isAggregateOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/document_store/faiss_store.py:FaissStore"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/longterm_memory.py:LongTermMemory"}, {"predicate": "isCompositeOn", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:__init__"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:_load"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:_get_index_and_store_fname"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "{\"lineno\":21,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MemoryStorage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "{\"name\":\"MemoryStorage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"OpenAIEmbeddings\",\"default_value\":\"\"},{\"name\":\"is_initialized\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mem_ttl\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"role_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"role_mem_path\",\"visibility\":\"+\",\"value_type\":\"Optional[str],Path\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"NoneType,Optional[FAISS]\",\"default_value\":\"\"},{\"name\":\"threshold\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:embedding", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:embedding", "target": "{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized", "target": "{\"name\":\"is_initialized\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_initialized\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:mem_ttl", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:mem_ttl", "target": "{\"name\":\"mem_ttl\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mem_ttl : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:role_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:role_id", "target": "{\"name\":\"role_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"role_id : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:role_mem_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:role_mem_path", "target": "{\"name\":\"role_mem_path\",\"type_\":\"Optional[str],Path\",\"default_\":\"\",\"description\":\"role_mem_path : Optional[str], Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:store", "target": "{\"name\":\"store\",\"type_\":\"NoneType,Optional[FAISS]\",\"default_\":\"\",\"description\":\"store : NoneType, Optional[FAISS]\",\"compositions\":[\"FAISS\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:threshold", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:threshold", "target": "{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"add(message: Message): bool\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:clean", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:clean", "target": "{\"name\":\"clean\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clean()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:recover_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:recover_memory", "target": "{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"recover_memory(role_id: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:search_dissimilar", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:search_dissimilar", "target": "{\"name\":\"search_dissimilar\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"search_dissimilar(message: Message, k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/mermaid_config.py", "target": "metagpt/configs/mermaid_config.py:MermaidConfig"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "{\"name\":\"MermaidConfig\",\"package\":\"metagpt/configs/mermaid_config.py:MermaidConfig\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_\":\"\",\"description\":\"engine : Literal['nodejs', 'ink', 'playwright', 'pyppeteer']\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]},\"puppeteer_config\":{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]},\"pyppeteer_path\":{\"name\":\"pyppeteer_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"pyppeteer_path : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/configs/mermaid_config.py:MermaidConfig:engine"}, {"predicate": "has_class_property", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/configs/mermaid_config.py:MermaidConfig:path"}, {"predicate": "has_class_property", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/configs/mermaid_config.py:MermaidConfig:puppeteer_config"}, {"predicate": "has_class_property", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/configs/mermaid_config.py:MermaidConfig:pyppeteer_path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/config2.py:Config"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/config2.py:Config:mermaid"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "{\"lineno\":13,\"end_lineno\":19,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MermaidConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "{\"name\":\"MermaidConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"puppeteer_config\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"pyppeteer_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:engine", "target": "{\"name\":\"engine\",\"type_\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_\":\"\",\"description\":\"engine : Literal['nodejs', 'ink', 'playwright', 'pyppeteer']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:path", "target": "{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:puppeteer_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:puppeteer_config", "target": "{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:pyppeteer_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:pyppeteer_path", "target": "{\"name\":\"pyppeteer_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"pyppeteer_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message", "target": "{\"name\":\"Message\",\"package\":\"metagpt/schema.py:Message\",\"attributes\":{\"cause_by\":{\"name\":\"cause_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cause_by : str\",\"compositions\":[]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"id\":{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id : str\",\"compositions\":[]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"Optional[BaseModel]\",\"default_\":\"\",\"description\":\"instruct_content : Optional[BaseModel]\",\"compositions\":[\"BaseModel\"]},\"role\":{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]},\"send_to\":{\"name\":\"send_to\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"send_to : set[str]\",\"compositions\":[]},\"sent_from\":{\"name\":\"sent_from\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sent_from : str\",\"compositions\":[]}},\"methods\":{\"check_cause_by\":{\"name\":\"check_cause_by\",\"args\":[{\"name\":\"cause_by\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"cause_by: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_cause_by(cause_by: Any): str\",\"aggregations\":[]},\"check_id\":{\"name\":\"check_id\",\"args\":[{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_id(id: str): str\",\"aggregations\":[]},\"check_instruct_content\":{\"name\":\"check_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"ic: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"BaseModel\",\"description\":\"BaseModel\",\"compositions\":[\"BaseModel\"]},\"description\":\"check_instruct_content(ic: Any): BaseModel\",\"aggregations\":[\"BaseModel\"]},\"check_send_to\":{\"name\":\"check_send_to\",\"args\":[{\"name\":\"send_to\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"send_to: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"set\",\"description\":\"set\",\"compositions\":[]},\"description\":\"check_send_to(send_to: Any): set\",\"aggregations\":[]},\"check_sent_from\":{\"name\":\"check_sent_from\",\"args\":[{\"name\":\"sent_from\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"sent_from: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_sent_from(sent_from: Any): str\",\"aggregations\":[]},\"dump\":{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"val\",\"type_\":\"\",\"default_\":\"\",\"description\":\"val\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(val)\",\"aggregations\":[]},\"ser_instruct_content\":{\"name\":\"ser_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"ic: BaseModel\",\"compositions\":[\"BaseModel\"]}],\"return_args\":{\"type_\":\"Union[dict,None]\",\"description\":\"Union[dict, None]\",\"compositions\":[]},\"description\":\"ser_instruct_content(ic: BaseModel): Union[dict, None]\",\"aggregations\":[\"BaseModel\"]},\"to_dict\":{\"name\":\"to_dict\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"to_dict(): dict\",\"aggregations\":[]}},\"compositions\":[\"BaseModel\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:cause_by"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:content"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:id"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:instruct_content"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:role"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:send_to"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:sent_from"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_cause_by"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_id"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_instruct_content"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_send_to"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_sent_from"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:dump"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:load"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:ser_instruct_content"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:to_dict"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Message", "target": "?:BaseModel"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/skill_action.py:SkillAction"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/skill_action.py:SkillAction:rsp"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/talk_action.py:TalkAction"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/talk_action.py:TalkAction:rsp"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:__init__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:__setattr__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:__str__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:__repr__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:Message", "target": "{\"lineno\":188,\"end_lineno\":303,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Message\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:Message", "target": "{\"name\":\"Message\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cause_by\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseModel]\",\"default_value\":\"\"},{\"name\":\"role\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"send_to\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"sent_from\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:cause_by", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:cause_by", "target": "{\"name\":\"cause_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cause_by : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:id", "target": "{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:instruct_content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:instruct_content", "target": "{\"name\":\"instruct_content\",\"type_\":\"Optional[BaseModel]\",\"default_\":\"\",\"description\":\"instruct_content : Optional[BaseModel]\",\"compositions\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:role", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:role", "target": "{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:send_to", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:send_to", "target": "{\"name\":\"send_to\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"send_to : set[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:sent_from", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:sent_from", "target": "{\"name\":\"sent_from\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sent_from : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_cause_by", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_cause_by", "target": "{\"name\":\"check_cause_by\",\"args\":[{\"name\":\"cause_by\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"cause_by: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_cause_by(cause_by: Any): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_id", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_id", "target": "{\"name\":\"check_id\",\"args\":[{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_id(id: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_instruct_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_instruct_content", "target": "{\"name\":\"check_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"ic: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"BaseModel\",\"description\":\"BaseModel\",\"compositions\":[\"BaseModel\"]},\"description\":\"check_instruct_content(ic: Any): BaseModel\",\"aggregations\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_send_to", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_send_to", "target": "{\"name\":\"check_send_to\",\"args\":[{\"name\":\"send_to\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"send_to: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"set\",\"description\":\"set\",\"compositions\":[]},\"description\":\"check_send_to(send_to: Any): set\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_sent_from", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_sent_from", "target": "{\"name\":\"check_sent_from\",\"args\":[{\"name\":\"sent_from\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"sent_from: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_sent_from(sent_from: Any): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:dump", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:dump", "target": "{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:load", "target": "{\"name\":\"load\",\"args\":[{\"name\":\"val\",\"type_\":\"\",\"default_\":\"\",\"description\":\"val\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(val)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:ser_instruct_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:ser_instruct_content", "target": "{\"name\":\"ser_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"ic: BaseModel\",\"compositions\":[\"BaseModel\"]}],\"return_args\":{\"type_\":\"Union[dict,None]\",\"description\":\"Union[dict, None]\",\"compositions\":[]},\"description\":\"ser_instruct_content(ic: BaseModel): Union[dict, None]\",\"aggregations\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:to_dict", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:to_dict", "target": "{\"name\":\"to_dict\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"to_dict(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue", "target": "{\"name\":\"MessageQueue\",\"package\":\"metagpt/schema.py:MessageQueue\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"dump\":{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]},\"empty\":{\"name\":\"empty\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"empty()\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'MessageQueue'\",\"description\":\"'MessageQueue'\",\"compositions\":[\"MessageQueue\"]},\"description\":\"load(data): 'MessageQueue'\",\"aggregations\":[\"MessageQueue\"]},\"pop\":{\"name\":\"pop\",\"args\":[],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"pop(): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]},\"pop_all\":{\"name\":\"pop_all\",\"args\":[],\"return_args\":{\"type_\":\"List[Message]\",\"description\":\"List[Message]\",\"compositions\":[\"Message\"]},\"description\":\"pop_all(): List[Message]\",\"aggregations\":[\"Message\"]},\"push\":{\"name\":\"push\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"push(msg: Message)\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"MessageQueue\",\"Message\\\\\",\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:model_config"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:dump"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:empty"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:load"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:pop"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:pop_all"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:push"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:MessageQueue", "target": "?:MessageQueue"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:MessageQueue", "target": "?:Message\\"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:MessageQueue", "target": "?:Message"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/roles/role.py:RoleContext:msg_buffer"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:MessageQueue", "target": "{\"lineno\":527,\"end_lineno\":596,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MessageQueue\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:MessageQueue", "target": "{\"name\":\"MessageQueue\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:dump", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:dump", "target": "{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:empty", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:empty", "target": "{\"name\":\"empty\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"empty()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:load", "target": "{\"name\":\"load\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'MessageQueue'\",\"description\":\"'MessageQueue'\",\"compositions\":[\"MessageQueue\"]},\"description\":\"load(data): 'MessageQueue'\",\"aggregations\":[\"MessageQueue\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:pop", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:pop", "target": "{\"name\":\"pop\",\"args\":[],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"pop(): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:pop_all", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:pop_all", "target": "{\"name\":\"pop_all\",\"args\":[],\"return_args\":{\"type_\":\"List[Message]\",\"description\":\"List[Message]\",\"compositions\":[\"Message\"]},\"description\":\"pop_all(): List[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:push", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:push", "target": "{\"name\":\"push\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"push(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:MessageType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:MessageType", "target": "{\"name\":\"MessageType\",\"package\":\"metagpt/roles/assistant.py:MessageType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:MessageType", "target": "metagpt/roles/assistant.py:MessageType:name"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:MessageType", "target": "{\"lineno\":32,\"end_lineno\":34,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MessageType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/assistant.py:MessageType", "target": "{\"name\":\"MessageType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:MessageType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:MessageType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/metagpt_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/metagpt_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/metagpt_api.py", "target": "metagpt/provider/metagpt_api.py:MetaGPTLLM"}, {"predicate": "is", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "{\"name\":\"MetaGPTLLM\",\"package\":\"metagpt/provider/metagpt_api.py:MetaGPTLLM\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "metagpt/provider/metagpt_api.py:MetaGPTLLM:_calc_usage"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "{\"lineno\":16,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MetaGPTLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "{\"name\":\"MetaGPTLLM\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "{\"name\":\"MetaGPTText2Image\",\"package\":\"metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image\",\"attributes\":{\"model_url\":{\"name\":\"model_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_url\",\"compositions\":[]}},\"methods\":{\"text_2_image\":{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:model_url"}, {"predicate": "has_class_method", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image"}, {"predicate": "has_class_method", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "{\"lineno\":19,\"end_lineno\":81,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MetaGPTText2Image\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "{\"name\":\"MetaGPTText2Image\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:model_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:model_url", "target": "{\"name\":\"model_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_url\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image", "target": "{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/strategy/tot_schema.py", "target": "metagpt/strategy/tot_schema.py:MethodSelect"}, {"predicate": "has_class", "source": "metagpt/strategy/tot_schema.py", "target": "metagpt/strategy/tot_schema.py:Strategy"}, {"predicate": "has_class", "source": "metagpt/strategy/tot_schema.py", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "{\"name\":\"MethodSelect\",\"package\":\"metagpt/strategy/tot_schema.py:MethodSelect\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "metagpt/strategy/tot_schema.py:MethodSelect:name"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MethodSelect\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "{\"name\":\"MethodSelect\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:MethodSelect:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:MethodSelect:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale", "target": "{\"name\":\"MinMaxScale\",\"package\":\"metagpt/tools/libs/data_preprocess.py:MinMaxScale\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"MinMaxScaler\",\"default_\":\"\",\"description\":\"model : MinMaxScaler\",\"compositions\":[\"MinMaxScaler\"]}},\"methods\":{},\"compositions\":[\"MinMaxScaler\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale", "target": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:features"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale", "target": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:model"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale", "target": "?:MinMaxScaler"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale", "target": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale", "target": "{\"lineno\":110,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MinMaxScale\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale", "target": "{\"name\":\"MinMaxScale\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"MinMaxScaler\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:features", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:features", "target": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:model", "target": "{\"name\":\"model\",\"type_\":\"MinMaxScaler\",\"default_\":\"\",\"description\":\"model : MinMaxScaler\",\"compositions\":[\"MinMaxScaler\"]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/mincraft_env/mincraft_env.py", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "{\"name\":\"MincraftEnv\",\"package\":\"metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv\",\"attributes\":{\"chest_memory\":{\"name\":\"chest_memory\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"chest_memory : dict[str, Any]\",\"compositions\":[]},\"chest_observation\":{\"name\":\"chest_observation\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chest_observation : str\",\"compositions\":[]},\"code\":{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]},\"completed_tasks\":{\"name\":\"completed_tasks\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"completed_tasks : list[str]\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]},\"critique\":{\"name\":\"critique\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"critique : str\",\"compositions\":[]},\"current_task\":{\"name\":\"current_task\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_task : str\",\"compositions\":[]},\"event\":{\"name\":\"event\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"event : dict[str, Any]\",\"compositions\":[]},\"event_summary\":{\"name\":\"event_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"event_summary : str\",\"compositions\":[]},\"failed_tasks\":{\"name\":\"failed_tasks\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"failed_tasks : list[str]\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"program_code\":{\"name\":\"program_code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_code : str\",\"compositions\":[]},\"program_name\":{\"name\":\"program_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_name : str\",\"compositions\":[]},\"programs\":{\"name\":\"programs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"programs\",\"compositions\":[]},\"progress\":{\"name\":\"progress\",\"type_\":\"\",\"default_\":\"\",\"description\":\"progress\",\"compositions\":[]},\"qa_cache\":{\"name\":\"qa_cache\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"qa_cache : dict[str, str]\",\"compositions\":[]},\"qa_cache_questions_vectordb\":{\"name\":\"qa_cache_questions_vectordb\",\"type_\":\"\",\"default_\":\"\",\"description\":\"qa_cache_questions_vectordb\",\"compositions\":[]},\"retrieve_skills\":{\"name\":\"retrieve_skills\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"retrieve_skills : list[str]\",\"compositions\":[]},\"runtime_status\":{\"name\":\"runtime_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"runtime_status : bool\",\"compositions\":[]},\"skill_desp\":{\"name\":\"skill_desp\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_desp : str\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"skills : dict\",\"compositions\":[]},\"task_execution_time\":{\"name\":\"task_execution_time\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"task_execution_time : float\",\"compositions\":[]},\"vectordb\":{\"name\":\"vectordb\",\"type_\":\"\",\"default_\":\"\",\"description\":\"vectordb\",\"compositions\":[]}},\"methods\":{\"append_skill\":{\"name\":\"append_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"skill: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"append_skill(skill: dict)\",\"aggregations\":[]},\"on_event_execute\":{\"name\":\"on_event_execute\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_event_execute()\",\"aggregations\":[]},\"on_event_retrieve\":{\"name\":\"on_event_retrieve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_event_retrieve()\",\"aggregations\":[]},\"register_roles\":{\"name\":\"register_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Minecraft]\",\"default_\":\"\",\"description\":\"roles: Iterable['Minecraft']\",\"compositions\":[\"Iterable\",\"Minecraft\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register_roles(roles: Iterable['Minecraft'])\",\"aggregations\":[\"Minecraft\",\"Iterable\"]},\"reset_block_info\":{\"name\":\"reset_block_info\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset_block_info()\",\"aggregations\":[]},\"save_sorted_tasks\":{\"name\":\"save_sorted_tasks\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_sorted_tasks()\",\"aggregations\":[]},\"set_mc_port\":{\"name\":\"set_mc_port\",\"args\":[{\"name\":\"mc_port\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mc_port\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_port(mc_port)\",\"aggregations\":[]},\"set_mc_resume\":{\"name\":\"set_mc_resume\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_resume()\",\"aggregations\":[]},\"summarize_chatlog\":{\"name\":\"summarize_chatlog\",\"args\":[{\"name\":\"events\",\"type_\":\"\",\"default_\":\"\",\"description\":\"events\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_chatlog(events)\",\"aggregations\":[]},\"update_chest_memory\":{\"name\":\"update_chest_memory\",\"args\":[{\"name\":\"events\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"events: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_chest_memory(events: dict)\",\"aggregations\":[]},\"update_chest_observation\":{\"name\":\"update_chest_observation\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_chest_observation()\",\"aggregations\":[]},\"update_code\":{\"name\":\"update_code\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_code(code: str)\",\"aggregations\":[]},\"update_context\":{\"name\":\"update_context\",\"args\":[{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_context(context: str)\",\"aggregations\":[]},\"update_critique\":{\"name\":\"update_critique\",\"args\":[{\"name\":\"critique\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"critique: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_critique(critique: str)\",\"aggregations\":[]},\"update_event\":{\"name\":\"update_event\",\"args\":[{\"name\":\"event\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"event: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_event(event: dict)\",\"aggregations\":[]},\"update_exploration_progress\":{\"name\":\"update_exploration_progress\",\"args\":[{\"name\":\"success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"success: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_exploration_progress(success: bool)\",\"aggregations\":[]},\"update_program_code\":{\"name\":\"update_program_code\",\"args\":[{\"name\":\"program_code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_code: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_program_code(program_code: str)\",\"aggregations\":[]},\"update_program_name\":{\"name\":\"update_program_name\",\"args\":[{\"name\":\"program_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_program_name(program_name: str)\",\"aggregations\":[]},\"update_qa_cache\":{\"name\":\"update_qa_cache\",\"args\":[{\"name\":\"qa_cache\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"qa_cache: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_qa_cache(qa_cache: dict)\",\"aggregations\":[]},\"update_retrieve_skills\":{\"name\":\"update_retrieve_skills\",\"args\":[{\"name\":\"retrieve_skills\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"retrieve_skills: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_retrieve_skills(retrieve_skills: list)\",\"aggregations\":[]},\"update_skill_desp\":{\"name\":\"update_skill_desp\",\"args\":[{\"name\":\"skill_desp\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_desp: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_skill_desp(skill_desp: str)\",\"aggregations\":[]},\"update_task\":{\"name\":\"update_task\",\"args\":[{\"name\":\"task\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_task(task: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Minecraft\",\"Iterable\"]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:chest_memory"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:chest_observation"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:code"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:completed_tasks"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:context"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:critique"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:current_task"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:event"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:event_summary"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:failed_tasks"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:model_config"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:program_code"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:program_name"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:programs"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:progress"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:qa_cache"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:qa_cache_questions_vectordb"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:retrieve_skills"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:runtime_status"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:skill_desp"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:skills"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:task_execution_time"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:vectordb"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:append_skill"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:on_event_execute"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:on_event_retrieve"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:register_roles"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:reset_block_info"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:save_sorted_tasks"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:set_mc_port"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:set_mc_resume"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:summarize_chatlog"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_chest_memory"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_chest_observation"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_code"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_context"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_critique"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_event"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_exploration_progress"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_program_code"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_program_name"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_qa_cache"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_retrieve_skills"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_skill_desp"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_task"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "?:Minecraft"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "?:Iterable"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/base_env.py:Environment"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "{\"lineno\":23,\"end_lineno\":391,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MincraftEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv", "target": "{\"name\":\"MincraftEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"chest_memory\",\"visibility\":\"+\",\"value_type\":\"dict[str,Any]\",\"default_value\":\"\"},{\"name\":\"chest_observation\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"completed_tasks\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"critique\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"current_task\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"event\",\"visibility\":\"+\",\"value_type\":\"dict[str,Any]\",\"default_value\":\"\"},{\"name\":\"event_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"failed_tasks\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"program_code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"program_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"programs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"progress\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"qa_cache\",\"visibility\":\"+\",\"value_type\":\"dict[str,str]\",\"default_value\":\"\"},{\"name\":\"qa_cache_questions_vectordb\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"retrieve_skills\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"runtime_status\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"skill_desp\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"task_execution_time\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"vectordb\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:chest_memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:chest_memory", "target": "{\"name\":\"chest_memory\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"chest_memory : dict[str, Any]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:chest_observation", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:chest_observation", "target": "{\"name\":\"chest_observation\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chest_observation : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:code", "target": "{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:completed_tasks", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:completed_tasks", "target": "{\"name\":\"completed_tasks\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"completed_tasks : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:context", "target": "{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:critique", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:critique", "target": "{\"name\":\"critique\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"critique : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:current_task", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:current_task", "target": "{\"name\":\"current_task\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_task : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:event", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:event", "target": "{\"name\":\"event\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"event : dict[str, Any]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:event_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:event_summary", "target": "{\"name\":\"event_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"event_summary : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:failed_tasks", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:failed_tasks", "target": "{\"name\":\"failed_tasks\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"failed_tasks : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:program_code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:program_code", "target": "{\"name\":\"program_code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_code : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:program_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:program_name", "target": "{\"name\":\"program_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:programs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:programs", "target": "{\"name\":\"programs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"programs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:programs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:progress", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:progress", "target": "{\"name\":\"progress\",\"type_\":\"\",\"default_\":\"\",\"description\":\"progress\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:progress", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:qa_cache", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:qa_cache", "target": "{\"name\":\"qa_cache\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"qa_cache : dict[str, str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:qa_cache_questions_vectordb", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:qa_cache_questions_vectordb", "target": "{\"name\":\"qa_cache_questions_vectordb\",\"type_\":\"\",\"default_\":\"\",\"description\":\"qa_cache_questions_vectordb\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:retrieve_skills", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:retrieve_skills", "target": "{\"name\":\"retrieve_skills\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"retrieve_skills : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:runtime_status", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:runtime_status", "target": "{\"name\":\"runtime_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"runtime_status : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:skill_desp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:skill_desp", "target": "{\"name\":\"skill_desp\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_desp : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:skills", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:skills", "target": "{\"name\":\"skills\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"skills : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:task_execution_time", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:task_execution_time", "target": "{\"name\":\"task_execution_time\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"task_execution_time : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:vectordb", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:vectordb", "target": "{\"name\":\"vectordb\",\"type_\":\"\",\"default_\":\"\",\"description\":\"vectordb\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:append_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:append_skill", "target": "{\"name\":\"append_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"skill: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"append_skill(skill: dict)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:on_event_execute", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:on_event_execute", "target": "{\"name\":\"on_event_execute\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_event_execute()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:on_event_retrieve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:on_event_retrieve", "target": "{\"name\":\"on_event_retrieve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_event_retrieve()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:register_roles", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:register_roles", "target": "{\"name\":\"register_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Minecraft]\",\"default_\":\"\",\"description\":\"roles: Iterable['Minecraft']\",\"compositions\":[\"Iterable\",\"Minecraft\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register_roles(roles: Iterable['Minecraft'])\",\"aggregations\":[\"Minecraft\",\"Iterable\"]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:reset_block_info", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:reset_block_info", "target": "{\"name\":\"reset_block_info\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset_block_info()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:save_sorted_tasks", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:save_sorted_tasks", "target": "{\"name\":\"save_sorted_tasks\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_sorted_tasks()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:set_mc_port", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:set_mc_port", "target": "{\"name\":\"set_mc_port\",\"args\":[{\"name\":\"mc_port\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mc_port\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_port(mc_port)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:set_mc_resume", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:set_mc_resume", "target": "{\"name\":\"set_mc_resume\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_resume()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:summarize_chatlog", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:summarize_chatlog", "target": "{\"name\":\"summarize_chatlog\",\"args\":[{\"name\":\"events\",\"type_\":\"\",\"default_\":\"\",\"description\":\"events\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_chatlog(events)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_chest_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_chest_memory", "target": "{\"name\":\"update_chest_memory\",\"args\":[{\"name\":\"events\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"events: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_chest_memory(events: dict)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_chest_observation", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_chest_observation", "target": "{\"name\":\"update_chest_observation\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_chest_observation()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_code", "target": "{\"name\":\"update_code\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_code(code: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_context", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_context", "target": "{\"name\":\"update_context\",\"args\":[{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_context(context: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_critique", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_critique", "target": "{\"name\":\"update_critique\",\"args\":[{\"name\":\"critique\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"critique: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_critique(critique: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_event", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_event", "target": "{\"name\":\"update_event\",\"args\":[{\"name\":\"event\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"event: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_event(event: dict)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_exploration_progress", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_exploration_progress", "target": "{\"name\":\"update_exploration_progress\",\"args\":[{\"name\":\"success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"success: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_exploration_progress(success: bool)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_program_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_program_code", "target": "{\"name\":\"update_program_code\",\"args\":[{\"name\":\"program_code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_code: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_program_code(program_code: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_program_name", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_program_name", "target": "{\"name\":\"update_program_name\",\"args\":[{\"name\":\"program_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"program_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_program_name(program_name: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_qa_cache", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_qa_cache", "target": "{\"name\":\"update_qa_cache\",\"args\":[{\"name\":\"qa_cache\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"qa_cache: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_qa_cache(qa_cache: dict)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_retrieve_skills", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_retrieve_skills", "target": "{\"name\":\"update_retrieve_skills\",\"args\":[{\"name\":\"retrieve_skills\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"retrieve_skills: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_retrieve_skills(retrieve_skills: list)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_skill_desp", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_skill_desp", "target": "{\"name\":\"update_skill_desp\",\"args\":[{\"name\":\"skill_desp\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_desp: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_skill_desp(skill_desp: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_task", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_env.py:MincraftEnv:update_task", "target": "{\"name\":\"update_task\",\"args\":[{\"name\":\"task\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_task(task: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "{\"name\":\"MincraftExtEnv\",\"package\":\"metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv\",\"attributes\":{\"connected\":{\"name\":\"connected\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"connected : bool\",\"compositions\":[]},\"has_reset\":{\"name\":\"has_reset\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"has_reset : bool\",\"compositions\":[]},\"mc_port\":{\"name\":\"mc_port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"mc_port : Optional[int]\",\"compositions\":[]},\"mineflayer\":{\"name\":\"mineflayer\",\"type_\":\"Optional[SubprocessMonitor]\",\"default_\":\"\",\"description\":\"mineflayer : Optional[SubprocessMonitor]\",\"compositions\":[\"SubprocessMonitor\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"request_timeout\":{\"name\":\"request_timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"request_timeout : int\",\"compositions\":[]},\"reset_options\":{\"name\":\"reset_options\",\"type_\":\"Optional[dict]\",\"default_\":\"\",\"description\":\"reset_options : Optional[dict]\",\"compositions\":[]},\"server\":{\"name\":\"server\",\"type_\":\"\",\"default_\":\"\",\"description\":\"server\",\"compositions\":[]},\"server_host\":{\"name\":\"server_host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"server_host : str\",\"compositions\":[]},\"server_paused\":{\"name\":\"server_paused\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"server_paused : bool\",\"compositions\":[]},\"server_port\":{\"name\":\"server_port\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"server_port : str\",\"compositions\":[]},\"warm_up\":{\"name\":\"warm_up\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"warm_up : dict\",\"compositions\":[]}},\"methods\":{\"check_process\":{\"name\":\"check_process\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"check_process(): dict\",\"aggregations\":[]},\"close\":{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"close(): bool\",\"aggregations\":[]},\"pause\":{\"name\":\"pause\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"pause(): bool\",\"aggregations\":[]},\"reset\":{\"name\":\"reset\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"reset(): dict\",\"aggregations\":[]},\"set_mc_port\":{\"name\":\"set_mc_port\",\"args\":[{\"name\":\"mc_port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mc_port: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_port(mc_port: int)\",\"aggregations\":[]},\"step\":{\"name\":\"step\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"programs\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"programs: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"step(code: str, programs: str): dict\",\"aggregations\":[]},\"unpause\":{\"name\":\"unpause\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"unpause(): bool\",\"aggregations\":[]}},\"compositions\":[\"SubprocessMonitor\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:connected"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:has_reset"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:mc_port"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:mineflayer"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:model_config"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:request_timeout"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:reset_options"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_host"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_paused"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_port"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:warm_up"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:check_process"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:close"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:pause"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:reset"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:set_mc_port"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:step"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:unpause"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/base_env.py:ExtEnv"}, {"predicate": "is_composite_of", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:_post_init_ext_env"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "{\"lineno\":25,\"end_lineno\":180,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MincraftExtEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "{\"name\":\"MincraftExtEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"connected\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"has_reset\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"mc_port\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"mineflayer\",\"visibility\":\"+\",\"value_type\":\"Optional[SubprocessMonitor]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"request_timeout\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"reset_options\",\"visibility\":\"+\",\"value_type\":\"Optional[dict]\",\"default_value\":\"\"},{\"name\":\"server\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"server_host\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"server_paused\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"server_port\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"warm_up\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv", "target": "?:SubprocessMonitor"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:connected", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:connected", "target": "{\"name\":\"connected\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"connected : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:has_reset", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:has_reset", "target": "{\"name\":\"has_reset\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"has_reset : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:mc_port", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:mc_port", "target": "{\"name\":\"mc_port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"mc_port : Optional[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:mineflayer", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:mineflayer", "target": "{\"name\":\"mineflayer\",\"type_\":\"Optional[SubprocessMonitor]\",\"default_\":\"\",\"description\":\"mineflayer : Optional[SubprocessMonitor]\",\"compositions\":[\"SubprocessMonitor\"]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:request_timeout", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:request_timeout", "target": "{\"name\":\"request_timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"request_timeout : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:reset_options", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:reset_options", "target": "{\"name\":\"reset_options\",\"type_\":\"Optional[dict]\",\"default_\":\"\",\"description\":\"reset_options : Optional[dict]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server", "target": "{\"name\":\"server\",\"type_\":\"\",\"default_\":\"\",\"description\":\"server\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_host", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_host", "target": "{\"name\":\"server_host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"server_host : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_paused", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_paused", "target": "{\"name\":\"server_paused\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"server_paused : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_port", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:server_port", "target": "{\"name\":\"server_port\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"server_port : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:warm_up", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:warm_up", "target": "{\"name\":\"warm_up\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"warm_up : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:check_process", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:check_process", "target": "{\"name\":\"check_process\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"check_process(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:close", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:close", "target": "{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"close(): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:pause", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:pause", "target": "{\"name\":\"pause\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"pause(): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:reset", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:reset", "target": "{\"name\":\"reset\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"reset(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:set_mc_port", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:set_mc_port", "target": "{\"name\":\"set_mc_port\",\"args\":[{\"name\":\"mc_port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mc_port: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_mc_port(mc_port: int)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:step", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:step", "target": "{\"name\":\"step\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"programs\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"programs: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"step(code: str, programs: str): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:unpause", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:unpause", "target": "{\"name\":\"unpause\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"unpause(): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/moderation.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/moderation.py", "target": "metagpt/tools/moderation.py:Moderation"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation", "target": "{\"name\":\"Moderation\",\"package\":\"metagpt/tools/moderation.py:Moderation\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"amoderation\":{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]},\"amoderation_with_categories\":{\"name\":\"amoderation_with_categories\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation_with_categories(content: Union[str, list[str]])\",\"aggregations\":[]},\"handle_moderation_results\":{\"name\":\"handle_moderation_results\",\"args\":[{\"name\":\"results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"results\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"handle_moderation_results(results)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:llm"}, {"predicate": "has_class_method", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:amoderation"}, {"predicate": "has_class_method", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:amoderation_with_categories"}, {"predicate": "has_class_method", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:handle_moderation_results"}, {"predicate": "has_class_method", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:Moderation", "target": "{\"lineno\":13,\"end_lineno\":40,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Moderation\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/moderation.py:Moderation", "target": "{\"name\":\"Moderation\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:amoderation", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation:amoderation", "target": "{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:amoderation_with_categories", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation:amoderation_with_categories", "target": "{\"name\":\"amoderation_with_categories\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation_with_categories(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:handle_moderation_results", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation:handle_moderation_results", "target": "{\"name\":\"handle_moderation_results\",\"args\":[{\"name\":\"results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"results\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"handle_moderation_results(results)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:NaiveSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:NaiveSolver", "target": "{\"name\":\"NaiveSolver\",\"package\":\"metagpt/strategy/solver.py:NaiveSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/solver.py:NaiveSolver", "target": "metagpt/strategy/solver.py:NaiveSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/solver.py:NaiveSolver", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:NaiveSolver", "target": "{\"lineno\":35,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"NaiveSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/solver.py:NaiveSolver", "target": "{\"name\":\"NaiveSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:NaiveSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:NaiveSolver:solve", "target": "{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:NoMoneyException", "target": "{\"name\":\"NoMoneyException\",\"package\":\"metagpt/utils/common.py:NoMoneyException\",\"attributes\":{\"amount\":{\"name\":\"amount\",\"type_\":\"\",\"default_\":\"\",\"description\":\"amount\",\"compositions\":[]},\"message\":{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/common.py:NoMoneyException", "target": "metagpt/utils/common.py:NoMoneyException:amount"}, {"predicate": "has_class_property", "source": "metagpt/utils/common.py:NoMoneyException", "target": "metagpt/utils/common.py:NoMoneyException:message"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:NoMoneyException", "target": "metagpt/utils/common.py:NoMoneyException:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:NoMoneyException", "target": "metagpt/utils/common.py:NoMoneyException:__str__"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:NoMoneyException", "target": "{\"lineno\":313,\"end_lineno\":322,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"NoMoneyException\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/common.py:NoMoneyException", "target": "{\"name\":\"NoMoneyException\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"amount\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException:amount", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:NoMoneyException:amount", "target": "{\"name\":\"amount\",\"type_\":\"\",\"default_\":\"\",\"description\":\"amount\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException:message", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:NoMoneyException:message", "target": "{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "{\"name\":\"OCRResults\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:OCRResults\",\"attributes\":{\"ocr_result\":{\"name\":\"ocr_result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ocr_result : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "metagpt/roles/invoice_ocr_assistant.py:OCRResults:ocr_result"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "{\"lineno\":27,\"end_lineno\":28,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OCRResults\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "{\"name\":\"OCRResults\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ocr_result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults:ocr_result", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults:ocr_result", "target": "{\"name\":\"ocr_result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ocr_result : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/ollama_api.py", "target": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "{\"name\":\"OllamaLLM\",\"package\":\"metagpt/provider/ollama_api.py:OllamaLLM\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"http_method\":{\"name\":\"http_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"http_method : str\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]},\"suffix_url\":{\"name\":\"suffix_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"suffix_url : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: dict): str\",\"aggregations\":[]},\"get_usage\":{\"name\":\"get_usage\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(resp: dict): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:client"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:http_method"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:pricing_plan"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:suffix_url"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:use_system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:get_choice_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:get_usage"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:__init_ollama"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_const_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_decode_and_load"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion_stream"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "{\"lineno\":27,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OllamaLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "{\"name\":\"OllamaLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"http_method\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"suffix_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:client", "target": "{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:http_method", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:http_method", "target": "{\"name\":\"http_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"http_method : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:model", "target": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:pricing_plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:pricing_plan", "target": "{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:suffix_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:suffix_url", "target": "{\"name\":\"suffix_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"suffix_url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:use_system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:use_system_prompt", "target": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: dict): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:get_usage", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:get_usage", "target": "{\"name\":\"get_usage\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(resp: dict): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "{\"name\":\"OneHotEncode\",\"package\":\"metagpt/tools/libs/data_preprocess.py:OneHotEncode\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"OneHotEncoder\",\"default_\":\"\",\"description\":\"model : OneHotEncoder\",\"compositions\":[\"OneHotEncoder\"]}},\"methods\":{\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[\"OneHotEncoder\"],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:features"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:model"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:transform"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "?:OneHotEncoder"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "{\"lineno\":165,\"end_lineno\":180,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OneHotEncode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode", "target": "{\"name\":\"OneHotEncode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"OneHotEncoder\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:features", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:features", "target": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:model", "target": "{\"name\":\"model\",\"type_\":\"OneHotEncoder\",\"default_\":\"\",\"description\":\"model : OneHotEncoder\",\"compositions\":[\"OneHotEncoder\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/openai_api.py", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_function", "source": "metagpt/provider/openai_api.py", "target": "metagpt/provider/openai_api.py:log_and_reraise"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "{\"name\":\"OpenAILLM\",\"package\":\"metagpt/provider/openai_api.py:OpenAILLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"AsyncOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncOpenAI\",\"compositions\":[\"AsyncOpenAI\"]},\"auto_max_tokens\":{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}},\"methods\":{\"aask_code\":{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: list[dict]): dict\",\"aggregations\":[]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ChatCompletion\",\"description\":\"ChatCompletion\",\"compositions\":[\"ChatCompletion\"]},\"description\":\"acompletion(messages: list[dict], timeout): ChatCompletion\",\"aggregations\":[\"ChatCompletion\"]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"amoderation\":{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]},\"aspeech_to_text\":{\"name\":\"aspeech_to_text\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"aspeech_to_text()\",\"aggregations\":[]},\"atext_to_speech\":{\"name\":\"atext_to_speech\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"atext_to_speech()\",\"aggregations\":[]},\"gen_image\":{\"name\":\"gen_image\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"size\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"size: str\",\"compositions\":[]},{\"name\":\"quality\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"quality: str\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]},{\"name\":\"resp_format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list['Image']\",\"description\":\"list['Image']\",\"compositions\":[\"Image\"]},\"description\":\"gen_image(prompt: str, size: str, quality: str, model: str, resp_format: str): list['Image']\",\"aggregations\":[\"Image\"]},\"get_choice_function_arguments\":{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: ChatCompletion): dict\",\"aggregations\":[\"ChatCompletion\"]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: ChatCompletion): str\",\"aggregations\":[\"ChatCompletion\"]},\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[\"AsyncOpenAI\",\"CostManager\"],\"aggregations\":[\"ChatCompletion\",\"Image\",\"Costs\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:aclient"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:auto_max_tokens"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:pricing_plan"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:aask_code"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:amoderation"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:aspeech_to_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:atext_to_speech"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:gen_image"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_function_arguments"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:get_costs"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:AsyncOpenAI"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:ChatCompletion"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:Image"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:Costs"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "is_composite_of", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_init_model"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_init_client"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_make_client_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_get_proxy_params"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_stream"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_cons_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_func_configs"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_process_message"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_function"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_calc_usage"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_get_max_tokens"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "{\"lineno\":54,\"end_lineno\":287,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAILLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "{\"name\":\"OpenAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"AsyncOpenAI\",\"default_value\":\"\"},{\"name\":\"auto_max_tokens\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:CostManager"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:aclient", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:aclient", "target": "{\"name\":\"aclient\",\"type_\":\"AsyncOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncOpenAI\",\"compositions\":[\"AsyncOpenAI\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:auto_max_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:auto_max_tokens", "target": "{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:model", "target": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:pricing_plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:pricing_plan", "target": "{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:aask_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:aask_code", "target": "{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: list[dict]): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ChatCompletion\",\"description\":\"ChatCompletion\",\"compositions\":[\"ChatCompletion\"]},\"description\":\"acompletion(messages: list[dict], timeout): ChatCompletion\",\"aggregations\":[\"ChatCompletion\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:amoderation", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:amoderation", "target": "{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:aspeech_to_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:aspeech_to_text", "target": "{\"name\":\"aspeech_to_text\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"aspeech_to_text()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:atext_to_speech", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:atext_to_speech", "target": "{\"name\":\"atext_to_speech\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"atext_to_speech()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:gen_image", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:gen_image", "target": "{\"name\":\"gen_image\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"size\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"size: str\",\"compositions\":[]},{\"name\":\"quality\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"quality: str\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]},{\"name\":\"resp_format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list['Image']\",\"description\":\"list['Image']\",\"compositions\":[\"Image\"]},\"description\":\"gen_image(prompt: str, size: str, quality: str, model: str, resp_format: str): list['Image']\",\"aggregations\":[\"Image\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_function_arguments", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_function_arguments", "target": "{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: ChatCompletion): dict\",\"aggregations\":[\"ChatCompletion\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: ChatCompletion): str\",\"aggregations\":[\"ChatCompletion\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_costs", "target": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "{\"name\":\"OpenAIResponse\",\"package\":\"metagpt/provider/general_api_base.py:OpenAIResponse\",\"attributes\":{\"data\":{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},\"operation_location\":{\"name\":\"operation_location\",\"type_\":\"\",\"default_\":\"\",\"description\":\"operation_location\",\"compositions\":[]},\"organization\":{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization\",\"compositions\":[]},\"request_id\":{\"name\":\"request_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"request_id\",\"compositions\":[]},\"response_ms\":{\"name\":\"response_ms\",\"type_\":\"\",\"default_\":\"\",\"description\":\"response_ms\",\"compositions\":[]},\"retry_after\":{\"name\":\"retry_after\",\"type_\":\"\",\"default_\":\"\",\"description\":\"retry_after\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:data"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:organization"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "{\"lineno\":123,\"end_lineno\":150,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIResponse\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "{\"name\":\"OpenAIResponse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"operation_location\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"organization\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"request_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"response_ms\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"retry_after\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:data", "target": "{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location", "target": "{\"name\":\"operation_location\",\"type_\":\"\",\"default_\":\"\",\"description\":\"operation_location\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:organization", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:organization", "target": "{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:organization", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id", "target": "{\"name\":\"request_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"request_id\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms", "target": "{\"name\":\"response_ms\",\"type_\":\"\",\"default_\":\"\",\"description\":\"response_ms\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after", "target": "{\"name\":\"retry_after\",\"type_\":\"\",\"default_\":\"\",\"description\":\"retry_after\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "{\"name\":\"OpenAIText2Embedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}},\"methods\":{\"text_2_embedding\":{\"name\":\"text_2_embedding\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_embedding(text, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:api_key"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:proxy"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:text_2_embedding"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "{\"lineno\":44,\"end_lineno\":71,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIText2Embedding\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "{\"name\":\"OpenAIText2Embedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:text_2_embedding", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:text_2_embedding", "target": "{\"name\":\"text_2_embedding\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_embedding(text, model)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_image.py", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image"}, {"predicate": "has_function", "source": "metagpt/tools/openai_text_to_image.py", "target": "metagpt/tools/openai_text_to_image.py:oas3_openai_text_to_image"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "{\"name\":\"OpenAIText2Image\",\"package\":\"metagpt/tools/openai_text_to_image.py:OpenAIText2Image\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"get_image_data\":{\"name\":\"get_image_data\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_image_data(url)\",\"aggregations\":[]},\"text_2_image\":{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:get_image_data"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:text_2_image"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "{\"lineno\":17,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIText2Image\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "{\"name\":\"OpenAIText2Image\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:get_image_data", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:get_image_data", "target": "{\"name\":\"get_image_data\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_image_data(url)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:text_2_image", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:text_2_image", "target": "{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/open_llm_api.py", "target": "metagpt/provider/open_llm_api.py:OpenLLM"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "{\"name\":\"OpenLLM\",\"package\":\"metagpt/provider/open_llm_api.py:OpenLLM\",\"attributes\":{\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}},\"methods\":{\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:cost_manager"}, {"predicate": "has_class_method", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:get_costs"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "?:Costs"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:_make_client_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:_calc_usage"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "{\"lineno\":16,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "{\"name\":\"OpenLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/open_llm_api.py:OpenLLM:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:get_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/open_llm_api.py:OpenLLM:get_costs", "target": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode", "target": "{\"name\":\"OrdinalEncode\",\"package\":\"metagpt/tools/libs/data_preprocess.py:OrdinalEncode\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"OrdinalEncoder\",\"default_\":\"\",\"description\":\"model : OrdinalEncoder\",\"compositions\":[\"OrdinalEncoder\"]}},\"methods\":{},\"compositions\":[\"OrdinalEncoder\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode", "target": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:features"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode", "target": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:model"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode", "target": "?:OrdinalEncoder"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode", "target": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode", "target": "{\"lineno\":154,\"end_lineno\":161,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OrdinalEncode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode", "target": "{\"name\":\"OrdinalEncode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"OrdinalEncoder\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:features", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:features", "target": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:model", "target": "{\"name\":\"model\",\"type_\":\"OrdinalEncoder\",\"default_\":\"\",\"description\":\"model : OrdinalEncoder\",\"compositions\":[\"OrdinalEncoder\"]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser", "target": "{\"name\":\"OutputParser\",\"package\":\"metagpt/utils/common.py:OutputParser\",\"attributes\":{},\"methods\":{\"extract_content\":{\"name\":\"extract_content\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_content(text, tag)\",\"aggregations\":[]},\"extract_struct\":{\"name\":\"extract_struct\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"data_type\",\"type_\":\"Union[type(list),type(dict)]\",\"default_\":\"\",\"description\":\"data_type: Union[type(list), type(dict)]\",\"compositions\":[\"type\"]}],\"return_args\":{\"type_\":\"Union[list,dict]\",\"description\":\"Union[list, dict]\",\"compositions\":[]},\"description\":\"extract_struct(text: str, data_type: Union[type(list), type(dict)]): Union[list, dict]\",\"aggregations\":[\"type\"]},\"parse_blocks\":{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]},\"parse_code\":{\"name\":\"parse_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(text: str, lang: str): str\",\"aggregations\":[]},\"parse_data\":{\"name\":\"parse_data\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data(data)\",\"aggregations\":[]},\"parse_data_with_mapping\":{\"name\":\"parse_data_with_mapping\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mapping\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data_with_mapping(data, mapping)\",\"aggregations\":[]},\"parse_file_list\":{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(text: str): list[str]\",\"aggregations\":[]},\"parse_python_code\":{\"name\":\"parse_python_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_python_code(text: str): str\",\"aggregations\":[]},\"parse_str\":{\"name\":\"parse_str\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(text: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"type\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:extract_content"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:extract_struct"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_blocks"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_code"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_data"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_data_with_mapping"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_file_list"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_python_code"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_str"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/common.py:OutputParser", "target": "?:type"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:OutputParser", "target": "{\"lineno\":63,\"end_lineno\":237,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OutputParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/common.py:OutputParser", "target": "{\"name\":\"OutputParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:extract_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:extract_content", "target": "{\"name\":\"extract_content\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_content(text, tag)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:extract_struct", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:extract_struct", "target": "{\"name\":\"extract_struct\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"data_type\",\"type_\":\"Union[type(list),type(dict)]\",\"default_\":\"\",\"description\":\"data_type: Union[type(list), type(dict)]\",\"compositions\":[\"type\"]}],\"return_args\":{\"type_\":\"Union[list,dict]\",\"description\":\"Union[list, dict]\",\"compositions\":[]},\"description\":\"extract_struct(text: str, data_type: Union[type(list), type(dict)]): Union[list, dict]\",\"aggregations\":[\"type\"]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_blocks", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_blocks", "target": "{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_code", "target": "{\"name\":\"parse_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(text: str, lang: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_data", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_data", "target": "{\"name\":\"parse_data\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data(data)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_data_with_mapping", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_data_with_mapping", "target": "{\"name\":\"parse_data_with_mapping\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mapping\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data_with_mapping(data, mapping)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_file_list", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_file_list", "target": "{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(text: str): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_python_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_python_code", "target": "{\"name\":\"parse_python_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_python_code(text: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_str", "target": "{\"name\":\"parse_str\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(text: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "{\"name\":\"Parameter\",\"package\":\"metagpt/learn/skill_loader.py:Parameter\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]},\"type\":{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "metagpt/learn/skill_loader.py:Parameter:description"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "metagpt/learn/skill_loader.py:Parameter:type"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "{\"lineno\":29,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Parameter\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "{\"name\":\"Parameter\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Parameter:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Parameter:description", "target": "{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Parameter:type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Parameter:type", "target": "{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan", "target": "{\"name\":\"Plan\",\"package\":\"metagpt/schema.py:Plan\",\"attributes\":{\"context\":{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]},\"current_task\":{\"name\":\"current_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task\",\"compositions\":[]},\"current_task_id\":{\"name\":\"current_task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_task_id : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"task_map\":{\"name\":\"task_map\",\"type_\":\"dict[str,Task]\",\"default_\":\"\",\"description\":\"task_map : dict[str, Task]\",\"compositions\":[\"Task\"]},\"tasks\":{\"name\":\"tasks\",\"type_\":\"list[Task]\",\"default_\":\"\",\"description\":\"tasks : list[Task]\",\"compositions\":[\"Task\"]}},\"methods\":{\"add_tasks\":{\"name\":\"add_tasks\",\"args\":[{\"name\":\"tasks\",\"type_\":\"list[Task]\",\"default_\":\"\",\"description\":\"tasks: list[Task]\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_tasks(tasks: list[Task])\",\"aggregations\":[\"Task\"]},\"append_task\":{\"name\":\"append_task\",\"args\":[{\"name\":\"new_task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"new_task: Task\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"append_task(new_task: Task)\",\"aggregations\":[\"Task\"]},\"finish_current_task\":{\"name\":\"finish_current_task\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"finish_current_task()\",\"aggregations\":[]},\"get_finished_tasks\":{\"name\":\"get_finished_tasks\",\"args\":[],\"return_args\":{\"type_\":\"list[Task]\",\"description\":\"list[Task]\",\"compositions\":[\"Task\"]},\"description\":\"get_finished_tasks(): list[Task]\",\"aggregations\":[\"Task\"]},\"has_task_id\":{\"name\":\"has_task_id\",\"args\":[{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"has_task_id(task_id: str): bool\",\"aggregations\":[]},\"replace_task\":{\"name\":\"replace_task\",\"args\":[{\"name\":\"new_task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"new_task: Task\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"replace_task(new_task: Task)\",\"aggregations\":[\"Task\"]},\"reset_task\":{\"name\":\"reset_task\",\"args\":[{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset_task(task_id: str)\",\"aggregations\":[]}},\"compositions\":[\"Task\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:context"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:current_task"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:current_task_id"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:goal"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:task_map"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:tasks"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:add_tasks"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:append_task"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:finish_current_task"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:get_finished_tasks"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:has_task_id"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:replace_task"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:reset_task"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Plan", "target": "metagpt/strategy/planner.py:Planner"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Plan", "target": "metagpt/strategy/planner.py:Planner:plan"}, {"predicate": "is_composite_of", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Task"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:_topological_sort"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Plan", "target": "metagpt/schema.py:Plan:_update_current_task"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:Plan", "target": "{\"lineno\":363,\"end_lineno\":524,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Plan\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:Plan", "target": "{\"name\":\"Plan\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"current_task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"current_task_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_map\",\"visibility\":\"+\",\"value_type\":\"dict[str,Task]\",\"default_value\":\"\"},{\"name\":\"tasks\",\"visibility\":\"+\",\"value_type\":\"list[Task]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Plan", "target": "?:Task"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:context", "target": "{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:current_task", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:current_task", "target": "{\"name\":\"current_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:current_task", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:current_task_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:current_task_id", "target": "{\"name\":\"current_task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_task_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:task_map", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:task_map", "target": "{\"name\":\"task_map\",\"type_\":\"dict[str,Task]\",\"default_\":\"\",\"description\":\"task_map : dict[str, Task]\",\"compositions\":[\"Task\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:tasks", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:tasks", "target": "{\"name\":\"tasks\",\"type_\":\"list[Task]\",\"default_\":\"\",\"description\":\"tasks : list[Task]\",\"compositions\":[\"Task\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:add_tasks", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:add_tasks", "target": "{\"name\":\"add_tasks\",\"args\":[{\"name\":\"tasks\",\"type_\":\"list[Task]\",\"default_\":\"\",\"description\":\"tasks: list[Task]\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_tasks(tasks: list[Task])\",\"aggregations\":[\"Task\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:append_task", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:append_task", "target": "{\"name\":\"append_task\",\"args\":[{\"name\":\"new_task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"new_task: Task\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"append_task(new_task: Task)\",\"aggregations\":[\"Task\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:finish_current_task", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:finish_current_task", "target": "{\"name\":\"finish_current_task\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"finish_current_task()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:get_finished_tasks", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:get_finished_tasks", "target": "{\"name\":\"get_finished_tasks\",\"args\":[],\"return_args\":{\"type_\":\"list[Task]\",\"description\":\"list[Task]\",\"compositions\":[\"Task\"]},\"description\":\"get_finished_tasks(): list[Task]\",\"aggregations\":[\"Task\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:has_task_id", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:has_task_id", "target": "{\"name\":\"has_task_id\",\"args\":[{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"has_task_id(task_id: str): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:replace_task", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:replace_task", "target": "{\"name\":\"replace_task\",\"args\":[{\"name\":\"new_task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"new_task: Task\",\"compositions\":[\"Task\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"replace_task(new_task: Task)\",\"aggregations\":[\"Task\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:reset_task", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Plan:reset_task", "target": "{\"name\":\"reset_task\",\"args\":[{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset_task(task_id: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/planner.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/strategy/planner.py", "target": "metagpt/strategy/planner.py:Planner"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner", "target": "{\"name\":\"Planner\",\"package\":\"metagpt/strategy/planner.py:Planner\",\"attributes\":{\"auto_run\":{\"name\":\"auto_run\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_run : bool\",\"compositions\":[]},\"current_task\":{\"name\":\"current_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task\",\"compositions\":[]},\"current_task_id\":{\"name\":\"current_task_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task_id\",\"compositions\":[]},\"plan\":{\"name\":\"plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"plan\",\"compositions\":[]},\"use_tools\":{\"name\":\"use_tools\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_tools : bool\",\"compositions\":[]},\"working_memory\":{\"name\":\"working_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_memory\",\"compositions\":[]}},\"methods\":{\"ask_review\":{\"name\":\"ask_review\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]},{\"name\":\"auto_run\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_run: bool\",\"compositions\":[]},{\"name\":\"trigger\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"trigger: str\",\"compositions\":[]},{\"name\":\"review_context_len\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"review_context_len: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_review(task_result: TaskResult, auto_run: bool, trigger: str, review_context_len: int)\",\"aggregations\":[\"TaskResult\"]},\"confirm_task\":{\"name\":\"confirm_task\",\"args\":[{\"name\":\"task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"task: Task\",\"compositions\":[\"Task\"]},{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]},{\"name\":\"review\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"review: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"confirm_task(task: Task, task_result: TaskResult, review: str)\",\"aggregations\":[\"TaskResult\",\"Task\"]},\"get_useful_memories\":{\"name\":\"get_useful_memories\",\"args\":[{\"name\":\"task_exclude_field\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task_exclude_field\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_useful_memories(task_exclude_field): list[Message]\",\"aggregations\":[\"Message\"]},\"process_task_result\":{\"name\":\"process_task_result\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"process_task_result(task_result: TaskResult)\",\"aggregations\":[\"TaskResult\"]},\"update_plan\":{\"name\":\"update_plan\",\"args\":[{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal: str\",\"compositions\":[]},{\"name\":\"max_tasks\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_tasks: int\",\"compositions\":[]},{\"name\":\"max_retries\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_retries: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_plan(goal: str, max_tasks: int, max_retries: int)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"TaskResult\",\"Task\",\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:auto_run"}, {"predicate": "has_class_method", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:current_task"}, {"predicate": "has_class_method", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:current_task_id"}, {"predicate": "has_class_property", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:plan"}, {"predicate": "has_class_property", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:use_tools"}, {"predicate": "has_class_property", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:working_memory"}, {"predicate": "has_class_method", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:ask_review"}, {"predicate": "has_class_method", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:confirm_task"}, {"predicate": "has_class_method", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:get_useful_memories"}, {"predicate": "has_class_method", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:process_task_result"}, {"predicate": "has_class_method", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:update_plan"}, {"predicate": "isAggregateOf", "source": "metagpt/strategy/planner.py:Planner", "target": "?:TaskResult"}, {"predicate": "isAggregateOf", "source": "metagpt/strategy/planner.py:Planner", "target": "?:Task"}, {"predicate": "isAggregateOf", "source": "metagpt/strategy/planner.py:Planner", "target": "?:Message"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/roles/role.py:Role"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/roles/role.py:Role:planner"}, {"predicate": "has_class_method", "source": "metagpt/strategy/planner.py:Planner", "target": "metagpt/strategy/planner.py:Planner:__init__"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:Planner", "target": "{\"lineno\":29,\"end_lineno\":139,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Planner\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/planner.py:Planner", "target": "{\"name\":\"Planner\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auto_run\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"current_task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"current_task_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"use_tools\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"working_memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:auto_run", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:auto_run", "target": "{\"name\":\"auto_run\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_run : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:current_task", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:current_task", "target": "{\"name\":\"current_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:current_task", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:current_task_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:current_task_id", "target": "{\"name\":\"current_task_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_task_id\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:current_task_id", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:plan", "target": "{\"name\":\"plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"plan\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:use_tools", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:use_tools", "target": "{\"name\":\"use_tools\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_tools : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:working_memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:working_memory", "target": "{\"name\":\"working_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_memory\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:ask_review", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:ask_review", "target": "{\"name\":\"ask_review\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]},{\"name\":\"auto_run\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_run: bool\",\"compositions\":[]},{\"name\":\"trigger\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"trigger: str\",\"compositions\":[]},{\"name\":\"review_context_len\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"review_context_len: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_review(task_result: TaskResult, auto_run: bool, trigger: str, review_context_len: int)\",\"aggregations\":[\"TaskResult\"]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:confirm_task", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:confirm_task", "target": "{\"name\":\"confirm_task\",\"args\":[{\"name\":\"task\",\"type_\":\"Task\",\"default_\":\"\",\"description\":\"task: Task\",\"compositions\":[\"Task\"]},{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]},{\"name\":\"review\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"review: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"confirm_task(task: Task, task_result: TaskResult, review: str)\",\"aggregations\":[\"TaskResult\",\"Task\"]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:get_useful_memories", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:get_useful_memories", "target": "{\"name\":\"get_useful_memories\",\"args\":[{\"name\":\"task_exclude_field\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task_exclude_field\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_useful_memories(task_exclude_field): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:process_task_result", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:process_task_result", "target": "{\"name\":\"process_task_result\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"process_task_result(task_result: TaskResult)\",\"aggregations\":[\"TaskResult\"]}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:update_plan", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/planner.py:Planner:update_plan", "target": "{\"name\":\"update_plan\",\"args\":[{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal: str\",\"compositions\":[]},{\"name\":\"max_tasks\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_tasks: int\",\"compositions\":[]},{\"name\":\"max_retries\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_retries: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_plan(goal: str, max_tasks: int, max_retries: int)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper"}, {"predicate": "has_function", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "metagpt/tools/web_browser_engine_playwright.py:_get_install_lock"}, {"predicate": "has_function", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "metagpt/tools/web_browser_engine_playwright.py:_install_browsers"}, {"predicate": "has_function", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "metagpt/tools/web_browser_engine_playwright.py:_log_stream"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "{\"name\":\"PlaywrightWrapper\",\"package\":\"metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit']\",\"compositions\":[]},\"context_kwargs\":{\"name\":\"context_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"context_kwargs : dict\",\"compositions\":[]},\"launch_kwargs\":{\"name\":\"launch_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"launch_kwargs : dict\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}},\"compositions\":[],\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:browser_type"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:context_kwargs"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:launch_kwargs"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:proxy"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:run"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "?:WebPage"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "?:WebPage\\"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_scrape"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_run_precheck"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "{\"lineno\":18,\"end_lineno\":94,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PlaywrightWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "{\"name\":\"PlaywrightWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chromium','firefox','webkit']\",\"default_value\":\"\"},{\"name\":\"context_kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"launch_kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:browser_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:browser_type", "target": "{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:context_kwargs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:context_kwargs", "target": "{\"name\":\"context_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"context_kwargs : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:launch_kwargs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:launch_kwargs", "target": "{\"name\":\"launch_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"launch_kwargs : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "{\"name\":\"PolynomialExpansion\",\"package\":\"metagpt/tools/libs/feature_engineering.py:PolynomialExpansion\",\"attributes\":{\"cols\":{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]},\"degree\":{\"name\":\"degree\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"degree : int\",\"compositions\":[]},\"label_col\":{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]},\"poly\":{\"name\":\"poly\",\"type_\":\"PolynomialFeatures\",\"default_\":\"\",\"description\":\"poly : PolynomialFeatures\",\"compositions\":[\"PolynomialFeatures\"]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[\"PolynomialFeatures\"],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:cols"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:degree"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:label_col"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:poly"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:transform"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "?:PolynomialFeatures"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "{\"lineno\":28,\"end_lineno\":67,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PolynomialExpansion\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion", "target": "{\"name\":\"PolynomialExpansion\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"degree\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"label_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"poly\",\"visibility\":\"+\",\"value_type\":\"PolynomialFeatures\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:cols", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:cols", "target": "{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:degree", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:degree", "target": "{\"name\":\"degree\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"degree : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:label_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:label_col", "target": "{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:poly", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:poly", "target": "{\"name\":\"poly\",\"type_\":\"PolynomialFeatures\",\"default_\":\"\",\"description\":\"poly : PolynomialFeatures\",\"compositions\":[\"PolynomialFeatures\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/prepare_documents.py", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "{\"name\":\"PrepareDocuments\",\"package\":\"metagpt/actions/prepare_documents.py:PrepareDocuments\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:config"}, {"predicate": "has_class_property", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:_init_repo"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "{\"lineno\":21,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PrepareDocuments\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "{\"name\":\"PrepareDocuments\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:config", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/prepare_interview.py", "target": "metagpt/actions/prepare_interview.py:PrepareInterview"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "{\"name\":\"PrepareInterview\",\"package\":\"metagpt/actions/prepare_interview.py:PrepareInterview\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "metagpt/actions/prepare_interview.py:PrepareInterview:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "metagpt/actions/prepare_interview.py:PrepareInterview:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "{\"lineno\":21,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PrepareInterview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "{\"name\":\"PrepareInterview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py:PrepareInterview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_interview.py:PrepareInterview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py:PrepareInterview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_interview.py:PrepareInterview:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/product_manager.py", "target": "metagpt/roles/product_manager.py:ProductManager"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "{\"name\":\"ProductManager\",\"package\":\"metagpt/roles/product_manager.py:ProductManager\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"todo_action\":{\"name\":\"todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"todo_action : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:todo_action"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:_observe"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "{\"lineno\":16,\"end_lineno\":51,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProductManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "{\"name\":\"ProductManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"todo_action\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:todo_action", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:todo_action", "target": "{\"name\":\"todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"todo_action : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/project_manager.py", "target": "metagpt/roles/project_manager.py:ProjectManager"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "{\"name\":\"ProjectManager\",\"package\":\"metagpt/roles/project_manager.py:ProjectManager\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:profile"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:__init__"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProjectManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "{\"name\":\"ProjectManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "{\"name\":\"ProjectRepo\",\"package\":\"metagpt/utils/project_repo.py:ProjectRepo\",\"attributes\":{\"docs\":{\"name\":\"docs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"docs\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]},\"requirement\":{\"name\":\"requirement\",\"type_\":\"\",\"default_\":\"\",\"description\":\"requirement\",\"compositions\":[]},\"resources\":{\"name\":\"resources\",\"type_\":\"\",\"default_\":\"\",\"description\":\"resources\",\"compositions\":[]},\"src_relative_path\":{\"name\":\"src_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_relative_path\",\"compositions\":[]},\"srcs\":{\"name\":\"srcs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"srcs\",\"compositions\":[]},\"test_outputs\":{\"name\":\"test_outputs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"test_outputs\",\"compositions\":[]},\"tests\":{\"name\":\"tests\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tests\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"code_files_exists\":{\"name\":\"code_files_exists\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"code_files_exists(): bool\",\"aggregations\":[]},\"with_src_path\":{\"name\":\"with_src_path\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"ProjectRepo\",\"description\":\"ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},\"description\":\"with_src_path(path: str \\\\| Path): ProjectRepo\",\"aggregations\":[\"str\\\\\",\"Path\",\"ProjectRepo\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\",\"ProjectRepo\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:docs"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:git_repo"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:requirement"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:resources"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:srcs"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:tests"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:workdir"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:code_files_exists"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:with_src_path"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "?:ProjectRepo"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/file_repository.py:FileRepository"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/context.py:Context:repo"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:__str__"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "{\"lineno\":90,\"end_lineno\":149,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProjectRepo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "{\"name\":\"ProjectRepo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"requirement\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"resources\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"src_relative_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"srcs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"test_outputs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"tests\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:docs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:docs", "target": "{\"name\":\"docs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"docs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:git_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:git_repo", "target": "{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:git_repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:requirement", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:requirement", "target": "{\"name\":\"requirement\",\"type_\":\"\",\"default_\":\"\",\"description\":\"requirement\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:requirement", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:resources", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:resources", "target": "{\"name\":\"resources\",\"type_\":\"\",\"default_\":\"\",\"description\":\"resources\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path", "target": "{\"name\":\"src_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_relative_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:srcs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:srcs", "target": "{\"name\":\"srcs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"srcs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:srcs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs", "target": "{\"name\":\"test_outputs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"test_outputs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:tests", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:tests", "target": "{\"name\":\"tests\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tests\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:workdir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:workdir", "target": "{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:workdir", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:code_files_exists", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:code_files_exists", "target": "{\"name\":\"code_files_exists\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"code_files_exists(): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:with_src_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:with_src_path", "target": "{\"name\":\"with_src_path\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"ProjectRepo\",\"description\":\"ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},\"description\":\"with_src_path(path: str \\\\| Path): ProjectRepo\",\"aggregations\":[\"str\\\\\",\"Path\",\"ProjectRepo\"]}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/prompt.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/prompt.py", "target": "metagpt/roles/prompt.py:PromptString"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:PromptString", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/prompt.py:PromptString", "target": "{\"name\":\"PromptString\",\"package\":\"metagpt/roles/prompt.py:PromptString\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/prompt.py:PromptString", "target": "metagpt/roles/prompt.py:PromptString:name"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:PromptString", "target": "{\"lineno\":27,\"end_lineno\":46,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PromptString\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/prompt.py:PromptString", "target": "{\"name\":\"PromptString\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:PromptString:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/prompt.py:PromptString:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/qa_engineer.py", "target": "metagpt/roles/qa_engineer.py:QaEngineer"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "{\"name\":\"QaEngineer\",\"package\":\"metagpt/roles/qa_engineer.py:QaEngineer\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"test_round\":{\"name\":\"test_round\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round : int\",\"compositions\":[]},\"test_round_allowed\":{\"name\":\"test_round_allowed\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round_allowed : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:test_round"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:test_round_allowed"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_write_test"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_run_code"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_debug_error"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_act"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_observe"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "{\"lineno\":27,\"end_lineno\":181,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QaEngineer\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "{\"name\":\"QaEngineer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"test_round\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"test_round_allowed\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:test_round", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:test_round", "target": "{\"name\":\"test_round\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:test_round_allowed", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:test_round_allowed", "target": "{\"name\":\"test_round_allowed\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round_allowed : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/qdrant_store.py", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection"}, {"predicate": "has_class", "source": "metagpt/document_store/qdrant_store.py", "target": "metagpt/document_store/qdrant_store.py:QdrantStore"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "{\"name\":\"QdrantConnection\",\"package\":\"metagpt/document_store/qdrant_store.py:QdrantConnection\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"host : Optional[str]\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"memory : bool\",\"compositions\":[]},\"port\":{\"name\":\"port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"port : Optional[int]\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"url : Optional[str]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:api_key"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:host"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:memory"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:port"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:url"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "{\"lineno\":11,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QdrantConnection\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "{\"name\":\"QdrantConnection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"port\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:host", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:host", "target": "{\"name\":\"host\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"host : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:memory", "target": "{\"name\":\"memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"memory : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:port", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:port", "target": "{\"name\":\"port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"port : Optional[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:url", "target": "{\"name\":\"url\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"url : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "{\"name\":\"QdrantStore\",\"package\":\"metagpt/document_store/qdrant_store.py:QdrantStore\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"QdrantClient\",\"default_\":\"\",\"description\":\"client : QdrantClient\",\"compositions\":[\"QdrantClient\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"points\",\"type_\":\"List[PointStruct]\",\"default_\":\"\",\"description\":\"points: List[PointStruct]\",\"compositions\":[\"PointStruct\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(collection_name: str, points: List[PointStruct])\",\"aggregations\":[\"PointStruct\"]},\"create_collection\":{\"name\":\"create_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"vectors_config\",\"type_\":\"VectorParams\",\"default_\":\"\",\"description\":\"vectors_config: VectorParams\",\"compositions\":[\"VectorParams\"]},{\"name\":\"force_recreate\",\"type_\":\"\",\"default_\":\"\",\"description\":\"force_recreate\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_collection(collection_name: str, vectors_config: VectorParams, force_recreate)\",\"aggregations\":[\"VectorParams\"]},\"delete_collection\":{\"name\":\"delete_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_collection(collection_name: str, timeout)\",\"aggregations\":[]},\"has_collection\":{\"name\":\"has_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"has_collection(collection_name: str)\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"query\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"query: List[float]\",\"compositions\":[]},{\"name\":\"query_filter\",\"type_\":\"Filter\",\"default_\":\"\",\"description\":\"query_filter: Filter\",\"compositions\":[\"Filter\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"return_vector\",\"type_\":\"\",\"default_\":\"\",\"description\":\"return_vector\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(collection_name: str, query: List[float], query_filter: Filter, k, return_vector)\",\"aggregations\":[\"Filter\"]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[\"QdrantClient\"],\"aggregations\":[\"PointStruct\",\"VectorParams\",\"Filter\"]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:client"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:create_collection"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:delete_collection"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:has_collection"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:write"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "?:QdrantClient"}, {"predicate": "isAggregateOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "?:PointStruct"}, {"predicate": "isAggregateOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "?:VectorParams"}, {"predicate": "isAggregateOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "?:Filter"}, {"predicate": "isGeneralizeOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:__init__"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "{\"lineno\":28,\"end_lineno\":124,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QdrantStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "{\"name\":\"QdrantStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"QdrantClient\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:client", "target": "{\"name\":\"client\",\"type_\":\"QdrantClient\",\"default_\":\"\",\"description\":\"client : QdrantClient\",\"compositions\":[\"QdrantClient\"]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"points\",\"type_\":\"List[PointStruct]\",\"default_\":\"\",\"description\":\"points: List[PointStruct]\",\"compositions\":[\"PointStruct\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(collection_name: str, points: List[PointStruct])\",\"aggregations\":[\"PointStruct\"]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:create_collection", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:create_collection", "target": "{\"name\":\"create_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"vectors_config\",\"type_\":\"VectorParams\",\"default_\":\"\",\"description\":\"vectors_config: VectorParams\",\"compositions\":[\"VectorParams\"]},{\"name\":\"force_recreate\",\"type_\":\"\",\"default_\":\"\",\"description\":\"force_recreate\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_collection(collection_name: str, vectors_config: VectorParams, force_recreate)\",\"aggregations\":[\"VectorParams\"]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:delete_collection", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:delete_collection", "target": "{\"name\":\"delete_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_collection(collection_name: str, timeout)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:has_collection", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:has_collection", "target": "{\"name\":\"has_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"has_collection(collection_name: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"query\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"query: List[float]\",\"compositions\":[]},{\"name\":\"query_filter\",\"type_\":\"Filter\",\"default_\":\"\",\"description\":\"query_filter: Filter\",\"compositions\":[\"Filter\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"return_vector\",\"type_\":\"\",\"default_\":\"\",\"description\":\"return_vector\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(collection_name: str, query: List[float], query_filter: Filter, k, return_vector)\",\"aggregations\":[\"Filter\"]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:write", "target": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:ReActSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:ReActSolver", "target": "{\"name\":\"ReActSolver\",\"package\":\"metagpt/strategy/solver.py:ReActSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/solver.py:ReActSolver", "target": "metagpt/strategy/solver.py:ReActSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/solver.py:ReActSolver", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:ReActSolver", "target": "{\"lineno\":59,\"end_lineno\":63,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReActSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/solver.py:ReActSolver", "target": "{\"name\":\"ReActSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:ReActSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:ReActSolver:solve", "target": "{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:ReadAPIRegistry", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:ReadAPIRegistry", "target": "{\"name\":\"ReadAPIRegistry\",\"package\":\"metagpt/environment/api/env_api.py:ReadAPIRegistry\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/api/env_api.py:ReadAPIRegistry", "target": "metagpt/environment/api/env_api.py:EnvAPIRegistry"}, {"predicate": "has_page_info", "source": "metagpt/environment/api/env_api.py:ReadAPIRegistry", "target": "{\"lineno\":57,\"end_lineno\":60,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReadAPIRegistry\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/api/env_api.py:ReadAPIRegistry", "target": "{\"name\":\"ReadAPIRegistry\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/rebuild_class_view.py", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "{\"name\":\"RebuildClassView\",\"package\":\"metagpt/actions/rebuild_class_view.py:RebuildClassView\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}},\"compositions\":[\"GraphRepository\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:graph_db"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/utils/graph_repository.py:GraphRepository"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class_views"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_relationship"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_diff_path"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_align_root"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "{\"lineno\":32,\"end_lineno\":209,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RebuildClassView\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "{\"name\":\"RebuildClassView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"Optional[GraphRepository]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "?:GraphRepository"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:graph_db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:graph_db", "target": "{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView"}, {"predicate": "has_class", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase"}, {"predicate": "has_class", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "{\"name\":\"RebuildSequenceView\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}},\"methods\":{\"parse_participant\":{\"name\":\"parse_participant\",\"args\":[{\"name\":\"mermaid_sequence_diagram\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_sequence_diagram: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_participant(mermaid_sequence_diagram: str): List[str]\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}},\"compositions\":[\"GraphRepository\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:graph_db"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:parse_participant"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/utils/graph_repository.py:GraphRepository"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_main_sequence_view"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_sequence_view"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_main_entry"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_use_case"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_sequence_view"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_participants"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_use_cases"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_detail"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_uml_class_view"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_source_code"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_full_filename"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_new_participant"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_participant"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "{\"lineno\":76,\"end_lineno\":571,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RebuildSequenceView\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "{\"name\":\"RebuildSequenceView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"Optional[GraphRepository]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "?:GraphRepository"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:graph_db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:graph_db", "target": "{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:parse_participant", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:parse_participant", "target": "{\"name\":\"parse_participant\",\"args\":[{\"name\":\"mermaid_sequence_diagram\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_sequence_diagram: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_participant(mermaid_sequence_diagram: str): List[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/redis.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/redis.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/redis.py", "target": "metagpt/utils/redis.py:Redis"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis", "target": "{\"name\":\"Redis\",\"package\":\"metagpt/utils/redis.py:Redis\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"config : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}},\"methods\":{\"close\":{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"close()\",\"aggregations\":[]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\\\\|None\",\"description\":\"bytes \\\\| None\",\"compositions\":[\"bytes\\\\\"]},\"description\":\"get(key: str): bytes \\\\| None\",\"aggregations\":[\"bytes\\\\\"]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]},{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key: str, data: str, timeout_sec: int)\",\"aggregations\":[]}},\"compositions\":[\"RedisConfig\"],\"aggregations\":[\"bytes\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:config"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:close"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:get"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:set"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/redis.py:Redis", "target": "?:bytes\\"}, {"predicate": "is_composite_of", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/configs/redis_config.py:RedisConfig"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:_connect"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:Redis", "target": "{\"lineno\":19,\"end_lineno\":63,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Redis\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/redis.py:Redis", "target": "{\"name\":\"Redis\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"Optional[RedisConfig]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/redis.py:Redis", "target": "?:RedisConfig"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis:config", "target": "{\"name\":\"config\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"config : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:close", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis:close", "target": "{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"close()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\\\\|None\",\"description\":\"bytes \\\\| None\",\"compositions\":[\"bytes\\\\\"]},\"description\":\"get(key: str): bytes \\\\| None\",\"aggregations\":[\"bytes\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:set", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis:set", "target": "{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]},{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key: str, data: str, timeout_sec: int)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/redis_config.py", "target": "metagpt/configs/redis_config.py:RedisConfig"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "{\"name\":\"RedisConfig\",\"package\":\"metagpt/configs/redis_config.py:RedisConfig\",\"attributes\":{\"db\":{\"name\":\"db\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"db : str\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"host : str\",\"compositions\":[]},\"password\":{\"name\":\"password\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"password : str\",\"compositions\":[]},\"port\":{\"name\":\"port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"port : int\",\"compositions\":[]},\"username\":{\"name\":\"username\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"username : str\",\"compositions\":[]}},\"methods\":{\"to_kwargs\":{\"name\":\"to_kwargs\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_kwargs()\",\"aggregations\":[]},\"to_url\":{\"name\":\"to_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:db"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:host"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:password"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:port"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:username"}, {"predicate": "has_class_method", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:to_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:to_url"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault"}, {"predicate": "has_page_info", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "{\"lineno\":11,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RedisConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "{\"name\":\"RedisConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"db\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"password\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"port\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"username\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:db", "target": "{\"name\":\"db\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"db : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:host", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:host", "target": "{\"name\":\"host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"host : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:password", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:password", "target": "{\"name\":\"password\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"password : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:port", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:port", "target": "{\"name\":\"port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"port : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:username", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:username", "target": "{\"name\":\"username\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"username : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:to_kwargs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:to_kwargs", "target": "{\"name\":\"to_kwargs\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_kwargs()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:to_url", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:to_url", "target": "{\"name\":\"to_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_url()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:RepairType"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_case_sensitivity"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_special_character_missing"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_required_key_pair_missing"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_json_format"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:_repair_llm_raw_output"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_llm_raw_output"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_invalid_json"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:run_after_exp_and_passon_next_retry"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:retry_parse_json_text"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:extract_content_from_output"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:extract_state_value_from_output"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "{\"name\":\"RepairType\",\"package\":\"metagpt/utils/repair_llm_raw_output.py:RepairType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "metagpt/utils/repair_llm_raw_output.py:RepairType:name"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "{\"lineno\":17,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepairType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "{\"name\":\"RepairType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "{\"name\":\"ReplyData\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:ReplyData\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "metagpt/roles/invoice_ocr_assistant.py:ReplyData:content"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "{\"lineno\":35,\"end_lineno\":36,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReplyData\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "{\"name\":\"ReplyData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "{\"name\":\"ReplyQuestion\",\"package\":\"metagpt/actions/invoice_ocr.py:ReplyQuestion\",\"attributes\":{\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"ocr_result\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_result: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, ocr_result: list): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "metagpt/actions/invoice_ocr.py:ReplyQuestion:language"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "metagpt/actions/invoice_ocr.py:ReplyQuestion:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "{\"lineno\":166,\"end_lineno\":189,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReplyQuestion\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "{\"name\":\"ReplyQuestion\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"ocr_result\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_result: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, ocr_result: list): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo", "target": "{\"name\":\"Repo\",\"package\":\"metagpt/document.py:Repo\",\"attributes\":{\"assets\":{\"name\":\"assets\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"assets : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"codes\":{\"name\":\"codes\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"codes : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"docs\":{\"name\":\"docs\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"docs : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}},\"methods\":{\"eda\":{\"name\":\"eda\",\"args\":[],\"return_args\":{\"type_\":\"RepoMetadata\",\"description\":\"RepoMetadata\",\"compositions\":[\"RepoMetadata\"]},\"description\":\"eda(): RepoMetadata\",\"aggregations\":[\"RepoMetadata\"]},\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[Document]\",\"description\":\"Optional[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get(filename: str): Optional[Document]\",\"aggregations\":[\"Document\"]},\"get_text_documents\":{\"name\":\"get_text_documents\",\"args\":[],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_text_documents(): list[Document]\",\"aggregations\":[\"Document\"]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(filename: str, content: str)\",\"aggregations\":[]},\"to_path\":{\"name\":\"to_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path()\",\"aggregations\":[]}},\"compositions\":[\"Document\",\"Path\"],\"aggregations\":[\"RepoMetadata\"]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:assets"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:codes"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:docs"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:name"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:eda"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:from_path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:get"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:get_text_documents"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:set"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:to_path"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:Repo", "target": "?:Document"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:Repo", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/document.py:Repo", "target": "?:RepoMetadata"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:_path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:_set"}, {"predicate": "has_page_info", "source": "metagpt/document.py:Repo", "target": "{\"lineno\":175,\"end_lineno\":239,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Repo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:Repo", "target": "{\"name\":\"Repo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"assets\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"codes\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:assets", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:assets", "target": "{\"name\":\"assets\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"assets : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:codes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:codes", "target": "{\"name\":\"codes\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"codes : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:docs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:docs", "target": "{\"name\":\"docs\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"docs : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:path", "target": "{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:eda", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:eda", "target": "{\"name\":\"eda\",\"args\":[],\"return_args\":{\"type_\":\"RepoMetadata\",\"description\":\"RepoMetadata\",\"compositions\":[\"RepoMetadata\"]},\"description\":\"eda(): RepoMetadata\",\"aggregations\":[\"RepoMetadata\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:from_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:from_path", "target": "{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[Document]\",\"description\":\"Optional[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get(filename: str): Optional[Document]\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:get_text_documents", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:get_text_documents", "target": "{\"name\":\"get_text_documents\",\"args\":[],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_text_documents(): list[Document]\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:set", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:set", "target": "{\"name\":\"set\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(filename: str, content: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:to_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:to_path", "target": "{\"name\":\"to_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "{\"name\":\"RepoFileInfo\",\"package\":\"metagpt/repo_parser.py:RepoFileInfo\",\"attributes\":{\"classes\":{\"name\":\"classes\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"classes : List\",\"compositions\":[]},\"file\":{\"name\":\"file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file : str\",\"compositions\":[]},\"functions\":{\"name\":\"functions\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"functions : List\",\"compositions\":[]},\"globals\":{\"name\":\"globals\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"globals : List\",\"compositions\":[]},\"page_info\":{\"name\":\"page_info\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"page_info : List\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:classes"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:file"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:functions"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:globals"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:page_info"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "{\"lineno\":30,\"end_lineno\":46,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoFileInfo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "{\"name\":\"RepoFileInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"classes\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"functions\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"globals\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"page_info\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:classes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:classes", "target": "{\"name\":\"classes\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"classes : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:file", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:file", "target": "{\"name\":\"file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:functions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:functions", "target": "{\"name\":\"functions\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"functions : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:globals", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:globals", "target": "{\"name\":\"globals\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"globals : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:page_info", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:page_info", "target": "{\"name\":\"page_info\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"page_info : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata", "target": "{\"name\":\"RepoMetadata\",\"package\":\"metagpt/document.py:RepoMetadata\",\"attributes\":{\"n_chars\":{\"name\":\"n_chars\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_chars : int\",\"compositions\":[]},\"n_docs\":{\"name\":\"n_docs\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_docs : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"symbols\":{\"name\":\"symbols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"symbols : list\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:RepoMetadata", "target": "metagpt/document.py:RepoMetadata:n_chars"}, {"predicate": "has_class_property", "source": "metagpt/document.py:RepoMetadata", "target": "metagpt/document.py:RepoMetadata:n_docs"}, {"predicate": "has_class_property", "source": "metagpt/document.py:RepoMetadata", "target": "metagpt/document.py:RepoMetadata:name"}, {"predicate": "has_class_property", "source": "metagpt/document.py:RepoMetadata", "target": "metagpt/document.py:RepoMetadata:symbols"}, {"predicate": "has_page_info", "source": "metagpt/document.py:RepoMetadata", "target": "{\"lineno\":168,\"end_lineno\":172,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoMetadata\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:RepoMetadata", "target": "{\"name\":\"RepoMetadata\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"n_chars\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_docs\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"symbols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata:n_chars", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata:n_chars", "target": "{\"name\":\"n_chars\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_chars : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata:n_docs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata:n_docs", "target": "{\"name\":\"n_docs\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_docs : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata:symbols", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata:symbols", "target": "{\"name\":\"symbols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"symbols : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser", "target": "{\"name\":\"RepoParser\",\"package\":\"metagpt/repo_parser.py:RepoParser\",\"attributes\":{\"base_directory\":{\"name\":\"base_directory\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"base_directory : Path\",\"compositions\":[\"Path\"]}},\"methods\":{\"extract_class_and_function_info\":{\"name\":\"extract_class_and_function_info\",\"args\":[{\"name\":\"tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tree\",\"compositions\":[]},{\"name\":\"file_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"file_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"RepoFileInfo\",\"description\":\"RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"extract_class_and_function_info(tree, file_path): RepoFileInfo\",\"aggregations\":[\"RepoFileInfo\"]},\"generate_dataframe_structure\":{\"name\":\"generate_dataframe_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"output_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_dataframe_structure(output_path: Path)\",\"aggregations\":[\"Path\"]},\"generate_json_structure\":{\"name\":\"generate_json_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"output_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_json_structure(output_path: Path)\",\"aggregations\":[\"Path\"]},\"generate_structure\":{\"name\":\"generate_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"output_path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"generate_structure(output_path: str \\\\| Path, mode): Path\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"generate_symbols\":{\"name\":\"generate_symbols\",\"args\":[],\"return_args\":{\"type_\":\"List[RepoFileInfo]\",\"description\":\"List[RepoFileInfo]\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"generate_symbols(): List[RepoFileInfo]\",\"aggregations\":[\"RepoFileInfo\"]},\"node_to_str\":{\"name\":\"node_to_str\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeBlockInfo\\\\|None\",\"description\":\"CodeBlockInfo \\\\| None\",\"compositions\":[\"CodeBlockInfo\\\\\"]},\"description\":\"node_to_str(node): CodeBlockInfo \\\\| None\",\"aggregations\":[\"CodeBlockInfo\\\\\"]},\"rebuild_class_views\":{\"name\":\"rebuild_class_views\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_class_views(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[\"Path\"],\"aggregations\":[\"RepoFileInfo\",\"str\\\\\",\"CodeBlockInfo\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:base_directory"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:extract_class_and_function_info"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:generate_dataframe_structure"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:generate_json_structure"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:generate_structure"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:generate_symbols"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:node_to_str"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:rebuild_class_views"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:RepoParser", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:RepoParser", "target": "?:RepoFileInfo"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:RepoParser", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:RepoParser", "target": "?:CodeBlockInfo\\"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_file"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_expr"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_name"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_if"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_if_compare"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_variable"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_assign"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_classes"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_class_relationships"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_split_class_line"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_split_relationship_line"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_get_label"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_create_path_mapping"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_repair_namespaces"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_repair_ns"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_find_root"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:RepoParser", "target": "{\"lineno\":422,\"end_lineno\":1005,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:RepoParser", "target": "{\"name\":\"RepoParser\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"base_directory\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:base_directory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:base_directory", "target": "{\"name\":\"base_directory\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"base_directory : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:extract_class_and_function_info", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:extract_class_and_function_info", "target": "{\"name\":\"extract_class_and_function_info\",\"args\":[{\"name\":\"tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tree\",\"compositions\":[]},{\"name\":\"file_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"file_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"RepoFileInfo\",\"description\":\"RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"extract_class_and_function_info(tree, file_path): RepoFileInfo\",\"aggregations\":[\"RepoFileInfo\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:generate_dataframe_structure", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:generate_dataframe_structure", "target": "{\"name\":\"generate_dataframe_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"output_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_dataframe_structure(output_path: Path)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:generate_json_structure", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:generate_json_structure", "target": "{\"name\":\"generate_json_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"output_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_json_structure(output_path: Path)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:generate_structure", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:generate_structure", "target": "{\"name\":\"generate_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"output_path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"generate_structure(output_path: str \\\\| Path, mode): Path\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:generate_symbols", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:generate_symbols", "target": "{\"name\":\"generate_symbols\",\"args\":[],\"return_args\":{\"type_\":\"List[RepoFileInfo]\",\"description\":\"List[RepoFileInfo]\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"generate_symbols(): List[RepoFileInfo]\",\"aggregations\":[\"RepoFileInfo\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:node_to_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:node_to_str", "target": "{\"name\":\"node_to_str\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeBlockInfo\\\\|None\",\"description\":\"CodeBlockInfo \\\\| None\",\"compositions\":[\"CodeBlockInfo\\\\\"]},\"description\":\"node_to_str(node): CodeBlockInfo \\\\| None\",\"aggregations\":[\"CodeBlockInfo\\\\\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:rebuild_class_views", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:rebuild_class_views", "target": "{\"name\":\"rebuild_class_views\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_class_views(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/researcher.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/researcher.py", "target": "metagpt/roles/researcher.py:Report"}, {"predicate": "has_class", "source": "metagpt/roles/researcher.py", "target": "metagpt/roles/researcher.py:Researcher"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report", "target": "{\"name\":\"Report\",\"package\":\"metagpt/roles/researcher.py:Report\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"links\":{\"name\":\"links\",\"type_\":\"Optional[dict[str,list[str]]]\",\"default_\":\"\",\"description\":\"links : Optional[dict[str, list[str]]]\",\"compositions\":[]},\"summaries\":{\"name\":\"summaries\",\"type_\":\"Optional[list[tuple[str,str]]]\",\"default_\":\"\",\"description\":\"summaries : Optional[list[tuple[str, str]]]\",\"compositions\":[\"tuple\"]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"tuple\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Report", "target": "metagpt/roles/researcher.py:Report:content"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Report", "target": "metagpt/roles/researcher.py:Report:links"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Report", "target": "metagpt/roles/researcher.py:Report:summaries"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Report", "target": "metagpt/roles/researcher.py:Report:topic"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/researcher.py:Report", "target": "?:tuple"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:Report", "target": "{\"lineno\":21,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Report\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/researcher.py:Report", "target": "{\"name\":\"Report\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"links\",\"visibility\":\"+\",\"value_type\":\"Optional[dict[str,list[str]]]\",\"default_value\":\"\"},{\"name\":\"summaries\",\"visibility\":\"+\",\"value_type\":\"Optional[list[tuple[str,str]]]\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report:links", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report:links", "target": "{\"name\":\"links\",\"type_\":\"Optional[dict[str,list[str]]]\",\"default_\":\"\",\"description\":\"links : Optional[dict[str, list[str]]]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report:summaries", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report:summaries", "target": "{\"name\":\"summaries\",\"type_\":\"Optional[list[tuple[str,str]]]\",\"default_\":\"\",\"description\":\"summaries : Optional[list[tuple[str, str]]]\",\"compositions\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report:topic", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report:topic", "target": "{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher", "target": "{\"name\":\"Researcher\",\"package\":\"metagpt/roles/researcher.py:Researcher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]},\"research_system_text\":{\"name\":\"research_system_text\",\"args\":[{\"name\":\"topic\",\"type_\":\"\",\"default_\":\"\",\"description\":\"topic\",\"compositions\":[]},{\"name\":\"current_task\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"current_task: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"research_system_text(topic, current_task: Action): str\",\"aggregations\":[\"Action\"]},\"write_report\":{\"name\":\"write_report\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_report(topic: str, content: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Message\",\"Action\"]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:language"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:profile"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:react"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:research_system_text"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:write_report"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/researcher.py:Researcher", "target": "?:Message"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/researcher.py:Researcher", "target": "?:Action"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:Researcher", "target": "{\"lineno\":28,\"end_lineno\":116,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Researcher\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/researcher.py:Researcher", "target": "{\"name\":\"Researcher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:react", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:react", "target": "{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:research_system_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:research_system_text", "target": "{\"name\":\"research_system_text\",\"args\":[{\"name\":\"topic\",\"type_\":\"\",\"default_\":\"\",\"description\":\"topic\",\"compositions\":[]},{\"name\":\"current_task\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"current_task: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"research_system_text(topic, current_task: Action): str\",\"aggregations\":[\"Action\"]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:write_report", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:write_report", "target": "{\"name\":\"write_report\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_report(topic: str, content: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "{\"name\":\"ResourceFileRepositories\",\"package\":\"metagpt/utils/project_repo.py:ResourceFileRepositories\",\"attributes\":{\"api_spec_and_task\":{\"name\":\"api_spec_and_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_spec_and_task\",\"compositions\":[]},\"code_plan_and_change\":{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]},\"code_summary\":{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]},\"competitive_analysis\":{\"name\":\"competitive_analysis\",\"type_\":\"\",\"default_\":\"\",\"description\":\"competitive_analysis\",\"compositions\":[]},\"data_api_design\":{\"name\":\"data_api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data_api_design\",\"compositions\":[]},\"graph_repo\":{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},\"sd_output\":{\"name\":\"sd_output\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_output\",\"compositions\":[]},\"seq_flow\":{\"name\":\"seq_flow\",\"type_\":\"\",\"default_\":\"\",\"description\":\"seq_flow\",\"compositions\":[]},\"system_design\":{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:api_spec_and_task"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_plan_and_change"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_summary"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:competitive_analysis"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:data_api_design"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:graph_repo"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:prd"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:sd_output"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:seq_flow"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:system_design"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/file_repository.py:FileRepository"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ProjectRepo:resources"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "{\"lineno\":63,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ResourceFileRepositories\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "{\"name\":\"ResourceFileRepositories\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_spec_and_task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_summary\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"competitive_analysis\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"data_api_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"sd_output\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"seq_flow\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"system_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:api_spec_and_task", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:api_spec_and_task", "target": "{\"name\":\"api_spec_and_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_spec_and_task\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_plan_and_change", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_plan_and_change", "target": "{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_summary", "target": "{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:competitive_analysis", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:competitive_analysis", "target": "{\"name\":\"competitive_analysis\",\"type_\":\"\",\"default_\":\"\",\"description\":\"competitive_analysis\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:data_api_design", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:data_api_design", "target": "{\"name\":\"data_api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data_api_design\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:graph_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:graph_repo", "target": "{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:prd", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:prd", "target": "{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:sd_output", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:sd_output", "target": "{\"name\":\"sd_output\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_output\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:seq_flow", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:seq_flow", "target": "{\"name\":\"seq_flow\",\"type_\":\"\",\"default_\":\"\",\"description\":\"seq_flow\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:system_design", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:system_design", "target": "{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "{\"name\":\"ResultEmbedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:ResultEmbedding\",\"attributes\":{\"data\":{\"name\":\"data\",\"type_\":\"List[Embedding]\",\"default_\":\"\",\"description\":\"data : List[Embedding]\",\"compositions\":[\"Embedding\"]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"object_\":{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]},\"usage\":{\"name\":\"usage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"usage\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Embedding\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:data"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:model"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:object_"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage"}, {"predicate": "is_composite_of", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "{\"lineno\":34,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ResultEmbedding\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "{\"name\":\"ResultEmbedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"List[Embedding]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"object_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"usage\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "?:Embedding"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:data", "target": "{\"name\":\"data\",\"type_\":\"List[Embedding]\",\"default_\":\"\",\"description\":\"data : List[Embedding]\",\"compositions\":[\"Embedding\"]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:model", "target": "{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:object_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:object_", "target": "{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage", "target": "{\"name\":\"usage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"usage\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Returns", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Returns", "target": "{\"name\":\"Returns\",\"package\":\"metagpt/learn/skill_loader.py:Returns\",\"attributes\":{\"format\":{\"name\":\"format\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"format : Optional[str]\",\"compositions\":[]},\"type\":{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Returns", "target": "metagpt/learn/skill_loader.py:Returns:format"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Returns", "target": "metagpt/learn/skill_loader.py:Returns:type"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Returns", "target": "metagpt/learn/skill_loader.py:Skill"}, {"predicate": "isCompositeOn", "source": "metagpt/learn/skill_loader.py:Returns", "target": "metagpt/learn/skill_loader.py:Skill:returns"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Returns", "target": "{\"lineno\":24,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Returns\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Returns", "target": "{\"name\":\"Returns\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"format\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Returns:format", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Returns:format", "target": "{\"name\":\"format\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"format : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Returns:type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Returns:type", "target": "{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "{\"name\":\"ReverseUseCase\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:ReverseUseCase\",\"attributes\":{\"actors\":{\"name\":\"actors\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"actors : List[str]\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"inputs\":{\"name\":\"inputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"inputs : List[str]\",\"compositions\":[]},\"outputs\":{\"name\":\"outputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"outputs : List[str]\",\"compositions\":[]},\"reason\":{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]},\"steps\":{\"name\":\"steps\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"steps : List[str]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:actors"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:description"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:inputs"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:outputs"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:reason"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:steps"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "{\"lineno\":40,\"end_lineno\":58,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReverseUseCase\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase", "target": "{\"name\":\"ReverseUseCase\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"actors\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inputs\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"outputs\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"reason\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"steps\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:actors", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:actors", "target": "{\"name\":\"actors\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"actors : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:inputs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:inputs", "target": "{\"name\":\"inputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"inputs : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:outputs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:outputs", "target": "{\"name\":\"outputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"outputs : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:reason", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:reason", "target": "{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:steps", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase:steps", "target": "{\"name\":\"steps\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"steps : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails", "target": "{\"name\":\"ReverseUseCaseDetails\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"relationship\":{\"name\":\"relationship\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"relationship : List[str]\",\"compositions\":[]},\"use_cases\":{\"name\":\"use_cases\",\"type_\":\"List[ReverseUseCase]\",\"default_\":\"\",\"description\":\"use_cases : List[ReverseUseCase]\",\"compositions\":[\"ReverseUseCase\"]}},\"methods\":{},\"compositions\":[\"ReverseUseCase\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:description"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:relationship"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:use_cases"}, {"predicate": "is_composite_of", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails", "target": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCase"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails", "target": "{\"lineno\":61,\"end_lineno\":73,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReverseUseCaseDetails\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails", "target": "{\"name\":\"ReverseUseCaseDetails\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"relationship\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"use_cases\",\"visibility\":\"+\",\"value_type\":\"List[ReverseUseCase]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails", "target": "?:ReverseUseCase"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:relationship", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:relationship", "target": "{\"name\":\"relationship\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"relationship : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:use_cases", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:ReverseUseCaseDetails:use_cases", "target": "{\"name\":\"use_cases\",\"type_\":\"List[ReverseUseCase]\",\"default_\":\"\",\"description\":\"use_cases : List[ReverseUseCase]\",\"compositions\":[\"ReverseUseCase\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "{\"name\":\"ReviewMode\",\"package\":\"metagpt/actions/action_node.py:ReviewMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "metagpt/actions/action_node.py:ReviewMode:name"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "{\"lineno\":27,\"end_lineno\":29,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviewMode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "{\"name\":\"ReviewMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ReviewMode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ReviewMode:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "{\"name\":\"ReviseMode\",\"package\":\"metagpt/actions/action_node.py:ReviseMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "metagpt/actions/action_node.py:ReviseMode:name"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "{\"lineno\":32,\"end_lineno\":35,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviseMode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "{\"name\":\"ReviseMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ReviseMode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ReviseMode:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale", "target": "{\"name\":\"RobustScale\",\"package\":\"metagpt/tools/libs/data_preprocess.py:RobustScale\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"RobustScaler\",\"default_\":\"\",\"description\":\"model : RobustScaler\",\"compositions\":[\"RobustScaler\"]}},\"methods\":{},\"compositions\":[\"RobustScaler\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale", "target": "metagpt/tools/libs/data_preprocess.py:RobustScale:features"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale", "target": "metagpt/tools/libs/data_preprocess.py:RobustScale:model"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale", "target": "?:RobustScaler"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale", "target": "metagpt/tools/libs/data_preprocess.py:RobustScale:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale", "target": "{\"lineno\":143,\"end_lineno\":150,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RobustScale\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale", "target": "{\"name\":\"RobustScale\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"RobustScaler\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale:features", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale:features", "target": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale:model", "target": "{\"name\":\"model\",\"type_\":\"RobustScaler\",\"default_\":\"\",\"description\":\"model : RobustScaler\",\"compositions\":[\"RobustScaler\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/role.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/role.py", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class", "source": "metagpt/roles/role.py", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "has_class", "source": "metagpt/roles/role.py", "target": "metagpt/roles/role.py:RoleReactMode"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role", "target": "{\"name\":\"Role\",\"package\":\"metagpt/roles/role.py:Role\",\"attributes\":{\"action_description\":{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]},\"actions\":{\"name\":\"actions\",\"type_\":\"list[SerializeAsAny[Action]]\",\"default_\":\"\",\"description\":\"actions : list[SerializeAsAny[Action]]\",\"compositions\":[\"Action\",\"SerializeAsAny\"]},\"addresses\":{\"name\":\"addresses\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"addresses : set[str]\",\"compositions\":[]},\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"is_human\":{\"name\":\"is_human\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_human : bool\",\"compositions\":[]},\"is_idle\":{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]},\"latest_observed_msg\":{\"name\":\"latest_observed_msg\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"latest_observed_msg : Optional[Message]\",\"compositions\":[\"Message\"]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"planner\":{\"name\":\"planner\",\"type_\":\"\",\"default_\":\"\",\"description\":\"planner\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"project_repo\":{\"name\":\"project_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_repo\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]},\"rc\":{\"name\":\"rc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"rc\",\"compositions\":[]},\"recovered\":{\"name\":\"recovered\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"recovered : bool\",\"compositions\":[]},\"role_id\":{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id : str\",\"compositions\":[]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]},\"states\":{\"name\":\"states\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"states : list[str]\",\"compositions\":[]},\"todo\":{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}},\"methods\":{\"act\":{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"ActionOutput\",\"description\":\"ActionOutput\",\"compositions\":[\"ActionOutput\"]},\"description\":\"act(): ActionOutput\",\"aggregations\":[\"ActionOutput\"]},\"check_addresses\":{\"name\":\"check_addresses\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_addresses()\",\"aggregations\":[]},\"get_memories\":{\"name\":\"get_memories\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_memories(k): list[Message]\",\"aggregations\":[\"Message\"]},\"is_watch\":{\"name\":\"is_watch\",\"args\":[{\"name\":\"caused_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"caused_by: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_watch(caused_by: str)\",\"aggregations\":[]},\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"msg\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(msg)\",\"aggregations\":[]},\"put_message\":{\"name\":\"put_message\",\"args\":[{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"put_message(message)\",\"aggregations\":[]},\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"run(with_message): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]},\"set_action\":{\"name\":\"set_action\",\"args\":[{\"name\":\"action\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"action: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_action(action: Action)\",\"aggregations\":[\"Action\"]},\"set_actions\":{\"name\":\"set_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"list[Union[Action,Type[Action]]]\",\"default_\":\"\",\"description\":\"actions: list[Union[Action, Type[Action]]]\",\"compositions\":[\"Action\",\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_actions(actions: list[Union[Action, Type[Action]]])\",\"aggregations\":[\"Action\",\"Type\"]},\"set_addresses\":{\"name\":\"set_addresses\",\"args\":[{\"name\":\"addresses\",\"type_\":\"Set[str]\",\"default_\":\"\",\"description\":\"addresses: Set[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(addresses: Set[str])\",\"aggregations\":[]},\"set_env\":{\"name\":\"set_env\",\"args\":[{\"name\":\"env\",\"type_\":\"Environment\",\"default_\":\"\",\"description\":\"env: 'Environment'\",\"compositions\":[\"Environment\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_env(env: 'Environment')\",\"aggregations\":[\"Environment\"]},\"set_todo\":{\"name\":\"set_todo\",\"args\":[{\"name\":\"value\",\"type_\":\"Optional[Action]\",\"default_\":\"\",\"description\":\"value: Optional[Action]\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_todo(value: Optional[Action])\",\"aggregations\":[\"Action\"]},\"think\":{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"Action\",\"description\":\"Action\",\"compositions\":[\"Action\"]},\"description\":\"think(): Action\",\"aggregations\":[\"Action\"]},\"validate_role_extra\":{\"name\":\"validate_role_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_role_extra()\",\"aggregations\":[]}},\"compositions\":[\"Action\",\"SerializeAsAny\",\"Message\"],\"aggregations\":[\"ActionOutput\",\"Message\\\\\",\"Type\",\"Environment\"]}"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:action_description"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:actions"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:addresses"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:desc"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:git_repo"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:is_human"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:is_idle"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:latest_observed_msg"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:llm"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:model_config"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:planner"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:profile"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:project_name"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:project_path"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:project_repo"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:prompt_schema"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:rc"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:recovered"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:role_id"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:src_workspace"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:states"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:todo"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:act"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:check_addresses"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:get_memories"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:is_watch"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:publish_message"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:put_message"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:react"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:run"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_action"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_actions"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_addresses"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_env"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_todo"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:think"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:validate_role_extra"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:Role", "target": "?:SerializeAsAny"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:Role", "target": "?:ActionOutput"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:Role", "target": "?:Message\\"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:Role", "target": "?:Type"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:Role", "target": "?:Environment"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/role.py:Role", "target": "metagpt/context_mixin.py:ContextMixin"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/role.py:Role", "target": "metagpt/schema.py:SerializationMixin"}, {"predicate": "is_composite_of", "source": "metagpt/roles/role.py:Role", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/roles/role.py:Role", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_process_role_extra"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_reset"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_setting"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_check_actions"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_init_action"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_set_react_mode"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_watch"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_set_state"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_get_prefix"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_act"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_observe"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_react"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_act_by_order"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_plan_and_act"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_act_on_task"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:Role", "target": "{\"lineno\":133,\"end_lineno\":602,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Role\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/role.py:Role", "target": "{\"name\":\"Role\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"action_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"actions\",\"visibility\":\"+\",\"value_type\":\"list[SerializeAsAny[Action]]\",\"default_value\":\"\"},{\"name\":\"addresses\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_human\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_idle\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"latest_observed_msg\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"planner\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rc\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"recovered\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"role_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"states\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"todo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:Role", "target": "?:Action"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:Role", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:action_description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:action_description", "target": "{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:action_description", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:actions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:actions", "target": "{\"name\":\"actions\",\"type_\":\"list[SerializeAsAny[Action]]\",\"default_\":\"\",\"description\":\"actions : list[SerializeAsAny[Action]]\",\"compositions\":[\"Action\",\"SerializeAsAny\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:addresses", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:addresses", "target": "{\"name\":\"addresses\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"addresses : set[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:git_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:git_repo", "target": "{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:git_repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:is_human", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:is_human", "target": "{\"name\":\"is_human\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_human : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:is_idle", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:is_idle", "target": "{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:is_idle", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:latest_observed_msg", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:latest_observed_msg", "target": "{\"name\":\"latest_observed_msg\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"latest_observed_msg : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:planner", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:planner", "target": "{\"name\":\"planner\",\"type_\":\"\",\"default_\":\"\",\"description\":\"planner\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:project_path", "target": "{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:project_repo", "target": "{\"name\":\"project_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:prompt_schema", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:prompt_schema", "target": "{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:prompt_schema", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:rc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:rc", "target": "{\"name\":\"rc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"rc\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:recovered", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:recovered", "target": "{\"name\":\"recovered\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"recovered : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:role_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:role_id", "target": "{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:src_workspace", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:src_workspace", "target": "{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:src_workspace", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:states", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:states", "target": "{\"name\":\"states\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"states : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:todo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:todo", "target": "{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:todo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:act", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:act", "target": "{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"ActionOutput\",\"description\":\"ActionOutput\",\"compositions\":[\"ActionOutput\"]},\"description\":\"act(): ActionOutput\",\"aggregations\":[\"ActionOutput\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:check_addresses", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:check_addresses", "target": "{\"name\":\"check_addresses\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_addresses()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:get_memories", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:get_memories", "target": "{\"name\":\"get_memories\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_memories(k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:is_watch", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:is_watch", "target": "{\"name\":\"is_watch\",\"args\":[{\"name\":\"caused_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"caused_by: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_watch(caused_by: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:publish_message", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:publish_message", "target": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"msg\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(msg)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:put_message", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:put_message", "target": "{\"name\":\"put_message\",\"args\":[{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"put_message(message)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:react", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:react", "target": "{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"run(with_message): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_action", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_action", "target": "{\"name\":\"set_action\",\"args\":[{\"name\":\"action\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"action: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_action(action: Action)\",\"aggregations\":[\"Action\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_actions", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_actions", "target": "{\"name\":\"set_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"list[Union[Action,Type[Action]]]\",\"default_\":\"\",\"description\":\"actions: list[Union[Action, Type[Action]]]\",\"compositions\":[\"Action\",\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_actions(actions: list[Union[Action, Type[Action]]])\",\"aggregations\":[\"Action\",\"Type\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_addresses", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_addresses", "target": "{\"name\":\"set_addresses\",\"args\":[{\"name\":\"addresses\",\"type_\":\"Set[str]\",\"default_\":\"\",\"description\":\"addresses: Set[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(addresses: Set[str])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_env", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_env", "target": "{\"name\":\"set_env\",\"args\":[{\"name\":\"env\",\"type_\":\"Environment\",\"default_\":\"\",\"description\":\"env: 'Environment'\",\"compositions\":[\"Environment\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_env(env: 'Environment')\",\"aggregations\":[\"Environment\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_todo", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_todo", "target": "{\"name\":\"set_todo\",\"args\":[{\"name\":\"value\",\"type_\":\"Optional[Action]\",\"default_\":\"\",\"description\":\"value: Optional[Action]\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_todo(value: Optional[Action])\",\"aggregations\":[\"Action\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:think", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:think", "target": "{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"Action\",\"description\":\"Action\",\"compositions\":[\"Action\"]},\"description\":\"think(): Action\",\"aggregations\":[\"Action\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:validate_role_extra", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:validate_role_extra", "target": "{\"name\":\"validate_role_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_role_extra()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext", "target": "{\"name\":\"RoleContext\",\"package\":\"metagpt/roles/role.py:RoleContext\",\"attributes\":{\"env\":{\"name\":\"env\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"env : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]},\"important_memory\":{\"name\":\"important_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"important_memory\",\"compositions\":[]},\"max_react_loop\":{\"name\":\"max_react_loop\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_react_loop : int\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"msg_buffer\":{\"name\":\"msg_buffer\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg_buffer\",\"compositions\":[]},\"news\":{\"name\":\"news\",\"type_\":\"list[Type[Message]]\",\"default_\":\"\",\"description\":\"news : list[Type[Message]]\",\"compositions\":[\"Message\",\"Type\"]},\"react_mode\":{\"name\":\"react_mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"react_mode\",\"compositions\":[]},\"state\":{\"name\":\"state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"state : int\",\"compositions\":[]},\"todo\":{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]},\"watch\":{\"name\":\"watch\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"watch : set[str]\",\"compositions\":[]},\"working_memory\":{\"name\":\"working_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_memory\",\"compositions\":[]}},\"methods\":{\"check\":{\"name\":\"check\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check(role_id: str)\",\"aggregations\":[]},\"model_rebuild\":{\"name\":\"model_rebuild\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"model_rebuild()\",\"aggregations\":[]}},\"compositions\":[\"Message\",\"Type\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:env"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:history"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:important_memory"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:max_react_loop"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:memory"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:model_config"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:msg_buffer"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:news"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:react_mode"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:state"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:todo"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:watch"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:working_memory"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:check"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:model_rebuild"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:RoleContext", "target": "?:Type"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:Role"}, {"predicate": "isCompositeOn", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:Role:rc"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/memory/longterm_memory.py:LongTermMemory"}, {"predicate": "isAggregateOn", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:rc"}, {"predicate": "is_composite_of", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:RoleContext", "target": "{\"lineno\":88,\"end_lineno\":130,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/role.py:RoleContext", "target": "{\"name\":\"RoleContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"env\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"important_memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_react_loop\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"msg_buffer\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"news\",\"visibility\":\"+\",\"value_type\":\"list[Type[Message]]\",\"default_value\":\"\"},{\"name\":\"react_mode\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"state\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"todo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"watch\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"working_memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:RoleContext", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:env", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:env", "target": "{\"name\":\"env\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"env : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:history", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:history", "target": "{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:history", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:important_memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:important_memory", "target": "{\"name\":\"important_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"important_memory\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:important_memory", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:max_react_loop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:max_react_loop", "target": "{\"name\":\"max_react_loop\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_react_loop : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:memory", "target": "{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:msg_buffer", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:msg_buffer", "target": "{\"name\":\"msg_buffer\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg_buffer\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:news", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:news", "target": "{\"name\":\"news\",\"type_\":\"list[Type[Message]]\",\"default_\":\"\",\"description\":\"news : list[Type[Message]]\",\"compositions\":[\"Message\",\"Type\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:react_mode", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:react_mode", "target": "{\"name\":\"react_mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"react_mode\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:state", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:state", "target": "{\"name\":\"state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"state : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:todo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:todo", "target": "{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:watch", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:watch", "target": "{\"name\":\"watch\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"watch : set[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:working_memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:working_memory", "target": "{\"name\":\"working_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_memory\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:check", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:check", "target": "{\"name\":\"check\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check(role_id: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:model_rebuild", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:model_rebuild", "target": "{\"name\":\"model_rebuild\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"model_rebuild()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleReactMode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleReactMode", "target": "{\"name\":\"RoleReactMode\",\"package\":\"metagpt/roles/role.py:RoleReactMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"values\":{\"name\":\"values\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"values()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleReactMode", "target": "metagpt/roles/role.py:RoleReactMode:name"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:RoleReactMode", "target": "metagpt/roles/role.py:RoleReactMode:values"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:RoleReactMode", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "isCompositeOn", "source": "metagpt/roles/role.py:RoleReactMode", "target": "metagpt/roles/role.py:RoleContext:react_mode"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:RoleReactMode", "target": "{\"lineno\":78,\"end_lineno\":85,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleReactMode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/role.py:RoleReactMode", "target": "{\"name\":\"RoleReactMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleReactMode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleReactMode:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleReactMode:values", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleReactMode:values", "target": "{\"name\":\"values\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"values()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState"}, {"predicate": "has_class", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState", "target": "{\"name\":\"RoleState\",\"package\":\"metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState:name"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState", "target": "{\"lineno\":16,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleState\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState", "target": "{\"name\":\"RoleState\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/run_code.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/run_code.py", "target": "metagpt/actions/run_code.py:RunCode"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode", "target": "{\"name\":\"RunCode\",\"package\":\"metagpt/actions/run_code.py:RunCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"RunCodeResult\",\"description\":\"RunCodeResult\",\"compositions\":[\"RunCodeResult\"]},\"description\":\"run(): RunCodeResult\",\"aggregations\":[\"RunCodeResult\"]},\"run_script\":{\"name\":\"run_script\",\"args\":[{\"name\":\"working_directory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_directory\",\"compositions\":[]},{\"name\":\"additional_python_paths\",\"type_\":\"\",\"default_\":\"\",\"description\":\"additional_python_paths\",\"compositions\":[]},{\"name\":\"command\",\"type_\":\"\",\"default_\":\"\",\"description\":\"command\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_script(working_directory, additional_python_paths, command): Tuple[str, str]\",\"aggregations\":[]},\"run_text\":{\"name\":\"run_text\",\"args\":[{\"name\":\"code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_text(code): Tuple[str, str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"RunCodeResult\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:run_script"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:run_text"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/run_code.py:RunCode", "target": "?:RunCodeResult"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:_install_via_subprocess"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:_install_requirements"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:_install_pytest"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:_install_dependencies"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:RunCode", "target": "{\"lineno\":78,\"end_lineno\":173,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/run_code.py:RunCode", "target": "{\"name\":\"RunCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"RunCodeResult\",\"description\":\"RunCodeResult\",\"compositions\":[\"RunCodeResult\"]},\"description\":\"run(): RunCodeResult\",\"aggregations\":[\"RunCodeResult\"]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:run_script", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:run_script", "target": "{\"name\":\"run_script\",\"args\":[{\"name\":\"working_directory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_directory\",\"compositions\":[]},{\"name\":\"additional_python_paths\",\"type_\":\"\",\"default_\":\"\",\"description\":\"additional_python_paths\",\"compositions\":[]},{\"name\":\"command\",\"type_\":\"\",\"default_\":\"\",\"description\":\"command\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_script(working_directory, additional_python_paths, command): Tuple[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:run_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:run_text", "target": "{\"name\":\"run_text\",\"args\":[{\"name\":\"code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_text(code): Tuple[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext", "target": "{\"name\":\"RunCodeContext\",\"package\":\"metagpt/schema.py:RunCodeContext\",\"attributes\":{\"additional_python_paths\":{\"name\":\"additional_python_paths\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"additional_python_paths : List[str]\",\"compositions\":[]},\"code\":{\"name\":\"code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"code : Optional[str]\",\"compositions\":[]},\"code_filename\":{\"name\":\"code_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code_filename : str\",\"compositions\":[]},\"command\":{\"name\":\"command\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"command : List[str]\",\"compositions\":[]},\"mode\":{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode : str\",\"compositions\":[]},\"output\":{\"name\":\"output\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output : Optional[str]\",\"compositions\":[]},\"output_filename\":{\"name\":\"output_filename\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output_filename : Optional[str]\",\"compositions\":[]},\"test_code\":{\"name\":\"test_code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"test_code : Optional[str]\",\"compositions\":[]},\"test_filename\":{\"name\":\"test_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"test_filename : str\",\"compositions\":[]},\"working_directory\":{\"name\":\"working_directory\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"working_directory : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:additional_python_paths"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:code"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:code_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:command"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:mode"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:output"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:output_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:test_code"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:test_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:working_directory"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/actions/debug_error.py:DebugError"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/actions/debug_error.py:DebugError:i_context"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/actions/run_code.py:RunCode"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/actions/run_code.py:RunCode:i_context"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:RunCodeContext", "target": "{\"lineno\":625,\"end_lineno\":635,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCodeContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:RunCodeContext", "target": "{\"name\":\"RunCodeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"additional_python_paths\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"code_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"command\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"mode\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"output\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"output_filename\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"test_code\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"test_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"working_directory\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:additional_python_paths", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:additional_python_paths", "target": "{\"name\":\"additional_python_paths\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"additional_python_paths : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:code", "target": "{\"name\":\"code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"code : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:code_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:code_filename", "target": "{\"name\":\"code_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:command", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:command", "target": "{\"name\":\"command\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"command : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:mode", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:mode", "target": "{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:output", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:output", "target": "{\"name\":\"output\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:output_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:output_filename", "target": "{\"name\":\"output_filename\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output_filename : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:test_code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:test_code", "target": "{\"name\":\"test_code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"test_code : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:test_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:test_filename", "target": "{\"name\":\"test_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"test_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:working_directory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:working_directory", "target": "{\"name\":\"working_directory\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"working_directory : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeResult", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeResult", "target": "{\"name\":\"RunCodeResult\",\"package\":\"metagpt/schema.py:RunCodeResult\",\"attributes\":{\"stderr\":{\"name\":\"stderr\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stderr : str\",\"compositions\":[]},\"stdout\":{\"name\":\"stdout\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stdout : str\",\"compositions\":[]},\"summary\":{\"name\":\"summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"summary : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeResult", "target": "metagpt/schema.py:RunCodeResult:stderr"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeResult", "target": "metagpt/schema.py:RunCodeResult:stdout"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeResult", "target": "metagpt/schema.py:RunCodeResult:summary"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:RunCodeResult", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:RunCodeResult", "target": "{\"lineno\":638,\"end_lineno\":641,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCodeResult\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:RunCodeResult", "target": "{\"name\":\"RunCodeResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"stderr\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"stdout\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeResult:stderr", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeResult:stderr", "target": "{\"name\":\"stderr\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stderr : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeResult:stdout", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeResult:stdout", "target": "{\"name\":\"stdout\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stdout : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeResult:summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeResult:summary", "target": "{\"name\":\"summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"summary : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/s3.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/s3.py", "target": "metagpt/utils/s3.py:S3"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3", "target": "{\"name\":\"S3\",\"package\":\"metagpt/utils/s3.py:S3\",\"attributes\":{\"auth_config\":{\"name\":\"auth_config\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"auth_config : dict\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"session\":{\"name\":\"session\",\"type_\":\"Session\",\"default_\":\"\",\"description\":\"session : Session\",\"compositions\":[\"Session\"]}},\"methods\":{\"cache\":{\"name\":\"cache\",\"args\":[{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"file_ext\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file_ext: str\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"cache(data: str, file_ext: str, format: str): str\",\"aggregations\":[]},\"download_file\":{\"name\":\"download_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"chunk_size\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"chunk_size: Optional[int]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"download_file(bucket: str, object_name: str, local_path: str, chunk_size: Optional[int]): None\",\"aggregations\":[]},\"get_object\":{\"name\":\"get_object\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"get_object(bucket: str, object_name: str): bytes\",\"aggregations\":[\"bytes\"]},\"get_object_url\":{\"name\":\"get_object_url\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_object_url(bucket: str, object_name: str): str\",\"aggregations\":[]},\"upload_file\":{\"name\":\"upload_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"upload_file(bucket: str, local_path: str, object_name: str): None\",\"aggregations\":[]}},\"compositions\":[\"Session\"],\"aggregations\":[\"bytes\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:auth_config"}, {"predicate": "has_class_property", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:config"}, {"predicate": "has_class_property", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:session"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:cache"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:download_file"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:get_object"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:get_object_url"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:upload_file"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/s3.py:S3", "target": "?:Session"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/s3.py:S3", "target": "?:bytes"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:S3", "target": "{\"lineno\":16,\"end_lineno\":154,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"S3\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/s3.py:S3", "target": "{\"name\":\"S3\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auth_config\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"session\",\"visibility\":\"+\",\"value_type\":\"Session\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:auth_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:auth_config", "target": "{\"name\":\"auth_config\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"auth_config : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:session", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:session", "target": "{\"name\":\"session\",\"type_\":\"Session\",\"default_\":\"\",\"description\":\"session : Session\",\"compositions\":[\"Session\"]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:cache", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:cache", "target": "{\"name\":\"cache\",\"args\":[{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"file_ext\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file_ext: str\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"cache(data: str, file_ext: str, format: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:download_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:download_file", "target": "{\"name\":\"download_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"chunk_size\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"chunk_size: Optional[int]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"download_file(bucket: str, object_name: str, local_path: str, chunk_size: Optional[int]): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:get_object", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:get_object", "target": "{\"name\":\"get_object\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"get_object(bucket: str, object_name: str): bytes\",\"aggregations\":[\"bytes\"]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:get_object_url", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:get_object_url", "target": "{\"name\":\"get_object_url\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_object_url(bucket: str, object_name: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:upload_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:upload_file", "target": "{\"name\":\"upload_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"upload_file(bucket: str, local_path: str, object_name: str): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/s3_config.py", "target": "metagpt/configs/s3_config.py:S3Config"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config", "target": "{\"name\":\"S3Config\",\"package\":\"metagpt/configs/s3_config.py:S3Config\",\"attributes\":{\"access_key\":{\"name\":\"access_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"access_key : str\",\"compositions\":[]},\"bucket\":{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket : str\",\"compositions\":[]},\"endpoint\":{\"name\":\"endpoint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"endpoint : str\",\"compositions\":[]},\"secret_key\":{\"name\":\"secret_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"secret_key : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/configs/s3_config.py:S3Config:access_key"}, {"predicate": "has_class_property", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/configs/s3_config.py:S3Config:bucket"}, {"predicate": "has_class_property", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/configs/s3_config.py:S3Config:endpoint"}, {"predicate": "has_class_property", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/configs/s3_config.py:S3Config:secret_key"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/utils/s3.py:S3"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/utils/s3.py:S3:config"}, {"predicate": "has_page_info", "source": "metagpt/configs/s3_config.py:S3Config", "target": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"S3Config\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/s3_config.py:S3Config", "target": "{\"name\":\"S3Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"access_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"bucket\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"endpoint\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"secret_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config:access_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config:access_key", "target": "{\"name\":\"access_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"access_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config:bucket", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config:bucket", "target": "{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config:endpoint", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config:endpoint", "target": "{\"name\":\"endpoint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"endpoint : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config:secret_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config:secret_key", "target": "{\"name\":\"secret_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"secret_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/libs/sd_engine.py", "target": "metagpt/tools/libs/sd_engine.py:SDEngine"}, {"predicate": "has_function", "source": "metagpt/tools/libs/sd_engine.py", "target": "metagpt/tools/libs/sd_engine.py:decode_base64_to_image"}, {"predicate": "has_function", "source": "metagpt/tools/libs/sd_engine.py", "target": "metagpt/tools/libs/sd_engine.py:batch_decode_base64_to_image"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "{\"name\":\"SDEngine\",\"package\":\"metagpt/tools/libs/sd_engine.py:SDEngine\",\"attributes\":{\"payload\":{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]},\"sd_t2i_url\":{\"name\":\"sd_t2i_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_t2i_url\",\"compositions\":[]},\"sd_url\":{\"name\":\"sd_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sd_url : str\",\"compositions\":[]}},\"methods\":{\"construct_payload\":{\"name\":\"construct_payload\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},{\"name\":\"negtive_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"negtive_prompt\",\"compositions\":[]},{\"name\":\"width\",\"type_\":\"\",\"default_\":\"\",\"description\":\"width\",\"compositions\":[]},{\"name\":\"height\",\"type_\":\"\",\"default_\":\"\",\"description\":\"height\",\"compositions\":[]},{\"name\":\"sd_model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"construct_payload(prompt, negtive_prompt, width, height, sd_model)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"payload\",\"type_\":\"\",\"default_\":\"\",\"description\":\"payload\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(url, payload, session)\",\"aggregations\":[]},\"run_t2i\":{\"name\":\"run_t2i\",\"args\":[{\"name\":\"payloads\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"payloads: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_t2i(payloads: list)\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"imgs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"imgs\",\"compositions\":[]},{\"name\":\"save_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"save_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(imgs, save_name)\",\"aggregations\":[]},\"simple_run_t2i\":{\"name\":\"simple_run_t2i\",\"args\":[{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload: dict\",\"compositions\":[]},{\"name\":\"auto_save\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_save: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_run_t2i(payload: dict, auto_save: bool)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "metagpt/tools/libs/sd_engine.py:SDEngine:payload"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "metagpt/tools/libs/sd_engine.py:SDEngine:sd_t2i_url"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "metagpt/tools/libs/sd_engine.py:SDEngine:sd_url"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "metagpt/tools/libs/sd_engine.py:SDEngine:construct_payload"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "metagpt/tools/libs/sd_engine.py:SDEngine:run"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "metagpt/tools/libs/sd_engine.py:SDEngine:run_t2i"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "metagpt/tools/libs/sd_engine.py:SDEngine:save"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "metagpt/tools/libs/sd_engine.py:SDEngine:simple_run_t2i"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "metagpt/tools/libs/sd_engine.py:SDEngine:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "{\"lineno\":61,\"end_lineno\":169,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SDEngine\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/sd_engine.py:SDEngine", "target": "{\"name\":\"SDEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"payload\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"sd_t2i_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"sd_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:payload", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:payload", "target": "{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:sd_t2i_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:sd_t2i_url", "target": "{\"name\":\"sd_t2i_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_t2i_url\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:sd_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:sd_url", "target": "{\"name\":\"sd_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sd_url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:construct_payload", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:construct_payload", "target": "{\"name\":\"construct_payload\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},{\"name\":\"negtive_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"negtive_prompt\",\"compositions\":[]},{\"name\":\"width\",\"type_\":\"\",\"default_\":\"\",\"description\":\"width\",\"compositions\":[]},{\"name\":\"height\",\"type_\":\"\",\"default_\":\"\",\"description\":\"height\",\"compositions\":[]},{\"name\":\"sd_model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"construct_payload(prompt, negtive_prompt, width, height, sd_model)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"payload\",\"type_\":\"\",\"default_\":\"\",\"description\":\"payload\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(url, payload, session)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:run_t2i", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:run_t2i", "target": "{\"name\":\"run_t2i\",\"args\":[{\"name\":\"payloads\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"payloads: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_t2i(payloads: list)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:save", "target": "{\"name\":\"save\",\"args\":[{\"name\":\"imgs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"imgs\",\"compositions\":[]},{\"name\":\"save_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"save_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(imgs, save_name)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:simple_run_t2i", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:simple_run_t2i", "target": "{\"name\":\"simple_run_t2i\",\"args\":[{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload: dict\",\"compositions\":[]},{\"name\":\"auto_save\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_save: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_run_t2i(payload: dict, auto_save: bool)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:SPO", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:SPO", "target": "{\"name\":\"SPO\",\"package\":\"metagpt/utils/graph_repository.py:SPO\",\"attributes\":{\"object_\":{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]},\"predicate\":{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate : str\",\"compositions\":[]},\"subject\":{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:SPO", "target": "metagpt/utils/graph_repository.py:SPO:object_"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:SPO", "target": "metagpt/utils/graph_repository.py:SPO:predicate"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:SPO", "target": "metagpt/utils/graph_repository.py:SPO:subject"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:SPO", "target": "{\"lineno\":54,\"end_lineno\":78,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SPO\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/graph_repository.py:SPO", "target": "{\"name\":\"SPO\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"object_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"predicate\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"subject\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:SPO:object_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:SPO:object_", "target": "{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:SPO:predicate", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:SPO:predicate", "target": "{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:SPO:subject", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:SPO:subject", "target": "{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sales.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/sales.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/sales.py", "target": "metagpt/roles/sales.py:Sales"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales", "target": "{\"name\":\"Sales\",\"package\":\"metagpt/roles/sales.py:Sales\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}},\"methods\":{\"validate_stroe\":{\"name\":\"validate_stroe\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_stroe()\",\"aggregations\":[]}},\"compositions\":[\"BaseStore\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:desc"}, {"predicate": "has_class_property", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:store"}, {"predicate": "has_class_method", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:validate_stroe"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/role.py:Role"}, {"predicate": "is_composite_of", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:Sales", "target": "{\"lineno\":19,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Sales\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/sales.py:Sales", "target": "{\"name\":\"Sales\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseStore]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sales.py:Sales", "target": "?:BaseStore"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales:store", "target": "{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:validate_stroe", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales:validate_stroe", "target": "{\"name\":\"validate_stroe\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_stroe()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/search_and_summarize.py", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "{\"name\":\"SearchAndSummarize\",\"package\":\"metagpt/actions/search_and_summarize.py:SearchAndSummarize\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"result\":{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"context: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"system_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(context: list[Message], system_text): str\",\"aggregations\":[\"Message\"]},\"validate_search_engine\":{\"name\":\"validate_search_engine\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_search_engine()\",\"aggregations\":[]}},\"compositions\":[\"SearchEngine\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:content"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:result"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine"}, {"predicate": "has_class_method", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:validate_search_engine"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/tools/search_engine.py:SearchEngine"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "{\"lineno\":104,\"end_lineno\":147,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchAndSummarize\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "{\"name\":\"SearchAndSummarize\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngine]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "?:SearchEngine"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:content", "target": "{\"name\":\"content\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:result", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:result", "target": "{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine", "target": "{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"context: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"system_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(context: list[Message], system_text): str\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:validate_search_engine", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:validate_search_engine", "target": "{\"name\":\"validate_search_engine\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_search_engine()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/search_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/search_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/search_config.py", "target": "metagpt/configs/search_config.py:SearchConfig"}, {"predicate": "is", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "{\"name\":\"SearchConfig\",\"package\":\"metagpt/configs/search_config.py:SearchConfig\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]},\"cse_id\":{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]},\"search_func\":{\"name\":\"search_func\",\"type_\":\"Optional[Callable]\",\"default_\":\"\",\"description\":\"search_func : Optional[Callable]\",\"compositions\":[\"Callable\"]}},\"methods\":{},\"compositions\":[\"Callable\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/configs/search_config.py:SearchConfig:api_key"}, {"predicate": "has_class_property", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/configs/search_config.py:SearchConfig:api_type"}, {"predicate": "has_class_property", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/configs/search_config.py:SearchConfig:cse_id"}, {"predicate": "has_class_property", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/configs/search_config.py:SearchConfig:search_func"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "?:Callable"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/config2.py:Config"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/config2.py:Config:search"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "{\"name\":\"SearchConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cse_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"search_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/search_config.py:SearchConfig:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/search_config.py:SearchConfig:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/search_config.py:SearchConfig:api_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/search_config.py:SearchConfig:api_type", "target": "{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/search_config.py:SearchConfig:cse_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/search_config.py:SearchConfig:cse_id", "target": "{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/search_config.py:SearchConfig:search_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/search_config.py:SearchConfig:search_func", "target": "{\"name\":\"search_func\",\"type_\":\"Optional[Callable]\",\"default_\":\"\",\"description\":\"search_func : Optional[Callable]\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine.py", "target": "metagpt/tools/search_engine.py:SearchEngine"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine.py", "target": "metagpt/tools/search_engine.py:SkSearchEngine"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "{\"name\":\"SearchEngine\",\"package\":\"metagpt/tools/search_engine.py:SearchEngine\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]},\"run_func\":{\"name\":\"run_func\",\"type_\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}},\"methods\":{\"from_search_config\":{\"name\":\"from_search_config\",\"args\":[{\"name\":\"config\",\"type_\":\"SearchConfig\",\"default_\":\"\",\"description\":\"config: SearchConfig\",\"compositions\":[\"SearchConfig\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_search_config(config: SearchConfig)\",\"aggregations\":[\"SearchConfig\"]},\"from_search_func\":{\"name\":\"from_search_func\",\"args\":[{\"name\":\"search_func\",\"type_\":\"Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]\",\"default_\":\"\",\"description\":\"search_func: Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_search_func(search_func: Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]])\",\"aggregations\":[\"Callable\",\"Coroutine\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True]): str\",\"aggregations\":[]},\"validate_extra\":{\"name\":\"validate_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_extra()\",\"aggregations\":[]}},\"compositions\":[\"Callable\",\"Coroutine\"],\"aggregations\":[\"SearchConfig\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:api_key"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:engine"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:model_config"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:proxy"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:run_func"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:from_search_config"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:from_search_func"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:run"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:validate_extra"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "?:Callable"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "?:Coroutine"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "?:SearchConfig"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/actions/research.py:CollectLinks"}, {"predicate": "isCompositeOn", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/actions/research.py:CollectLinks:search_engine"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine"}, {"predicate": "isCompositeOn", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize"}, {"predicate": "isAggregateOn", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:_process_extra"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "{\"lineno\":40,\"end_lineno\":162,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchEngine\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "{\"name\":\"SearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"run_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:engine", "target": "{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:run_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:run_func", "target": "{\"name\":\"run_func\",\"type_\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:from_search_config", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:from_search_config", "target": "{\"name\":\"from_search_config\",\"args\":[{\"name\":\"config\",\"type_\":\"SearchConfig\",\"default_\":\"\",\"description\":\"config: SearchConfig\",\"compositions\":[\"SearchConfig\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_search_config(config: SearchConfig)\",\"aggregations\":[\"SearchConfig\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:from_search_func", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:from_search_func", "target": "{\"name\":\"from_search_func\",\"args\":[{\"name\":\"search_func\",\"type_\":\"Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]\",\"default_\":\"\",\"description\":\"search_func: Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_search_func(search_func: Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]])\",\"aggregations\":[\"Callable\",\"Coroutine\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True]): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:validate_extra", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:validate_extra", "target": "{\"name\":\"validate_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_extra()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools", "target": ""}, {"predicate": "has_class", "source": "metagpt/tools", "target": "metagpt/tools:SearchEngineType"}, {"predicate": "has_class", "source": "metagpt/tools", "target": "metagpt/tools:WebBrowserEngineType"}, {"predicate": "is", "source": "metagpt/tools:SearchEngineType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools:SearchEngineType", "target": "{\"name\":\"SearchEngineType\",\"package\":\"metagpt/tools:SearchEngineType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/tools:SearchEngineType:name"}, {"predicate": "isCompositeOf", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/configs/search_config.py:SearchConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/configs/search_config.py:SearchConfig:api_type"}, {"predicate": "isCompositeOf", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/tools/search_engine.py:SearchEngine"}, {"predicate": "isCompositeOn", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/tools/search_engine.py:SearchEngine:engine"}, {"predicate": "has_class_view", "source": "metagpt/tools:SearchEngineType", "target": "{\"name\":\"SearchEngineType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools:SearchEngineType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools:SearchEngineType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/search_space.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/search_space.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/strategy/search_space.py", "target": "metagpt/strategy/search_space.py:SearchSpace"}, {"predicate": "is", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "{\"name\":\"SearchSpace\",\"package\":\"metagpt/strategy/search_space.py:SearchSpace\",\"attributes\":{\"search_space\":{\"name\":\"search_space\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"search_space : dict\",\"compositions\":[]}},\"methods\":{\"add_node\":{\"name\":\"add_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_node(node)\",\"aggregations\":[]},\"get_node\":{\"name\":\"get_node\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_node(key)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "metagpt/strategy/search_space.py:SearchSpace:search_space"}, {"predicate": "has_class_method", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "metagpt/strategy/search_space.py:SearchSpace:add_node"}, {"predicate": "has_class_method", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "metagpt/strategy/search_space.py:SearchSpace:get_node"}, {"predicate": "isAggregateOf", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "isAggregateOn", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "metagpt/strategy/solver.py:BaseSolver:search_space"}, {"predicate": "has_class_method", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "metagpt/strategy/search_space.py:SearchSpace:__init__"}, {"predicate": "has_page_info", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "{\"lineno\":10,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchSpace\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/search_space.py:SearchSpace", "target": "{\"name\":\"SearchSpace\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"search_space\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/search_space.py:SearchSpace:search_space", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/search_space.py:SearchSpace:search_space", "target": "{\"name\":\"search_space\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"search_space : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/search_space.py:SearchSpace:add_node", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/search_space.py:SearchSpace:add_node", "target": "{\"name\":\"add_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_node(node)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/search_space.py:SearchSpace:get_node", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/search_space.py:SearchSpace:get_node", "target": "{\"name\":\"get_node\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_node(key)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/searcher.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/searcher.py", "target": "metagpt/roles/searcher.py:Searcher"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher", "target": "{\"name\":\"Searcher\",\"package\":\"metagpt/roles/searcher.py:Searcher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}},\"methods\":{\"post_root\":{\"name\":\"post_root\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"post_root()\",\"aggregations\":[]}},\"compositions\":[\"SearchEngine\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:search_engine"}, {"predicate": "has_class_method", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:post_root"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/role.py:Role"}, {"predicate": "is_composite_of", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/tools/search_engine.py:SearchEngine"}, {"predicate": "has_class_method", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:_act_sp"}, {"predicate": "has_class_method", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:Searcher", "target": "{\"lineno\":24,\"end_lineno\":69,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Searcher\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/searcher.py:Searcher", "target": "{\"name\":\"Searcher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngine]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/searcher.py:Searcher", "target": "?:SearchEngine"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:search_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:search_engine", "target": "{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:post_root", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:post_root", "target": "{\"name\":\"post_root\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"post_root()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper"}, {"predicate": "has_class", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient"}, {"predicate": "has_function", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "metagpt/tools/web_browser_engine_selenium.py:_gen_get_driver_func"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "{\"name\":\"SeleniumWrapper\",\"package\":\"metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]},\"executable_path\":{\"name\":\"executable_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executable_path\",\"compositions\":[]},\"executor\":{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]},\"launch_args\":{\"name\":\"launch_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"launch_args\",\"compositions\":[]},\"launch_kwargs\":{\"name\":\"launch_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"launch_kwargs : dict\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}},\"compositions\":[\"futures.Executor\",\"asyncio.AbstractEventLoop\"],\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:browser_type"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executable_path"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executor"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_args"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_kwargs"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:loop"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:model_config"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:proxy"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:run"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "?:futures.Executor"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "?:asyncio.AbstractEventLoop"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "?:WebPage"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "?:WebPage\\"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_run_precheck"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_scrape_website"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "{\"lineno\":22,\"end_lineno\":88,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SeleniumWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "{\"name\":\"SeleniumWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chrome','firefox','edge','ie']\",\"default_value\":\"\"},{\"name\":\"executable_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"Optional[futures.Executor]\",\"default_value\":\"\"},{\"name\":\"launch_args\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"launch_kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"Optional[asyncio.AbstractEventLoop]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:browser_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:browser_type", "target": "{\"name\":\"browser_type\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executable_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executable_path", "target": "{\"name\":\"executable_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executable_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executable_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executor", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executor", "target": "{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_args", "target": "{\"name\":\"launch_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"launch_args\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_args", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_kwargs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_kwargs", "target": "{\"name\":\"launch_kwargs\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"launch_kwargs : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:loop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:loop", "target": "{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\",\"WebPage\\\\\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:SerializationMixin", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SerializationMixin", "target": "{\"name\":\"SerializationMixin\",\"package\":\"metagpt/schema.py:SerializationMixin\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:SerializationMixin", "target": "metagpt/schema.py:SerializationMixin:__serialize_with_class_type__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:SerializationMixin", "target": "metagpt/schema.py:SerializationMixin:__convert_to_real_type__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:SerializationMixin", "target": "metagpt/schema.py:SerializationMixin:__init_subclass__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:SerializationMixin", "target": "{\"lineno\":59,\"end_lineno\":118,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerializationMixin\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:SerializationMixin", "target": "{\"name\":\"SerializationMixin\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_serpapi.py", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "{\"name\":\"SerpAPIWrapper\",\"package\":\"metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper\",\"attributes\":{\"aiosession\":{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]},\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"params\":{\"name\":\"params\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"params : dict\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"get_params\":{\"name\":\"get_params\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_params(query: str): Dict[str, str]\",\"aggregations\":[]},\"results\":{\"name\":\"results\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(query: str, max_results: int): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query, max_results: int, as_string: bool): str\",\"aggregations\":[]},\"validate_serpapi\":{\"name\":\"validate_serpapi\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_serpapi(values: dict): dict\",\"aggregations\":[]}},\"compositions\":[\"aiohttp.ClientSession\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:aiosession"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:api_key"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:model_config"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:params"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:proxy"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:get_params"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:results"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:run"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:validate_serpapi"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "?:aiohttp.ClientSession"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:_process_response"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "{\"lineno\":15,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerpAPIWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "{\"name\":\"SerpAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aiosession\",\"visibility\":\"+\",\"value_type\":\"Optional[aiohttp.ClientSession]\",\"default_value\":\"\"},{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"params\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:aiosession", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:aiosession", "target": "{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:params", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:params", "target": "{\"name\":\"params\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"params : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:get_params", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:get_params", "target": "{\"name\":\"get_params\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_params(query: str): Dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:results", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:results", "target": "{\"name\":\"results\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(query: str, max_results: int): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query, max_results: int, as_string: bool): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:validate_serpapi", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:validate_serpapi", "target": "{\"name\":\"validate_serpapi\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_serpapi(values: dict): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_serper.py", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "{\"name\":\"SerperWrapper\",\"package\":\"metagpt/tools/search_engine_serper.py:SerperWrapper\",\"attributes\":{\"aiosession\":{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]},\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"payload\":{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"get_headers\":{\"name\":\"get_headers\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_headers(): Dict[str, str]\",\"aggregations\":[]},\"get_payloads\":{\"name\":\"get_payloads\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_payloads(queries: list[str], max_results: int): Dict[str, str]\",\"aggregations\":[]},\"results\":{\"name\":\"results\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(queries: list[str], max_results: int): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: bool): str\",\"aggregations\":[]},\"validate_serper\":{\"name\":\"validate_serper\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_serper(values: dict): dict\",\"aggregations\":[]}},\"compositions\":[\"aiohttp.ClientSession\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:aiosession"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:api_key"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:model_config"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:payload"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:proxy"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_headers"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_payloads"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:results"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:run"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:validate_serper"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "?:aiohttp.ClientSession"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:_process_response"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "{\"lineno\":16,\"end_lineno\":115,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerperWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "{\"name\":\"SerperWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aiosession\",\"visibility\":\"+\",\"value_type\":\"Optional[aiohttp.ClientSession]\",\"default_value\":\"\"},{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"payload\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:aiosession", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:aiosession", "target": "{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:payload", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:payload", "target": "{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_headers", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_headers", "target": "{\"name\":\"get_headers\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_headers(): Dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_payloads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_payloads", "target": "{\"name\":\"get_payloads\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_payloads(queries: list[str], max_results: int): Dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:results", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:results", "target": "{\"name\":\"results\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(queries: list[str], max_results: int): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: bool): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:validate_serper", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:validate_serper", "target": "{\"name\":\"validate_serper\",\"args\":[{\"name\":\"values\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"values: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"validate_serper(values: dict): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:SimpleMessage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SimpleMessage", "target": "{\"name\":\"SimpleMessage\",\"package\":\"metagpt/schema.py:SimpleMessage\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"role\":{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:SimpleMessage", "target": "metagpt/schema.py:SimpleMessage:content"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:SimpleMessage", "target": "metagpt/schema.py:SimpleMessage:role"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:SimpleMessage", "target": "{\"lineno\":121,\"end_lineno\":123,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SimpleMessage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:SimpleMessage", "target": "{\"name\":\"SimpleMessage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"role\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:SimpleMessage:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SimpleMessage:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:SimpleMessage:role", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SimpleMessage:role", "target": "{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/singleton.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/singleton.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/singleton.py", "target": "metagpt/utils/singleton.py:Singleton"}, {"predicate": "is", "source": "metagpt/utils/singleton.py:Singleton", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/singleton.py:Singleton", "target": "{\"name\":\"Singleton\",\"package\":\"metagpt/utils/singleton.py:Singleton\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/singleton.py:Singleton", "target": "metagpt/utils/singleton.py:Singleton:__call__"}, {"predicate": "has_page_info", "source": "metagpt/utils/singleton.py:Singleton", "target": "{\"lineno\":11,\"end_lineno\":22,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Singleton\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/singleton.py:Singleton", "target": "{\"name\":\"Singleton\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/sk_agent.py", "target": "metagpt/roles/sk_agent.py:SkAgent"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "{\"name\":\"SkAgent\",\"package\":\"metagpt/roles/sk_agent.py:SkAgent\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"import_semantic_skill_from_directory\":{\"name\":\"import_semantic_skill_from_directory\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_semantic_skill_from_directory : Callable\",\"compositions\":[\"Callable\"]},\"import_skill\":{\"name\":\"import_skill\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_skill : Callable\",\"compositions\":[\"Callable\"]},\"kernel\":{\"name\":\"kernel\",\"type_\":\"Kernel\",\"default_\":\"\",\"description\":\"kernel : Kernel\",\"compositions\":[\"Kernel\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"plan\":{\"name\":\"plan\",\"type_\":\"Plan\",\"default_\":\"\",\"description\":\"plan : Plan\",\"compositions\":[\"Plan\"]},\"planner\":{\"name\":\"planner\",\"type_\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_\":\"\",\"description\":\"planner : Optional[Union[BasicPlanner, SequentialPlanner, ActionPlanner]]\",\"compositions\":[\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"]},\"planner_cls\":{\"name\":\"planner_cls\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"planner_cls : Optional[Any]\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Callable\",\"Kernel\",\"Plan\",\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:import_semantic_skill_from_directory"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:import_skill"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:kernel"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:plan"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:planner"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:planner_cls"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:profile"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:Callable"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:Kernel"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:ActionPlanner"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:BasicPlanner"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:SequentialPlanner"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/role.py:Role"}, {"predicate": "is_composite_of", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/schema.py:Plan"}, {"predicate": "has_class_method", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "{\"lineno\":26,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkAgent\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "{\"name\":\"SkAgent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"import_semantic_skill_from_directory\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"import_skill\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"kernel\",\"visibility\":\"+\",\"value_type\":\"Kernel\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"plan\",\"visibility\":\"+\",\"value_type\":\"Plan\",\"default_value\":\"\"},{\"name\":\"planner\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_value\":\"\"},{\"name\":\"planner_cls\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:Plan"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:import_semantic_skill_from_directory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:import_semantic_skill_from_directory", "target": "{\"name\":\"import_semantic_skill_from_directory\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_semantic_skill_from_directory : Callable\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:import_skill", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:import_skill", "target": "{\"name\":\"import_skill\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_skill : Callable\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:kernel", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:kernel", "target": "{\"name\":\"kernel\",\"type_\":\"Kernel\",\"default_\":\"\",\"description\":\"kernel : Kernel\",\"compositions\":[\"Kernel\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:plan", "target": "{\"name\":\"plan\",\"type_\":\"Plan\",\"default_\":\"\",\"description\":\"plan : Plan\",\"compositions\":[\"Plan\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:planner", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:planner", "target": "{\"name\":\"planner\",\"type_\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_\":\"\",\"description\":\"planner : Optional[Union[BasicPlanner, SequentialPlanner, ActionPlanner]]\",\"compositions\":[\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:planner_cls", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:planner_cls", "target": "{\"name\":\"planner_cls\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"planner_cls : Optional[Any]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "{\"name\":\"SkSearchEngine\",\"package\":\"metagpt/tools/search_engine.py:SkSearchEngine\",\"attributes\":{\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine:run"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "{\"lineno\":19,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkSearchEngine\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "{\"name\":\"SkSearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine", "target": "{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SkSearchEngine:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SkSearchEngine:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill", "target": "{\"name\":\"Skill\",\"package\":\"metagpt/learn/skill_loader.py:Skill\",\"attributes\":{\"arguments\":{\"name\":\"arguments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"arguments\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]},\"examples\":{\"name\":\"examples\",\"type_\":\"List[Example]\",\"default_\":\"\",\"description\":\"examples : List[Example]\",\"compositions\":[\"Example\"]},\"id\":{\"name\":\"id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"id : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"parameters\":{\"name\":\"parameters\",\"type_\":\"Optional[Dict[str,Parameter]]\",\"default_\":\"\",\"description\":\"parameters : Optional[Dict[str, Parameter]]\",\"compositions\":[\"Parameter\"]},\"returns\":{\"name\":\"returns\",\"type_\":\"\",\"default_\":\"\",\"description\":\"returns\",\"compositions\":[]},\"x_prerequisite\":{\"name\":\"x_prerequisite\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"x_prerequisite : Dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Example\",\"Parameter\"],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:arguments"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:description"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:examples"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:id"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:name"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:parameters"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:returns"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:x_prerequisite"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction"}, {"predicate": "isCompositeOn", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/actions/skill_action.py:SkillAction"}, {"predicate": "isCompositeOn", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/actions/skill_action.py:SkillAction:skill"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Example"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Parameter"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Skill", "target": "{\"lineno\":34,\"end_lineno\":50,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Skill\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Skill", "target": "{\"name\":\"Skill\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arguments\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"examples\",\"visibility\":\"+\",\"value_type\":\"List[Example]\",\"default_value\":\"\"},{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"parameters\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict[str,Parameter]]\",\"default_value\":\"\"},{\"name\":\"returns\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"x_prerequisite\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Skill", "target": "?:Example"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Skill", "target": "?:Parameter"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:arguments", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:arguments", "target": "{\"name\":\"arguments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"arguments\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:arguments", "target": "class_method"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:description", "target": "{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:examples", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:examples", "target": "{\"name\":\"examples\",\"type_\":\"List[Example]\",\"default_\":\"\",\"description\":\"examples : List[Example]\",\"compositions\":[\"Example\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:id", "target": "{\"name\":\"id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"id : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:parameters", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:parameters", "target": "{\"name\":\"parameters\",\"type_\":\"Optional[Dict[str,Parameter]]\",\"default_\":\"\",\"description\":\"parameters : Optional[Dict[str, Parameter]]\",\"compositions\":[\"Parameter\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:returns", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:returns", "target": "{\"name\":\"returns\",\"type_\":\"\",\"default_\":\"\",\"description\":\"returns\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:x_prerequisite", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:x_prerequisite", "target": "{\"name\":\"x_prerequisite\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"x_prerequisite : Dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "{\"name\":\"SkillAction\",\"package\":\"metagpt/actions/skill_action.py:SkillAction\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"args : Dict\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]},\"skill\":{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}},\"methods\":{\"find_and_call_function\":{\"name\":\"find_and_call_function\",\"args\":[{\"name\":\"function_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"function_name\",\"compositions\":[]},{\"name\":\"args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"args\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"find_and_call_function(function_name, args): str\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:args"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:rsp"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:skill"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:find_and_call_function"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "{\"lineno\":82,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillAction\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "{\"name\":\"SkillAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"skill\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:args", "target": "{\"name\":\"args\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"args : Dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:rsp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:rsp", "target": "{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:skill", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:skill", "target": "{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:find_and_call_function", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:find_and_call_function", "target": "{\"name\":\"find_and_call_function\",\"args\":[{\"name\":\"function_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"function_name\",\"compositions\":[]},{\"name\":\"args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"args\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"find_and_call_function(function_name, args): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/management/skill_manager.py", "target": "metagpt/management/skill_manager.py:SkillManager"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "{\"name\":\"SkillManager\",\"package\":\"metagpt/management/skill_manager.py:SkillManager\",\"attributes\":{},\"methods\":{\"add_skill\":{\"name\":\"add_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_skill(skill: Skill)\",\"aggregations\":[\"Skill\"]},\"del_skill\":{\"name\":\"del_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"del_skill(skill_name: str)\",\"aggregations\":[]},\"generate_skill_desc\":{\"name\":\"generate_skill_desc\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_skill_desc(skill: Skill): str\",\"aggregations\":[\"Skill\"]},\"get_skill\":{\"name\":\"get_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(skill_name: str): Skill\",\"aggregations\":[\"Skill\"]},\"retrieve_skill\":{\"name\":\"retrieve_skill\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Skill]\",\"description\":\"list[Skill]\",\"compositions\":[\"Skill\"]},\"description\":\"retrieve_skill(desc: str, n_results: int): list[Skill]\",\"aggregations\":[\"Skill\"]},\"retrieve_skill_scored\":{\"name\":\"retrieve_skill_scored\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"retrieve_skill_scored(desc: str, n_results: int): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Skill\"]}"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:add_skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:del_skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:generate_skill_desc"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:get_skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill_scored"}, {"predicate": "isAggregateOf", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "?:Skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:__init__"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "{\"lineno\":17,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "{\"name\":\"SkillManager\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:add_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:add_skill", "target": "{\"name\":\"add_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_skill(skill: Skill)\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:del_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:del_skill", "target": "{\"name\":\"del_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"del_skill(skill_name: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:generate_skill_desc", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:generate_skill_desc", "target": "{\"name\":\"generate_skill_desc\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_skill_desc(skill: Skill): str\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:get_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:get_skill", "target": "{\"name\":\"get_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(skill_name: str): Skill\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill", "target": "{\"name\":\"retrieve_skill\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Skill]\",\"description\":\"list[Skill]\",\"compositions\":[\"Skill\"]},\"description\":\"retrieve_skill(desc: str, n_results: int): list[Skill]\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill_scored", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill_scored", "target": "{\"name\":\"retrieve_skill_scored\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"retrieve_skill_scored(desc: str, n_results: int): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "{\"name\":\"SkillsDeclaration\",\"package\":\"metagpt/learn/skill_loader.py:SkillsDeclaration\",\"attributes\":{\"components\":{\"name\":\"components\",\"type_\":\"Optional[Components]\",\"default_\":\"\",\"description\":\"components : Optional[Components]\",\"compositions\":[\"Components\"]},\"entities\":{\"name\":\"entities\",\"type_\":\"Dict[str,Entity]\",\"default_\":\"\",\"description\":\"entities : Dict[str, Entity]\",\"compositions\":[\"Entity\"]},\"skillapi\":{\"name\":\"skillapi\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skillapi : str\",\"compositions\":[]}},\"methods\":{\"get_skill\":{\"name\":\"get_skill\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(name, entity_name: str): Skill\",\"aggregations\":[\"Skill\"]},\"get_skill_list\":{\"name\":\"get_skill_list\",\"args\":[{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"get_skill_list(entity_name: str, context: Context): Dict\",\"aggregations\":[\"Context\"]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"skill_yaml_file_name\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"skill_yaml_file_name: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'SkillsDeclaration'\",\"description\":\"'SkillsDeclaration'\",\"compositions\":[\"SkillsDeclaration\"]},\"description\":\"load(skill_yaml_file_name: Path): 'SkillsDeclaration'\",\"aggregations\":[\"SkillsDeclaration\",\"Path\"]}},\"compositions\":[\"Components\",\"Entity\"],\"aggregations\":[\"Skill\",\"Context\",\"SkillsDeclaration\",\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:components"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:entities"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:skillapi"}, {"predicate": "has_class_method", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill"}, {"predicate": "has_class_method", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list"}, {"predicate": "has_class_method", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:load"}, {"predicate": "isAggregateOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Skill"}, {"predicate": "isAggregateOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Context"}, {"predicate": "isAggregateOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:SkillsDeclaration"}, {"predicate": "isAggregateOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Path"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:Components"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:Entity"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "{\"lineno\":62,\"end_lineno\":101,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillsDeclaration\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "{\"name\":\"SkillsDeclaration\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"components\",\"visibility\":\"+\",\"value_type\":\"Optional[Components]\",\"default_value\":\"\"},{\"name\":\"entities\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Entity]\",\"default_value\":\"\"},{\"name\":\"skillapi\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Components"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Entity"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:components", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:components", "target": "{\"name\":\"components\",\"type_\":\"Optional[Components]\",\"default_\":\"\",\"description\":\"components : Optional[Components]\",\"compositions\":[\"Components\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:entities", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:entities", "target": "{\"name\":\"entities\",\"type_\":\"Dict[str,Entity]\",\"default_\":\"\",\"description\":\"entities : Dict[str, Entity]\",\"compositions\":[\"Entity\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:skillapi", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:skillapi", "target": "{\"name\":\"skillapi\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skillapi : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill", "target": "{\"name\":\"get_skill\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(name, entity_name: str): Skill\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list", "target": "{\"name\":\"get_skill_list\",\"args\":[{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"get_skill_list(entity_name: str, context: Context): Dict\",\"aggregations\":[\"Context\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:load", "target": "{\"name\":\"load\",\"args\":[{\"name\":\"skill_yaml_file_name\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"skill_yaml_file_name: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'SkillsDeclaration'\",\"description\":\"'SkillsDeclaration'\",\"compositions\":[\"SkillsDeclaration\"]},\"description\":\"load(skill_yaml_file_name: Path): 'SkillsDeclaration'\",\"aggregations\":[\"SkillsDeclaration\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/environment/software_env/software_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/software_env/software_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/software_env/software_env.py", "target": "metagpt/environment/software_env/software_env.py:SoftwareEnv"}, {"predicate": "is", "source": "metagpt/environment/software_env/software_env.py:SoftwareEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/software_env/software_env.py:SoftwareEnv", "target": "{\"name\":\"SoftwareEnv\",\"package\":\"metagpt/environment/software_env/software_env.py:SoftwareEnv\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/software_env/software_env.py:SoftwareEnv", "target": "metagpt/environment/base_env.py:Environment"}, {"predicate": "has_page_info", "source": "metagpt/environment/software_env/software_env.py:SoftwareEnv", "target": "{\"lineno\":9,\"end_lineno\":12,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SoftwareEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/software_env/software_env.py:SoftwareEnv", "target": "{\"name\":\"SoftwareEnv\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "{\"name\":\"SparkLLM\",\"package\":\"metagpt/provider/spark_api.py:SparkLLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:config"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:get_choice_text"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "{\"lineno\":26,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SparkLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "{\"name\":\"SparkLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "{\"name\":\"SplitBins\",\"package\":\"metagpt/tools/libs/feature_engineering.py:SplitBins\",\"attributes\":{\"cols\":{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]},\"encoder\":{\"name\":\"encoder\",\"type_\":\"KBinsDiscretizer,NoneType\",\"default_\":\"\",\"description\":\"encoder : KBinsDiscretizer, NoneType\",\"compositions\":[\"KBinsDiscretizer\"]},\"strategy\":{\"name\":\"strategy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strategy : str\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[\"KBinsDiscretizer\"],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "metagpt/tools/libs/feature_engineering.py:SplitBins:cols"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "metagpt/tools/libs/feature_engineering.py:SplitBins:encoder"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "metagpt/tools/libs/feature_engineering.py:SplitBins:strategy"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "metagpt/tools/libs/feature_engineering.py:SplitBins:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "metagpt/tools/libs/feature_engineering.py:SplitBins:transform"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "?:KBinsDiscretizer"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "metagpt/tools/libs/feature_engineering.py:SplitBins:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "{\"lineno\":252,\"end_lineno\":276,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SplitBins\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins", "target": "{\"name\":\"SplitBins\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"encoder\",\"visibility\":\"+\",\"value_type\":\"KBinsDiscretizer,NoneType\",\"default_value\":\"\"},{\"name\":\"strategy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:cols", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:cols", "target": "{\"name\":\"cols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"cols : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:encoder", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:encoder", "target": "{\"name\":\"encoder\",\"type_\":\"KBinsDiscretizer,NoneType\",\"default_\":\"\",\"description\":\"encoder : KBinsDiscretizer, NoneType\",\"compositions\":[\"KBinsDiscretizer\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:strategy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:strategy", "target": "{\"name\":\"strategy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strategy : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale", "target": "{\"name\":\"StandardScale\",\"package\":\"metagpt/tools/libs/data_preprocess.py:StandardScale\",\"attributes\":{\"features\":{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"StandardScaler\",\"default_\":\"\",\"description\":\"model : StandardScaler\",\"compositions\":[\"StandardScaler\"]}},\"methods\":{},\"compositions\":[\"StandardScaler\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale", "target": "metagpt/tools/libs/data_preprocess.py:StandardScale:features"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale", "target": "metagpt/tools/libs/data_preprocess.py:StandardScale:model"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale", "target": "?:StandardScaler"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale", "target": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale", "target": "metagpt/tools/libs/data_preprocess.py:StandardScale:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale", "target": "{\"lineno\":121,\"end_lineno\":128,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"StandardScale\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale", "target": "{\"name\":\"StandardScale\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"features\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"StandardScaler\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale:features", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale:features", "target": "{\"name\":\"features\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"features : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale:model", "target": "{\"name\":\"model\",\"type_\":\"StandardScaler\",\"default_\":\"\",\"description\":\"model : StandardScaler\",\"compositions\":[\"StandardScaler\"]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py", "target": "metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv", "target": "{\"name\":\"StanfordTownEnv\",\"package\":\"metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv", "target": "metagpt/environment/base_env.py:Environment"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv", "target": "{\"lineno\":11,\"end_lineno\":12,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"StanfordTownEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:StanfordTownEnv", "target": "{\"name\":\"StanfordTownEnv\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "{\"name\":\"StanfordTownExtEnv\",\"package\":\"metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv\",\"attributes\":{\"address_tiles\":{\"name\":\"address_tiles\",\"type_\":\"dict[str,set]\",\"default_\":\"\",\"description\":\"address_tiles : dict[str, set]\",\"compositions\":[]},\"collision_maze\":{\"name\":\"collision_maze\",\"type_\":\"list[list]\",\"default_\":\"\",\"description\":\"collision_maze : list[list]\",\"compositions\":[]},\"maze_asset_path\":{\"name\":\"maze_asset_path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"maze_asset_path : Optional[Path]\",\"compositions\":[\"Path\"]},\"maze_height\":{\"name\":\"maze_height\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"maze_height : int\",\"compositions\":[]},\"maze_width\":{\"name\":\"maze_width\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"maze_width : int\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"special_constraint\":{\"name\":\"special_constraint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"special_constraint : str\",\"compositions\":[]},\"sq_tile_size\":{\"name\":\"sq_tile_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"sq_tile_size : int\",\"compositions\":[]},\"tiles\":{\"name\":\"tiles\",\"type_\":\"list[list[dict]]\",\"default_\":\"\",\"description\":\"tiles : list[list[dict]]\",\"compositions\":[]}},\"methods\":{\"access_tile\":{\"name\":\"access_tile\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"access_tile(tile: tuple[int, int]): dict\",\"aggregations\":[\"tuple\"]},\"add_event_from_tile\":{\"name\":\"add_event_from_tile\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"add_event_from_tile(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]},\"add_tiles_event\":{\"name\":\"add_tiles_event\",\"args\":[{\"name\":\"pt_y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"pt_y: int\",\"compositions\":[]},{\"name\":\"pt_x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"pt_x: int\",\"compositions\":[]},{\"name\":\"event\",\"type_\":\"Tuple[str,str,str,str]\",\"default_\":\"\",\"description\":\"event: Tuple[str, str, str, str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_tiles_event(pt_y: int, pt_x: int, event: Tuple[str, str, str, str])\",\"aggregations\":[]},\"get_address_tiles\":{\"name\":\"get_address_tiles\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_address_tiles(): dict\",\"aggregations\":[]},\"get_collision_maze\":{\"name\":\"get_collision_maze\",\"args\":[],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"get_collision_maze(): list\",\"aggregations\":[]},\"get_nearby_tiles\":{\"name\":\"get_nearby_tiles\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"vision_r\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"vision_r: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[tuple[int,int]]\",\"description\":\"list[tuple[int, int]]\",\"compositions\":[\"tuple\"]},\"description\":\"get_nearby_tiles(tile: tuple[int, int], vision_r: int): list[tuple[int, int]]\",\"aggregations\":[\"tuple\"]},\"get_tile_path\":{\"name\":\"get_tile_path\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"level\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"level: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_tile_path(tile: tuple[int, int], level: str): str\",\"aggregations\":[\"tuple\"]},\"remove_event_from_tile\":{\"name\":\"remove_event_from_tile\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"remove_event_from_tile(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]},\"remove_subject_events_from_tile\":{\"name\":\"remove_subject_events_from_tile\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"remove_subject_events_from_tile(subject: str, tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]},\"turn_coordinate_to_tile\":{\"name\":\"turn_coordinate_to_tile\",\"args\":[{\"name\":\"px_coordinate\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"px_coordinate: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"tuple[int,int]\",\"description\":\"tuple[int, int]\",\"compositions\":[\"tuple\"]},\"description\":\"turn_coordinate_to_tile(px_coordinate: tuple[int, int]): tuple[int, int]\",\"aggregations\":[\"tuple\"]},\"turn_event_from_tile_idle\":{\"name\":\"turn_event_from_tile_idle\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"turn_event_from_tile_idle(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}},\"compositions\":[\"Path\"],\"aggregations\":[\"tuple\"]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:address_tiles"}, {"predicate": "has_class_property", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:collision_maze"}, {"predicate": "has_class_property", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_asset_path"}, {"predicate": "has_class_property", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_height"}, {"predicate": "has_class_property", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_width"}, {"predicate": "has_class_property", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:model_config"}, {"predicate": "has_class_property", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:special_constraint"}, {"predicate": "has_class_property", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:sq_tile_size"}, {"predicate": "has_class_property", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:tiles"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:access_tile"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:add_event_from_tile"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:add_tiles_event"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_address_tiles"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_collision_maze"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_nearby_tiles"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_tile_path"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:remove_event_from_tile"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:remove_subject_events_from_tile"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:turn_coordinate_to_tile"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:turn_event_from_tile_idle"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "?:tuple"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/base_env.py:ExtEnv"}, {"predicate": "has_class_method", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:_init_maze"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "{\"lineno\":16,\"end_lineno\":379,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"StanfordTownExtEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv", "target": "{\"name\":\"StanfordTownExtEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"address_tiles\",\"visibility\":\"+\",\"value_type\":\"dict[str,set]\",\"default_value\":\"\"},{\"name\":\"collision_maze\",\"visibility\":\"+\",\"value_type\":\"list[list]\",\"default_value\":\"\"},{\"name\":\"maze_asset_path\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"},{\"name\":\"maze_height\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"maze_width\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"special_constraint\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"sq_tile_size\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"tiles\",\"visibility\":\"+\",\"value_type\":\"list[list[dict]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:address_tiles", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:address_tiles", "target": "{\"name\":\"address_tiles\",\"type_\":\"dict[str,set]\",\"default_\":\"\",\"description\":\"address_tiles : dict[str, set]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:collision_maze", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:collision_maze", "target": "{\"name\":\"collision_maze\",\"type_\":\"list[list]\",\"default_\":\"\",\"description\":\"collision_maze : list[list]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_asset_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_asset_path", "target": "{\"name\":\"maze_asset_path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"maze_asset_path : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_height", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_height", "target": "{\"name\":\"maze_height\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"maze_height : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_width", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:maze_width", "target": "{\"name\":\"maze_width\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"maze_width : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:special_constraint", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:special_constraint", "target": "{\"name\":\"special_constraint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"special_constraint : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:sq_tile_size", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:sq_tile_size", "target": "{\"name\":\"sq_tile_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"sq_tile_size : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:tiles", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:tiles", "target": "{\"name\":\"tiles\",\"type_\":\"list[list[dict]]\",\"default_\":\"\",\"description\":\"tiles : list[list[dict]]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:access_tile", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:access_tile", "target": "{\"name\":\"access_tile\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"access_tile(tile: tuple[int, int]): dict\",\"aggregations\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:add_event_from_tile", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:add_event_from_tile", "target": "{\"name\":\"add_event_from_tile\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"add_event_from_tile(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:add_tiles_event", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:add_tiles_event", "target": "{\"name\":\"add_tiles_event\",\"args\":[{\"name\":\"pt_y\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"pt_y: int\",\"compositions\":[]},{\"name\":\"pt_x\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"pt_x: int\",\"compositions\":[]},{\"name\":\"event\",\"type_\":\"Tuple[str,str,str,str]\",\"default_\":\"\",\"description\":\"event: Tuple[str, str, str, str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_tiles_event(pt_y: int, pt_x: int, event: Tuple[str, str, str, str])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_address_tiles", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_address_tiles", "target": "{\"name\":\"get_address_tiles\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_address_tiles(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_collision_maze", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_collision_maze", "target": "{\"name\":\"get_collision_maze\",\"args\":[],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"get_collision_maze(): list\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_nearby_tiles", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_nearby_tiles", "target": "{\"name\":\"get_nearby_tiles\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"vision_r\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"vision_r: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[tuple[int,int]]\",\"description\":\"list[tuple[int, int]]\",\"compositions\":[\"tuple\"]},\"description\":\"get_nearby_tiles(tile: tuple[int, int], vision_r: int): list[tuple[int, int]]\",\"aggregations\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_tile_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:get_tile_path", "target": "{\"name\":\"get_tile_path\",\"args\":[{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]},{\"name\":\"level\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"level: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_tile_path(tile: tuple[int, int], level: str): str\",\"aggregations\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:remove_event_from_tile", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:remove_event_from_tile", "target": "{\"name\":\"remove_event_from_tile\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"remove_event_from_tile(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:remove_subject_events_from_tile", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:remove_subject_events_from_tile", "target": "{\"name\":\"remove_subject_events_from_tile\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"remove_subject_events_from_tile(subject: str, tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:turn_coordinate_to_tile", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:turn_coordinate_to_tile", "target": "{\"name\":\"turn_coordinate_to_tile\",\"args\":[{\"name\":\"px_coordinate\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"px_coordinate: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"tuple[int,int]\",\"description\":\"tuple[int, int]\",\"compositions\":[\"tuple\"]},\"description\":\"turn_coordinate_to_tile(px_coordinate: tuple[int, int]): tuple[int, int]\",\"aggregations\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:turn_event_from_tile_idle", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:turn_event_from_tile_idle", "target": "{\"name\":\"turn_event_from_tile_idle\",\"args\":[{\"name\":\"curr_event\",\"type_\":\"tuple[str]\",\"default_\":\"\",\"description\":\"curr_event: tuple[str]\",\"compositions\":[\"tuple\"]},{\"name\":\"tile\",\"type_\":\"tuple[int,int]\",\"default_\":\"\",\"description\":\"tile: tuple[int, int]\",\"compositions\":[\"tuple\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"turn_event_from_tile_idle(curr_event: tuple[str], tile: tuple[int, int]): None\",\"aggregations\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "{\"name\":\"Strategy\",\"package\":\"metagpt/strategy/tot_schema.py:Strategy\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "metagpt/strategy/tot_schema.py:Strategy:name"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "metagpt/strategy/tot.py:TreeofThought:strategy"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "{\"lineno\":17,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Strategy\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "{\"name\":\"Strategy\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:Strategy:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:Strategy:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/mincraft_env/process_monitor.py", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "{\"name\":\"SubprocessMonitor\",\"package\":\"metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor\",\"attributes\":{\"callback\":{\"name\":\"callback\",\"type_\":\"Optional[callable]\",\"default_\":\"\",\"description\":\"callback : Optional[callable]\",\"compositions\":[\"callable\"]},\"callback_match\":{\"name\":\"callback_match\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"callback_match : str\",\"compositions\":[]},\"commands\":{\"name\":\"commands\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"commands : List[str]\",\"compositions\":[]},\"finished_callback\":{\"name\":\"finished_callback\",\"type_\":\"Optional[callable]\",\"default_\":\"\",\"description\":\"finished_callback : Optional[callable]\",\"compositions\":[\"callable\"]},\"is_running\":{\"name\":\"is_running\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_running\",\"compositions\":[]},\"logger\":{\"name\":\"logger\",\"type_\":\"Logger\",\"default_\":\"\",\"description\":\"logger : Logger\",\"compositions\":[\"Logger\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"process\":{\"name\":\"process\",\"type_\":\"NoneType,Popen\",\"default_\":\"\",\"description\":\"process : NoneType, Popen\",\"compositions\":[\"Popen\"]},\"ready_event\":{\"name\":\"ready_event\",\"type_\":\"Event,NoneType\",\"default_\":\"\",\"description\":\"ready_event : Event, NoneType\",\"compositions\":[\"Event\"]},\"ready_line\":{\"name\":\"ready_line\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ready_line : NoneType\",\"compositions\":[]},\"ready_match\":{\"name\":\"ready_match\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ready_match : str\",\"compositions\":[]},\"thread\":{\"name\":\"thread\",\"type_\":\"NoneType,Thread\",\"default_\":\"\",\"description\":\"thread : NoneType, Thread\",\"compositions\":[\"Thread\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"stop\":{\"name\":\"stop\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"stop()\",\"aggregations\":[]}},\"compositions\":[\"callable\",\"Logger\",\"Popen\",\"Event\",\"Thread\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:callback"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:callback_match"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:commands"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:finished_callback"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:is_running"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:logger"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:name"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:process"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_event"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_line"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_match"}, {"predicate": "has_class_property", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:thread"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:run"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:stop"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "?:callable"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "?:Logger"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "?:Popen"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "?:Event"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "?:Thread"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv"}, {"predicate": "isCompositeOn", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:mineflayer"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:__init__"}, {"predicate": "has_class_method", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:_start"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "{\"lineno\":16,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SubprocessMonitor\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor", "target": "{\"name\":\"SubprocessMonitor\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"callback\",\"visibility\":\"+\",\"value_type\":\"Optional[callable]\",\"default_value\":\"\"},{\"name\":\"callback_match\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"commands\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"finished_callback\",\"visibility\":\"+\",\"value_type\":\"Optional[callable]\",\"default_value\":\"\"},{\"name\":\"is_running\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"logger\",\"visibility\":\"+\",\"value_type\":\"Logger\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"process\",\"visibility\":\"+\",\"value_type\":\"NoneType,Popen\",\"default_value\":\"\"},{\"name\":\"ready_event\",\"visibility\":\"+\",\"value_type\":\"Event,NoneType\",\"default_value\":\"\"},{\"name\":\"ready_line\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"ready_match\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"thread\",\"visibility\":\"+\",\"value_type\":\"NoneType,Thread\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:callback", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:callback", "target": "{\"name\":\"callback\",\"type_\":\"Optional[callable]\",\"default_\":\"\",\"description\":\"callback : Optional[callable]\",\"compositions\":[\"callable\"]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:callback_match", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:callback_match", "target": "{\"name\":\"callback_match\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"callback_match : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:commands", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:commands", "target": "{\"name\":\"commands\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"commands : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:finished_callback", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:finished_callback", "target": "{\"name\":\"finished_callback\",\"type_\":\"Optional[callable]\",\"default_\":\"\",\"description\":\"finished_callback : Optional[callable]\",\"compositions\":[\"callable\"]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:is_running", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:is_running", "target": "{\"name\":\"is_running\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_running\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:is_running", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:logger", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:logger", "target": "{\"name\":\"logger\",\"type_\":\"Logger\",\"default_\":\"\",\"description\":\"logger : Logger\",\"compositions\":[\"Logger\"]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:process", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:process", "target": "{\"name\":\"process\",\"type_\":\"NoneType,Popen\",\"default_\":\"\",\"description\":\"process : NoneType, Popen\",\"compositions\":[\"Popen\"]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_event", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_event", "target": "{\"name\":\"ready_event\",\"type_\":\"Event,NoneType\",\"default_\":\"\",\"description\":\"ready_event : Event, NoneType\",\"compositions\":[\"Event\"]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_line", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_line", "target": "{\"name\":\"ready_line\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ready_line : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_match", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:ready_match", "target": "{\"name\":\"ready_match\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ready_match : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:thread", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:thread", "target": "{\"name\":\"thread\",\"type_\":\"NoneType,Thread\",\"default_\":\"\",\"description\":\"thread : NoneType, Thread\",\"compositions\":[\"Thread\"]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:stop", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:stop", "target": "{\"name\":\"stop\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"stop()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/subscription.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/subscription.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/subscription.py", "target": "metagpt/subscription.py:SubscriptionRunner"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "{\"name\":\"SubscriptionRunner\",\"package\":\"metagpt/subscription.py:SubscriptionRunner\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"tasks\":{\"name\":\"tasks\",\"type_\":\"dict[Role,asyncio.Task]\",\"default_\":\"\",\"description\":\"tasks : dict[Role, asyncio.Task]\",\"compositions\":[\"Role\",\"asyncio.Task\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"raise_exception\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"raise_exception: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(raise_exception: bool)\",\"aggregations\":[]},\"subscribe\":{\"name\":\"subscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]},{\"name\":\"trigger\",\"type_\":\"AsyncGenerator[Message,None]\",\"default_\":\"\",\"description\":\"trigger: AsyncGenerator[Message, None]\",\"compositions\":[\"AsyncGenerator\",\"Message\"]},{\"name\":\"callback\",\"type_\":\"Callable[[Message],Awaitable[None]]\",\"default_\":\"\",\"description\":\"callback: Callable[[Message], Awaitable[None]]\",\"compositions\":[\"Awaitable\",\"Callable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"subscribe(role: Role, trigger: AsyncGenerator[Message, None], callback: Callable[[Message], Awaitable[None]])\",\"aggregations\":[\"Role\",\"Message\",\"Awaitable\",\"Callable\",\"AsyncGenerator\"]},\"unsubscribe\":{\"name\":\"unsubscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"unsubscribe(role: Role)\",\"aggregations\":[\"Role\"]}},\"compositions\":[\"Role\",\"asyncio.Task\"],\"aggregations\":[\"Message\",\"Awaitable\",\"Callable\",\"AsyncGenerator\"]}"}, {"predicate": "has_class_property", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:model_config"}, {"predicate": "has_class_property", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:tasks"}, {"predicate": "has_class_method", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:run"}, {"predicate": "has_class_method", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:subscribe"}, {"predicate": "has_class_method", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:unsubscribe"}, {"predicate": "isCompositeOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:asyncio.Task"}, {"predicate": "isAggregateOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:Message"}, {"predicate": "isAggregateOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:Awaitable"}, {"predicate": "isAggregateOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:Callable"}, {"predicate": "isAggregateOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:AsyncGenerator"}, {"predicate": "is_composite_of", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "{\"lineno\":11,\"end_lineno\":100,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SubscriptionRunner\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "{\"name\":\"SubscriptionRunner\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"tasks\",\"visibility\":\"+\",\"value_type\":\"dict[Role,asyncio.Task]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:Role"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:tasks", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:tasks", "target": "{\"name\":\"tasks\",\"type_\":\"dict[Role,asyncio.Task]\",\"default_\":\"\",\"description\":\"tasks : dict[Role, asyncio.Task]\",\"compositions\":[\"Role\",\"asyncio.Task\"]}"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"raise_exception\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"raise_exception: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(raise_exception: bool)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:subscribe", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:subscribe", "target": "{\"name\":\"subscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]},{\"name\":\"trigger\",\"type_\":\"AsyncGenerator[Message,None]\",\"default_\":\"\",\"description\":\"trigger: AsyncGenerator[Message, None]\",\"compositions\":[\"AsyncGenerator\",\"Message\"]},{\"name\":\"callback\",\"type_\":\"Callable[[Message],Awaitable[None]]\",\"default_\":\"\",\"description\":\"callback: Callable[[Message], Awaitable[None]]\",\"compositions\":[\"Awaitable\",\"Callable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"subscribe(role: Role, trigger: AsyncGenerator[Message, None], callback: Callable[[Message], Awaitable[None]])\",\"aggregations\":[\"Role\",\"Message\",\"Awaitable\",\"Callable\",\"AsyncGenerator\"]}"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:unsubscribe", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:unsubscribe", "target": "{\"name\":\"unsubscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"unsubscribe(role: Role)\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/summarize_code.py", "target": "metagpt/actions/summarize_code.py:SummarizeCode"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "{\"name\":\"SummarizeCode\",\"package\":\"metagpt/actions/summarize_code.py:SummarizeCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"summarize_code\":{\"name\":\"summarize_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_code(prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/summarize_code.py:SummarizeCode:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/summarize_code.py:SummarizeCode:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/summarize_code.py:SummarizeCode:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/summarize_code.py:SummarizeCode:summarize_code"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "{\"lineno\":90,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SummarizeCode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "{\"name\":\"SummarizeCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode:summarize_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode:summarize_code", "target": "{\"name\":\"summarize_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_code(prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:SystemMessage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SystemMessage", "target": "{\"name\":\"SystemMessage\",\"package\":\"metagpt/schema.py:SystemMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:SystemMessage", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:SystemMessage", "target": "metagpt/schema.py:SystemMessage:__init__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:SystemMessage", "target": "{\"lineno\":315,\"end_lineno\":321,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SystemMessage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:SystemMessage", "target": "{\"name\":\"SystemMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:TOTSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:TOTSolver", "target": "{\"name\":\"TOTSolver\",\"package\":\"metagpt/strategy/solver.py:TOTSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/solver.py:TOTSolver", "target": "metagpt/strategy/solver.py:TOTSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/solver.py:TOTSolver", "target": "metagpt/strategy/solver.py:BaseSolver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:TOTSolver", "target": "{\"lineno\":45,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TOTSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/solver.py:TOTSolver", "target": "{\"name\":\"TOTSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:TOTSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/solver.py:TOTSolver:solve", "target": "{\"name\":\"solve\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/talk_action.py", "target": "metagpt/actions/talk_action.py:TalkAction"}, {"predicate": "has_class", "source": "metagpt/actions/talk_action.py", "target": "metagpt/actions/talk_action.py:TalkActionPrompt"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "{\"name\":\"TalkAction\",\"package\":\"metagpt/actions/talk_action.py:TalkAction\",\"attributes\":{\"aask_args\":{\"name\":\"aask_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"aask_args\",\"compositions\":[]},\"agent_description\":{\"name\":\"agent_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"agent_description\",\"compositions\":[]},\"history_summary\":{\"name\":\"history_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history_summary : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"i_context : str\",\"compositions\":[]},\"knowledge\":{\"name\":\"knowledge\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"knowledge : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"\",\"default_\":\"\",\"description\":\"language\",\"compositions\":[]},\"prompt\":{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},\"prompt_gpt4\":{\"name\":\"prompt_gpt4\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_gpt4\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:aask_args"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:agent_description"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:history_summary"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:knowledge"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:language"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:prompt"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:rsp"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "{\"lineno\":17,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TalkAction\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "{\"name\":\"TalkAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aask_args\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"agent_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"history_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"knowledge\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_gpt4\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:aask_args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:aask_args", "target": "{\"name\":\"aask_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"aask_args\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:aask_args", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:agent_description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:agent_description", "target": "{\"name\":\"agent_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"agent_description\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:agent_description", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:history_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:history_summary", "target": "{\"name\":\"history_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history_summary : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"i_context : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:knowledge", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:knowledge", "target": "{\"name\":\"knowledge\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"knowledge : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:language", "target": "{\"name\":\"language\",\"type_\":\"\",\"default_\":\"\",\"description\":\"language\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:language", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:prompt", "target": "{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:prompt", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4", "target": "{\"name\":\"prompt_gpt4\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_gpt4\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:rsp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:rsp", "target": "{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "{\"name\":\"TalkActionPrompt\",\"package\":\"metagpt/actions/talk_action.py:TalkActionPrompt\",\"attributes\":{\"FORMATION\":{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]},\"FORMATION_LOOSE\":{\"name\":\"FORMATION_LOOSE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION_LOOSE : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION_LOOSE"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "{\"lineno\":100,\"end_lineno\":169,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TalkActionPrompt\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "{\"name\":\"TalkActionPrompt\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"FORMATION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FORMATION_LOOSE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION", "target": "{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION_LOOSE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION_LOOSE", "target": "{\"name\":\"FORMATION_LOOSE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION_LOOSE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "{\"name\":\"TargetMeanEncoder\",\"package\":\"metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder\",\"attributes\":{\"col\":{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]},\"encoder_dict\":{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]},\"label\":{\"name\":\"label\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label : str\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:col"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:encoder_dict"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:label"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "{\"lineno\":96,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TargetMeanEncoder\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder", "target": "{\"name\":\"TargetMeanEncoder\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"encoder_dict\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"label\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:col", "target": "{\"name\":\"col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:encoder_dict", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:encoder_dict", "target": "{\"name\":\"encoder_dict\",\"type_\":\"\",\"default_\":\"\",\"description\":\"encoder_dict : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:label", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:label", "target": "{\"name\":\"label\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task", "target": "{\"name\":\"Task\",\"package\":\"metagpt/schema.py:Task\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]},\"dependent_task_ids\":{\"name\":\"dependent_task_ids\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"dependent_task_ids : list[str]\",\"compositions\":[]},\"instruction\":{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]},\"is_finished\":{\"name\":\"is_finished\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_finished : bool\",\"compositions\":[]},\"is_success\":{\"name\":\"is_success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_success : bool\",\"compositions\":[]},\"result\":{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]},\"task_id\":{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id : str\",\"compositions\":[]},\"task_type\":{\"name\":\"task_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_type : str\",\"compositions\":[]}},\"methods\":{\"reset\":{\"name\":\"reset\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset()\",\"aggregations\":[]},\"update_task_result\":{\"name\":\"update_task_result\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_task_result(task_result: TaskResult)\",\"aggregations\":[\"TaskResult\"]}},\"compositions\":[],\"aggregations\":[\"TaskResult\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:code"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:dependent_task_ids"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:instruction"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:is_finished"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:is_success"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:result"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:task_id"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:task_type"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:reset"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Task", "target": "metagpt/schema.py:Task:update_task_result"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:Task", "target": "?:TaskResult"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:Task", "target": "{\"lineno\":333,\"end_lineno\":352,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Task\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:Task", "target": "{\"name\":\"Task\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"dependent_task_ids\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"instruction\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_finished\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_success\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:code", "target": "{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:dependent_task_ids", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:dependent_task_ids", "target": "{\"name\":\"dependent_task_ids\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"dependent_task_ids : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:instruction", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:instruction", "target": "{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:is_finished", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:is_finished", "target": "{\"name\":\"is_finished\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_finished : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:is_success", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:is_success", "target": "{\"name\":\"is_success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_success : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:result", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:result", "target": "{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:task_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:task_id", "target": "{\"name\":\"task_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:task_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:task_type", "target": "{\"name\":\"task_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:reset", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:reset", "target": "{\"name\":\"reset\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"reset()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Task:update_task_result", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Task:update_task_result", "target": "{\"name\":\"update_task_result\",\"args\":[{\"name\":\"task_result\",\"type_\":\"TaskResult\",\"default_\":\"\",\"description\":\"task_result: TaskResult\",\"compositions\":[\"TaskResult\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_task_result(task_result: TaskResult)\",\"aggregations\":[\"TaskResult\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:TaskResult", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TaskResult", "target": "{\"name\":\"TaskResult\",\"package\":\"metagpt/schema.py:TaskResult\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]},\"is_success\":{\"name\":\"is_success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_success : bool\",\"compositions\":[]},\"result\":{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:TaskResult", "target": "metagpt/schema.py:TaskResult:code"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:TaskResult", "target": "metagpt/schema.py:TaskResult:is_success"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:TaskResult", "target": "metagpt/schema.py:TaskResult:result"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:TaskResult", "target": "{\"lineno\":355,\"end_lineno\":360,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TaskResult\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:TaskResult", "target": "{\"name\":\"TaskResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_success\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TaskResult:code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TaskResult:code", "target": "{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TaskResult:is_success", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TaskResult:is_success", "target": "{\"name\":\"is_success\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_success : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TaskResult:result", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TaskResult:result", "target": "{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/teacher.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/teacher.py", "target": "metagpt/roles/teacher.py:Teacher"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher", "target": "{\"name\":\"Teacher\",\"package\":\"metagpt/roles/teacher.py:Teacher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"course_title\":{\"name\":\"course_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"course_title\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"new_file_name\":{\"name\":\"new_file_name\",\"args\":[{\"name\":\"lesson_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lesson_title\",\"compositions\":[]},{\"name\":\"ext\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ext\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_file_name(lesson_title, ext)\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(content)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:constraints"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:course_title"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:desc"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:profile"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:new_file_name"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:save"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:_react"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:Teacher", "target": "{\"lineno\":22,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Teacher\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/teacher.py:Teacher", "target": "{\"name\":\"Teacher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"course_title\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:course_title", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:course_title", "target": "{\"name\":\"course_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"course_title\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:course_title", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:new_file_name", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:new_file_name", "target": "{\"name\":\"new_file_name\",\"args\":[{\"name\":\"lesson_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lesson_title\",\"compositions\":[]},{\"name\":\"ext\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ext\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_file_name(lesson_title, ext)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:save", "target": "{\"name\":\"save\",\"args\":[{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(content)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_teaching_plan.py", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock"}, {"predicate": "has_class", "source": "metagpt/actions/write_teaching_plan.py", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "{\"name\":\"TeachingPlanBlock\",\"package\":\"metagpt/actions/write_teaching_plan.py:TeachingPlanBlock\",\"attributes\":{\"COURSE_TITLE\":{\"name\":\"COURSE_TITLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"COURSE_TITLE : str\",\"compositions\":[]},\"DATA_BEGIN_TAG\":{\"name\":\"DATA_BEGIN_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_BEGIN_TAG : str\",\"compositions\":[]},\"DATA_END_TAG\":{\"name\":\"DATA_END_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_END_TAG : str\",\"compositions\":[]},\"FORMATION\":{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]},\"PROMPT_TEMPLATE\":{\"name\":\"PROMPT_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TEMPLATE : str\",\"compositions\":[]},\"PROMPT_TITLE_TEMPLATE\":{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TITLE_TEMPLATE : str\",\"compositions\":[]},\"TOPICS\":{\"name\":\"TOPICS\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"TOPICS : list\",\"compositions\":[]},\"TOPIC_STATEMENTS\":{\"name\":\"TOPIC_STATEMENTS\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"TOPIC_STATEMENTS : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:COURSE_TITLE"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_BEGIN_TAG"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_END_TAG"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:FORMATION"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TEMPLATE"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TITLE_TEMPLATE"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPICS"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPIC_STATEMENTS"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "{\"lineno\":92,\"end_lineno\":191,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TeachingPlanBlock\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "{\"name\":\"TeachingPlanBlock\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"COURSE_TITLE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"DATA_BEGIN_TAG\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"DATA_END_TAG\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FORMATION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"PROMPT_TEMPLATE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"TOPICS\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"TOPIC_STATEMENTS\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:COURSE_TITLE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:COURSE_TITLE", "target": "{\"name\":\"COURSE_TITLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"COURSE_TITLE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_BEGIN_TAG", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_BEGIN_TAG", "target": "{\"name\":\"DATA_BEGIN_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_BEGIN_TAG : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_END_TAG", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_END_TAG", "target": "{\"name\":\"DATA_END_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_END_TAG : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:FORMATION", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:FORMATION", "target": "{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TEMPLATE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TEMPLATE", "target": "{\"name\":\"PROMPT_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TEMPLATE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TITLE_TEMPLATE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TITLE_TEMPLATE", "target": "{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TITLE_TEMPLATE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPICS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPICS", "target": "{\"name\":\"TOPICS\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"TOPICS : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPIC_STATEMENTS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPIC_STATEMENTS", "target": "{\"name\":\"TOPIC_STATEMENTS\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"TOPIC_STATEMENTS : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/team.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/team.py", "target": "metagpt/team.py:Team"}, {"predicate": "is", "source": "metagpt/team.py:Team", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team", "target": "{\"name\":\"Team\",\"package\":\"metagpt/team.py:Team\",\"attributes\":{\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"env\":{\"name\":\"env\",\"type_\":\"Optional[Environment]\",\"default_\":\"\",\"description\":\"env : Optional[Environment]\",\"compositions\":[\"Environment\"]},\"idea\":{\"name\":\"idea\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"idea : str\",\"compositions\":[]},\"investment\":{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment : float\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"deserialize\":{\"name\":\"deserialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"'Team'\",\"description\":\"'Team'\",\"compositions\":[\"Team\"]},\"description\":\"deserialize(stg_path: Path, context: Context): 'Team'\",\"aggregations\":[\"Team\",\"Context\",\"Path\"]},\"hire\":{\"name\":\"hire\",\"args\":[{\"name\":\"roles\",\"type_\":\"list[Role]\",\"default_\":\"\",\"description\":\"roles: list[Role]\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"hire(roles: list[Role])\",\"aggregations\":[\"Role\"]},\"invest\":{\"name\":\"invest\",\"args\":[{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment: float\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"invest(investment: float)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"n_round\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_round\",\"compositions\":[]},{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"\",\"default_\":\"\",\"description\":\"send_to\",\"compositions\":[]},{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(n_round, idea, send_to, auto_archive)\",\"aggregations\":[]},\"run_project\":{\"name\":\"run_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_project(idea, send_to: str)\",\"aggregations\":[]},\"serialize\":{\"name\":\"serialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"serialize(stg_path: Path)\",\"aggregations\":[\"Path\"]},\"start_project\":{\"name\":\"start_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"start_project(idea, send_to: str)\",\"aggregations\":[]}},\"compositions\":[\"Environment\"],\"aggregations\":[\"Team\",\"Context\",\"Path\",\"Role\"]}"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:env"}, {"predicate": "has_class_property", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:idea"}, {"predicate": "has_class_property", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:investment"}, {"predicate": "has_class_property", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:model_config"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:deserialize"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:hire"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:invest"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:run"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:run_project"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:serialize"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:start_project"}, {"predicate": "isAggregateOf", "source": "metagpt/team.py:Team", "target": "?:Team"}, {"predicate": "isAggregateOf", "source": "metagpt/team.py:Team", "target": "?:Context"}, {"predicate": "isAggregateOf", "source": "metagpt/team.py:Team", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/team.py:Team", "target": "?:Role"}, {"predicate": "is_composite_of", "source": "metagpt/team.py:Team", "target": "metagpt/environment/base_env.py:Environment"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:__init__"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:_check_balance"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:_save"}, {"predicate": "has_page_info", "source": "metagpt/team.py:Team", "target": "{\"lineno\":32,\"end_lineno\":136,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Team\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/team.py:Team", "target": "{\"name\":\"Team\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"env\",\"visibility\":\"+\",\"value_type\":\"Optional[Environment]\",\"default_value\":\"\"},{\"name\":\"idea\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"investment\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/team.py:Team", "target": "?:Environment"}, {"predicate": "is", "source": "metagpt/team.py:Team:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:cost_manager", "target": "class_method"}, {"predicate": "is", "source": "metagpt/team.py:Team:env", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:env", "target": "{\"name\":\"env\",\"type_\":\"Optional[Environment]\",\"default_\":\"\",\"description\":\"env : Optional[Environment]\",\"compositions\":[\"Environment\"]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:idea", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:idea", "target": "{\"name\":\"idea\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"idea : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:investment", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:investment", "target": "{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:deserialize", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:deserialize", "target": "{\"name\":\"deserialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"'Team'\",\"description\":\"'Team'\",\"compositions\":[\"Team\"]},\"description\":\"deserialize(stg_path: Path, context: Context): 'Team'\",\"aggregations\":[\"Team\",\"Context\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:hire", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:hire", "target": "{\"name\":\"hire\",\"args\":[{\"name\":\"roles\",\"type_\":\"list[Role]\",\"default_\":\"\",\"description\":\"roles: list[Role]\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"hire(roles: list[Role])\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:invest", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:invest", "target": "{\"name\":\"invest\",\"args\":[{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment: float\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"invest(investment: float)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"n_round\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_round\",\"compositions\":[]},{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"\",\"default_\":\"\",\"description\":\"send_to\",\"compositions\":[]},{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(n_round, idea, send_to, auto_archive)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:run_project", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:run_project", "target": "{\"name\":\"run_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_project(idea, send_to: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:serialize", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:serialize", "target": "{\"name\":\"serialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"serialize(stg_path: Path)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:start_project", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:start_project", "target": "{\"name\":\"start_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"start_project(idea, send_to: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TestingContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TestingContext", "target": "{\"name\":\"TestingContext\",\"package\":\"metagpt/schema.py:TestingContext\",\"attributes\":{\"code_doc\":{\"name\":\"code_doc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_doc\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"test_doc\":{\"name\":\"test_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"test_doc : Optional[Document]\",\"compositions\":[\"Document\"]}},\"methods\":{},\"compositions\":[\"Document\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:TestingContext", "target": "metagpt/schema.py:TestingContext:code_doc"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:TestingContext", "target": "metagpt/schema.py:TestingContext:filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:TestingContext", "target": "metagpt/schema.py:TestingContext:test_doc"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:TestingContext", "target": "?:Document"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:TestingContext", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:TestingContext", "target": "{\"lineno\":619,\"end_lineno\":622,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TestingContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:TestingContext", "target": "{\"name\":\"TestingContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code_doc\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"test_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TestingContext:code_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TestingContext:code_doc", "target": "{\"name\":\"code_doc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_doc\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TestingContext:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TestingContext:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TestingContext:test_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TestingContext:test_doc", "target": "{\"name\":\"test_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"test_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "{\"name\":\"ThoughtNode\",\"package\":\"metagpt/strategy/base.py:ThoughtNode\",\"attributes\":{\"id\":{\"name\":\"id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"id : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"valid_status\":{\"name\":\"valid_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"valid_status : bool\",\"compositions\":[]},\"value\":{\"name\":\"value\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"value : int\",\"compositions\":[]}},\"methods\":{\"update_valid_status\":{\"name\":\"update_valid_status\",\"args\":[{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_valid_status(status): None\",\"aggregations\":[]},\"update_value\":{\"name\":\"update_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_value(value): None\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:id"}, {"predicate": "has_class_property", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:name"}, {"predicate": "has_class_property", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:valid_status"}, {"predicate": "has_class_property", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:value"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:update_valid_status"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:update_value"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "{\"lineno\":34,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtNode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "{\"name\":\"ThoughtNode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"valid_status\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"value\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:id", "target": "{\"name\":\"id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"id : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:valid_status", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:valid_status", "target": "{\"name\":\"valid_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"valid_status : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:value", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:value", "target": "{\"name\":\"value\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"value : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:update_valid_status", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:update_valid_status", "target": "{\"name\":\"update_valid_status\",\"args\":[{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_valid_status(status): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:update_value", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:update_value", "target": "{\"name\":\"update_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_value(value): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "{\"name\":\"ThoughtSolverBase\",\"package\":\"metagpt/strategy/tot.py:ThoughtSolverBase\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"Optional[ThoughtTree]\",\"default_\":\"\",\"description\":\"thought_tree : Optional[ThoughtTree]\",\"compositions\":[\"ThoughtTree\"]}},\"methods\":{\"evaluate_node\":{\"name\":\"evaluate_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"parent_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parent_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"evaluate_node(node, parent_value): None\",\"aggregations\":[]},\"generate_thoughts\":{\"name\":\"generate_thoughts\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"generate_thoughts(current_state, current_node): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]},\"select_nodes\":{\"name\":\"select_nodes\",\"args\":[{\"name\":\"thought_nodes\",\"type_\":\"List[ThoughtNode]\",\"default_\":\"\",\"description\":\"thought_nodes: List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"select_nodes(thought_nodes: List[ThoughtNode]): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]},\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]},\"update_solution\":{\"name\":\"update_solution\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_solution()\",\"aggregations\":[]}},\"compositions\":[\"ThoughtTree\"],\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:config"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:llm"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:model_config"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:thought_tree"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:evaluate_node"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:generate_thoughts"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:select_nodes"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:solve"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:update_solution"}, {"predicate": "isAggregateOf", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "?:ThoughtNode"}, {"predicate": "is_composite_of", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/base.py:ThoughtTree"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:__init__"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "{\"lineno\":33,\"end_lineno\":123,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtSolverBase\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "{\"name\":\"ThoughtSolverBase\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"Optional[ThoughtTree]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "?:ThoughtTree"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:thought_tree", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:thought_tree", "target": "{\"name\":\"thought_tree\",\"type_\":\"Optional[ThoughtTree]\",\"default_\":\"\",\"description\":\"thought_tree : Optional[ThoughtTree]\",\"compositions\":[\"ThoughtTree\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:evaluate_node", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:evaluate_node", "target": "{\"name\":\"evaluate_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"parent_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parent_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"evaluate_node(node, parent_value): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:generate_thoughts", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:generate_thoughts", "target": "{\"name\":\"generate_thoughts\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"generate_thoughts(current_state, current_node): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:select_nodes", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:select_nodes", "target": "{\"name\":\"select_nodes\",\"args\":[{\"name\":\"thought_nodes\",\"type_\":\"List[ThoughtNode]\",\"default_\":\"\",\"description\":\"thought_nodes: List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"select_nodes(thought_nodes: List[ThoughtNode]): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:update_solution", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:update_solution", "target": "{\"name\":\"update_solution\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_solution()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "{\"name\":\"ThoughtSolverConfig\",\"package\":\"metagpt/strategy/tot_schema.py:ThoughtSolverConfig\",\"attributes\":{\"evaluator\":{\"name\":\"evaluator\",\"type_\":\"\",\"default_\":\"\",\"description\":\"evaluator\",\"compositions\":[]},\"max_steps\":{\"name\":\"max_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_steps : int\",\"compositions\":[]},\"method_select\":{\"name\":\"method_select\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method_select : str\",\"compositions\":[]},\"n_generate_sample\":{\"name\":\"n_generate_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_generate_sample : int\",\"compositions\":[]},\"n_select_sample\":{\"name\":\"n_select_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_select_sample : int\",\"compositions\":[]},\"n_solution_sample\":{\"name\":\"n_solution_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_solution_sample : int\",\"compositions\":[]},\"parser\":{\"name\":\"parser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parser\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:max_steps"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:method_select"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_generate_sample"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_select_sample"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_solution_sample"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:config"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot.py:TreeofThought:config"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "{\"lineno\":23,\"end_lineno\":30,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtSolverConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "{\"name\":\"ThoughtSolverConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"evaluator\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_steps\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"method_select\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_generate_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_select_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_solution_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"parser\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator", "target": "{\"name\":\"evaluator\",\"type_\":\"\",\"default_\":\"\",\"description\":\"evaluator\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:max_steps", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:max_steps", "target": "{\"name\":\"max_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_steps : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:method_select", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:method_select", "target": "{\"name\":\"method_select\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method_select : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_generate_sample", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_generate_sample", "target": "{\"name\":\"n_generate_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_generate_sample : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_select_sample", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_select_sample", "target": "{\"name\":\"n_select_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_select_sample : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_solution_sample", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_solution_sample", "target": "{\"name\":\"n_solution_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_solution_sample : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser", "target": "{\"name\":\"parser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parser\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "{\"name\":\"ThoughtTree\",\"package\":\"metagpt/strategy/base.py:ThoughtTree\",\"attributes\":{\"all_nodes\":{\"name\":\"all_nodes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_nodes\",\"compositions\":[]}},\"methods\":{\"parse_node_path\":{\"name\":\"parse_node_path\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_node_path(node): List[str]\",\"aggregations\":[]},\"show\":{\"name\":\"show\",\"args\":[],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"show(): None\",\"aggregations\":[]},\"update_node\":{\"name\":\"update_node\",\"args\":[{\"name\":\"thought\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"thought: List[dict]\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"ThoughtNode\",\"default_\":\"\",\"description\":\"current_node: ThoughtNode\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"update_node(thought: List[dict], current_node: ThoughtNode): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}},\"compositions\":[],\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/base.py:ThoughtTree:all_nodes"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/base.py:ThoughtTree:parse_node_path"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/base.py:ThoughtTree:show"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/base.py:ThoughtTree:update_node"}, {"predicate": "isAggregateOf", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "?:ThoughtNode"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/tot.py:BFSSolver"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/tot.py:BFSSolver:thought_tree"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/tot.py:DFSSolver"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/tot.py:DFSSolver:thought_tree"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "{\"lineno\":51,\"end_lineno\":109,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtTree\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "{\"name\":\"ThoughtTree\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"all_nodes\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:all_nodes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree:all_nodes", "target": "{\"name\":\"all_nodes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_nodes\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:all_nodes", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:parse_node_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree:parse_node_path", "target": "{\"name\":\"parse_node_path\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_node_path(node): List[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:show", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree:show", "target": "{\"name\":\"show\",\"args\":[],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"show(): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:update_node", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree:update_node", "target": "{\"name\":\"update_node\",\"args\":[{\"name\":\"thought\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"thought: List[dict]\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"ThoughtNode\",\"default_\":\"\",\"description\":\"current_node: ThoughtNode\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"update_node(thought: List[dict], current_node: ThoughtNode): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "{\"name\":\"TokenCostManager\",\"package\":\"metagpt/utils/cost_manager.py:TokenCostManager\",\"attributes\":{\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_completion_tokens\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_prompt_tokens\",\"compositions\":[]}},\"methods\":{\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/utils/cost_manager.py:TokenCostManager:total_completion_tokens"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/utils/cost_manager.py:TokenCostManager:total_prompt_tokens"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/utils/cost_manager.py:TokenCostManager:update_cost"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/provider/ollama_api.py:OllamaLLM:cost_manager"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/provider/open_llm_api.py:OpenLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/provider/open_llm_api.py:OpenLLM:cost_manager"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "{\"lineno\":87,\"end_lineno\":101,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TokenCostManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "{\"name\":\"TokenCostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:TokenCostManager:total_completion_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:TokenCostManager:total_completion_tokens", "target": "{\"name\":\"total_completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_completion_tokens\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:TokenCostManager:total_prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:TokenCostManager:total_prompt_tokens", "target": "{\"name\":\"total_prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_prompt_tokens\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:TokenCostManager:update_cost", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:TokenCostManager:update_cost", "target": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/tool_data_type.py", "target": "metagpt/tools/tool_data_type.py:Tool"}, {"predicate": "has_class", "source": "metagpt/tools/tool_data_type.py", "target": "metagpt/tools/tool_data_type.py:ToolSchema"}, {"predicate": "has_class", "source": "metagpt/tools/tool_data_type.py", "target": "metagpt/tools/tool_data_type.py:ToolTypeDef"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:Tool", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:Tool", "target": "{\"name\":\"Tool\",\"package\":\"metagpt/tools/tool_data_type.py:Tool\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]},\"schemas\":{\"name\":\"schemas\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schemas : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_data_type.py:Tool", "target": "metagpt/tools/tool_data_type.py:Tool:code"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_data_type.py:Tool", "target": "metagpt/tools/tool_data_type.py:Tool:name"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_data_type.py:Tool", "target": "metagpt/tools/tool_data_type.py:Tool:path"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_data_type.py:Tool", "target": "metagpt/tools/tool_data_type.py:Tool:schemas"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_data_type.py:Tool", "target": "{\"lineno\":14,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Tool\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/tool_data_type.py:Tool", "target": "{\"name\":\"Tool\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"schemas\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:Tool:code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:Tool:code", "target": "{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:Tool:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:Tool:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:Tool:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:Tool:path", "target": "{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:Tool:schemas", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:Tool:schemas", "target": "{\"name\":\"schemas\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schemas : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/tool_registry.py", "target": "metagpt/tools/tool_registry.py:ToolRegistry"}, {"predicate": "has_function", "source": "metagpt/tools/tool_registry.py", "target": "metagpt/tools/tool_registry.py:register_tool"}, {"predicate": "has_function", "source": "metagpt/tools/tool_registry.py", "target": "metagpt/tools/tool_registry.py:make_schema"}, {"predicate": "has_function", "source": "metagpt/tools/tool_registry.py", "target": "metagpt/tools/tool_registry.py:validate_tool_names"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "{\"name\":\"ToolRegistry\",\"package\":\"metagpt/tools/tool_registry.py:ToolRegistry\",\"attributes\":{\"tool_types\":{\"name\":\"tool_types\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tool_types : dict\",\"compositions\":[]},\"tools\":{\"name\":\"tools\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tools : dict\",\"compositions\":[]},\"tools_by_types\":{\"name\":\"tools_by_types\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tools_by_types : dict\",\"compositions\":[]}},\"methods\":{\"get_tool\":{\"name\":\"get_tool\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tool\",\"description\":\"Tool\",\"compositions\":[\"Tool\"]},\"description\":\"get_tool(key): Tool\",\"aggregations\":[\"Tool\"]},\"get_tool_type\":{\"name\":\"get_tool_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ToolType\",\"description\":\"ToolType\",\"compositions\":[\"ToolType\"]},\"description\":\"get_tool_type(key): ToolType\",\"aggregations\":[\"ToolType\"]},\"get_tool_types\":{\"name\":\"get_tool_types\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,ToolType]\",\"description\":\"dict[str, ToolType]\",\"compositions\":[\"ToolType\"]},\"description\":\"get_tool_types(): dict[str, ToolType]\",\"aggregations\":[\"ToolType\"]},\"get_tools_by_type\":{\"name\":\"get_tools_by_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Tool]\",\"description\":\"dict[str, Tool]\",\"compositions\":[\"Tool\"]},\"description\":\"get_tools_by_type(key): dict[str, Tool]\",\"aggregations\":[\"Tool\"]},\"has_tool\":{\"name\":\"has_tool\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tool\",\"description\":\"Tool\",\"compositions\":[\"Tool\"]},\"description\":\"has_tool(key: str): Tool\",\"aggregations\":[\"Tool\"]},\"has_tool_type\":{\"name\":\"has_tool_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"has_tool_type(key): bool\",\"aggregations\":[]},\"init_tool_types\":{\"name\":\"init_tool_types\",\"args\":[{\"name\":\"tool_types\",\"type_\":\"ToolType\",\"default_\":\"\",\"description\":\"tool_types: ToolType\",\"compositions\":[\"ToolType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_tool_types(tool_types: ToolType)\",\"aggregations\":[\"ToolType\"]},\"register_tool\":{\"name\":\"register_tool\",\"args\":[{\"name\":\"tool_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_name\",\"compositions\":[]},{\"name\":\"tool_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_path\",\"compositions\":[]},{\"name\":\"schema_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema_path\",\"compositions\":[]},{\"name\":\"tool_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_code\",\"compositions\":[]},{\"name\":\"tool_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_type\",\"compositions\":[]},{\"name\":\"tool_source_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_source_object\",\"compositions\":[]},{\"name\":\"include_functions\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_functions\",\"compositions\":[]},{\"name\":\"verbose\",\"type_\":\"\",\"default_\":\"\",\"description\":\"verbose\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register_tool(tool_name, tool_path, schema_path, tool_code, tool_type, tool_source_object, include_functions, verbose)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Tool\",\"ToolType\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:tool_types"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:tools"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:tools_by_types"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool_type"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool_types"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:get_tools_by_type"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:has_tool"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:has_tool_type"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:init_tool_types"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "metagpt/tools/tool_registry.py:ToolRegistry:register_tool"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "?:Tool"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "?:ToolType"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "{\"lineno\":25,\"end_lineno\":98,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolRegistry\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/tool_registry.py:ToolRegistry", "target": "{\"name\":\"ToolRegistry\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"tool_types\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"tools\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"tools_by_types\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:tool_types", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:tool_types", "target": "{\"name\":\"tool_types\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tool_types : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:tools", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:tools", "target": "{\"name\":\"tools\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tools : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:tools_by_types", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:tools_by_types", "target": "{\"name\":\"tools_by_types\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"tools_by_types : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool", "target": "{\"name\":\"get_tool\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tool\",\"description\":\"Tool\",\"compositions\":[\"Tool\"]},\"description\":\"get_tool(key): Tool\",\"aggregations\":[\"Tool\"]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool_type", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool_type", "target": "{\"name\":\"get_tool_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ToolType\",\"description\":\"ToolType\",\"compositions\":[\"ToolType\"]},\"description\":\"get_tool_type(key): ToolType\",\"aggregations\":[\"ToolType\"]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool_types", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:get_tool_types", "target": "{\"name\":\"get_tool_types\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,ToolType]\",\"description\":\"dict[str, ToolType]\",\"compositions\":[\"ToolType\"]},\"description\":\"get_tool_types(): dict[str, ToolType]\",\"aggregations\":[\"ToolType\"]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:get_tools_by_type", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:get_tools_by_type", "target": "{\"name\":\"get_tools_by_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Tool]\",\"description\":\"dict[str, Tool]\",\"compositions\":[\"Tool\"]},\"description\":\"get_tools_by_type(key): dict[str, Tool]\",\"aggregations\":[\"Tool\"]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:has_tool", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:has_tool", "target": "{\"name\":\"has_tool\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tool\",\"description\":\"Tool\",\"compositions\":[\"Tool\"]},\"description\":\"has_tool(key: str): Tool\",\"aggregations\":[\"Tool\"]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:has_tool_type", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:has_tool_type", "target": "{\"name\":\"has_tool_type\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"has_tool_type(key): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:init_tool_types", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:init_tool_types", "target": "{\"name\":\"init_tool_types\",\"args\":[{\"name\":\"tool_types\",\"type_\":\"ToolType\",\"default_\":\"\",\"description\":\"tool_types: ToolType\",\"compositions\":[\"ToolType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_tool_types(tool_types: ToolType)\",\"aggregations\":[\"ToolType\"]}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:ToolRegistry:register_tool", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_registry.py:ToolRegistry:register_tool", "target": "{\"name\":\"register_tool\",\"args\":[{\"name\":\"tool_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_name\",\"compositions\":[]},{\"name\":\"tool_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_path\",\"compositions\":[]},{\"name\":\"schema_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema_path\",\"compositions\":[]},{\"name\":\"tool_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_code\",\"compositions\":[]},{\"name\":\"tool_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_type\",\"compositions\":[]},{\"name\":\"tool_source_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool_source_object\",\"compositions\":[]},{\"name\":\"include_functions\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_functions\",\"compositions\":[]},{\"name\":\"verbose\",\"type_\":\"\",\"default_\":\"\",\"description\":\"verbose\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register_tool(tool_name, tool_path, schema_path, tool_code, tool_type, tool_source_object, include_functions, verbose)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:ToolSchema", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:ToolSchema", "target": "{\"name\":\"ToolSchema\",\"package\":\"metagpt/tools/tool_data_type.py:ToolSchema\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_data_type.py:ToolSchema", "target": "metagpt/tools/tool_data_type.py:ToolSchema:description"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_data_type.py:ToolSchema", "target": "{\"lineno\":10,\"end_lineno\":11,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolSchema\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/tool_data_type.py:ToolSchema", "target": "{\"name\":\"ToolSchema\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:ToolSchema:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:ToolSchema:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_type.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/tool_type.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/tool_type.py", "target": "metagpt/tools/tool_type.py:ToolType"}, {"predicate": "is", "source": "metagpt/tools/tool_type.py:ToolType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_type.py:ToolType", "target": "{\"name\":\"ToolType\",\"package\":\"metagpt/tools/tool_type.py:ToolType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"type_name\":{\"name\":\"type_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"type_name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_type.py:ToolType", "target": "metagpt/tools/tool_type.py:ToolType:name"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_type.py:ToolType", "target": "metagpt/tools/tool_type.py:ToolType:type_name"}, {"predicate": "has_class_method", "source": "metagpt/tools/tool_type.py:ToolType", "target": "metagpt/tools/tool_type.py:ToolType:__missing__"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_type.py:ToolType", "target": "{\"lineno\":13,\"end_lineno\":55,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/tool_type.py:ToolType", "target": "{\"name\":\"ToolType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"type_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_type.py:ToolType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_type.py:ToolType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_type.py:ToolType:type_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_type.py:ToolType:type_name", "target": "{\"name\":\"type_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"type_name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_type.py:ToolType:type_name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef", "target": "{\"name\":\"ToolTypeDef\",\"package\":\"metagpt/tools/tool_data_type.py:ToolTypeDef\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"usage_prompt\":{\"name\":\"usage_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"usage_prompt : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef", "target": "metagpt/tools/tool_data_type.py:ToolTypeDef:desc"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef", "target": "metagpt/tools/tool_data_type.py:ToolTypeDef:name"}, {"predicate": "has_class_property", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef", "target": "metagpt/tools/tool_data_type.py:ToolTypeDef:usage_prompt"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef", "target": "{\"lineno\":4,\"end_lineno\":7,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolTypeDef\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef", "target": "{\"name\":\"ToolTypeDef\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"usage_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef:usage_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/tool_data_type.py:ToolTypeDef:usage_prompt", "target": "{\"name\":\"usage_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"usage_prompt : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/translator.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/translator.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/translator.py", "target": "metagpt/tools/translator.py:Translator"}, {"predicate": "is", "source": "metagpt/tools/translator.py:Translator", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/translator.py:Translator", "target": "{\"name\":\"Translator\",\"package\":\"metagpt/tools/translator.py:Translator\",\"attributes\":{},\"methods\":{\"translate_prompt\":{\"name\":\"translate_prompt\",\"args\":[{\"name\":\"original\",\"type_\":\"\",\"default_\":\"\",\"description\":\"original\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"translate_prompt(original, lang)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/translator.py:Translator", "target": "metagpt/tools/translator.py:Translator:translate_prompt"}, {"predicate": "has_page_info", "source": "metagpt/tools/translator.py:Translator", "target": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Translator\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/translator.py:Translator", "target": "{\"name\":\"Translator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/translator.py:Translator:translate_prompt", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/translator.py:Translator:translate_prompt", "target": "{\"name\":\"translate_prompt\",\"args\":[{\"name\":\"original\",\"type_\":\"\",\"default_\":\"\",\"description\":\"original\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"translate_prompt(original, lang)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "{\"name\":\"TreeBasedSelection\",\"package\":\"metagpt/tools/libs/feature_engineering.py:TreeBasedSelection\",\"attributes\":{\"feats\":{\"name\":\"feats\",\"type_\":\"\",\"default_\":\"\",\"description\":\"feats : NoneType\",\"compositions\":[]},\"label_col\":{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]},\"task_type\":{\"name\":\"task_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_type : str\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:feats"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:label_col"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:task_type"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:transform"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "{\"lineno\":353,\"end_lineno\":403,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TreeBasedSelection\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection", "target": "{\"name\":\"TreeBasedSelection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"feats\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"label_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:feats", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:feats", "target": "{\"name\":\"feats\",\"type_\":\"\",\"default_\":\"\",\"description\":\"feats : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:label_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:label_col", "target": "{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:task_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:task_type", "target": "{\"name\":\"task_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "{\"name\":\"TreeofThought\",\"package\":\"metagpt/strategy/tot.py:TreeofThought\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"solver\":{\"name\":\"solver\",\"type_\":\"\",\"default_\":\"\",\"description\":\"solver\",\"compositions\":[]},\"strategy\":{\"name\":\"strategy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strategy\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:config"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:strategy"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:solve"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:__init__"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:_initialize_solver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "{\"lineno\":235,\"end_lineno\":277,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TreeofThought\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "{\"name\":\"TreeofThought\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"solver\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"strategy\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:solver", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:solver", "target": "{\"name\":\"solver\",\"type_\":\"\",\"default_\":\"\",\"description\":\"solver\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:strategy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:strategy", "target": "{\"name\":\"strategy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strategy\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/tutorial_assistant.py", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "{\"name\":\"TutorialAssistant\",\"package\":\"metagpt/roles/tutorial_assistant.py:TutorialAssistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"main_title\":{\"name\":\"main_title\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"main_title : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]},\"total_content\":{\"name\":\"total_content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"total_content : str\",\"compositions\":[]}},\"methods\":{\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:language"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:main_title"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:topic"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:total_content"}, {"predicate": "has_class_method", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:react"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_handle_directory"}, {"predicate": "has_class_method", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "{\"lineno\":20,\"end_lineno\":94,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TutorialAssistant\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "{\"name\":\"TutorialAssistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"main_title\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"total_content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:main_title", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:main_title", "target": "{\"name\":\"main_title\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"main_title : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:topic", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:topic", "target": "{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:total_content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:total_content", "target": "{\"name\":\"total_content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"total_content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:react", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:react", "target": "{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassAttribute", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassAttribute", "target": "{\"name\":\"UMLClassAttribute\",\"package\":\"metagpt/schema.py:UMLClassAttribute\",\"attributes\":{\"default_value\":{\"name\":\"default_value\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_value : str\",\"compositions\":[]},\"value_type\":{\"name\":\"value_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"value_type : str\",\"compositions\":[]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassAttribute", "target": "metagpt/schema.py:UMLClassAttribute:default_value"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassAttribute", "target": "metagpt/schema.py:UMLClassAttribute:value_type"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassAttribute", "target": "metagpt/schema.py:UMLClassAttribute:get_mermaid"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:UMLClassAttribute", "target": "metagpt/schema.py:UMLClassMeta"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UMLClassAttribute", "target": "{\"lineno\":709,\"end_lineno\":729,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassAttribute\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UMLClassAttribute", "target": "{\"name\":\"UMLClassAttribute\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"default_value\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"value_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassAttribute:default_value", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassAttribute:default_value", "target": "{\"name\":\"default_value\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_value : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassAttribute:value_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassAttribute:value_type", "target": "{\"name\":\"value_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"value_type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassAttribute:get_mermaid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassAttribute:get_mermaid", "target": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMeta", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMeta", "target": "{\"name\":\"UMLClassMeta\",\"package\":\"metagpt/schema.py:UMLClassMeta\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"visibility\":{\"name\":\"visibility\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"visibility : str\",\"compositions\":[]}},\"methods\":{\"name_to_visibility\":{\"name\":\"name_to_visibility\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"name_to_visibility(name: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassMeta", "target": "metagpt/schema.py:UMLClassMeta:name"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassMeta", "target": "metagpt/schema.py:UMLClassMeta:visibility"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassMeta", "target": "metagpt/schema.py:UMLClassMeta:name_to_visibility"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UMLClassMeta", "target": "{\"lineno\":694,\"end_lineno\":706,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassMeta\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UMLClassMeta", "target": "{\"name\":\"UMLClassMeta\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"visibility\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMeta:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMeta:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMeta:visibility", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMeta:visibility", "target": "{\"name\":\"visibility\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"visibility : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMeta:name_to_visibility", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMeta:name_to_visibility", "target": "{\"name\":\"name_to_visibility\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"name_to_visibility(name: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMethod", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMethod", "target": "{\"name\":\"UMLClassMethod\",\"package\":\"metagpt/schema.py:UMLClassMethod\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]},\"return_type\":{\"name\":\"return_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"return_type : str\",\"compositions\":[]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}},\"compositions\":[\"UMLClassAttribute\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassMethod:args"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassMethod:return_type"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassMethod:get_mermaid"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassMeta"}, {"predicate": "is_composite_of", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassAttribute"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UMLClassMethod", "target": "{\"lineno\":732,\"end_lineno\":746,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassMethod\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UMLClassMethod", "target": "{\"name\":\"UMLClassMethod\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassAttribute]\",\"default_value\":\"\"},{\"name\":\"return_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:UMLClassMethod", "target": "?:UMLClassAttribute"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMethod:args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMethod:args", "target": "{\"name\":\"args\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMethod:return_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMethod:return_type", "target": "{\"name\":\"return_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"return_type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMethod:get_mermaid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMethod:get_mermaid", "target": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView", "target": "{\"name\":\"UMLClassView\",\"package\":\"metagpt/schema.py:UMLClassView\",\"attributes\":{\"attributes\":{\"name\":\"attributes\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]},\"methods\":{\"name\":\"methods\",\"type_\":\"List[UMLClassMethod]\",\"default_\":\"\",\"description\":\"methods : List[UMLClassMethod]\",\"compositions\":[\"UMLClassMethod\"]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]},\"load_dot_class_info\":{\"name\":\"load_dot_class_info\",\"args\":[{\"name\":\"dot_class_info\",\"type_\":\"DotClassInfo\",\"default_\":\"\",\"description\":\"dot_class_info: DotClassInfo\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"UMLClassView\",\"description\":\"UMLClassView\",\"compositions\":[\"UMLClassView\"]},\"description\":\"load_dot_class_info(dot_class_info: DotClassInfo): UMLClassView\",\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}},\"compositions\":[\"UMLClassAttribute\",\"UMLClassMethod\"],\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassView:attributes"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassView:methods"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassView:get_mermaid"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassView:load_dot_class_info"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:UMLClassView", "target": "?:UMLClassView"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:UMLClassView", "target": "?:DotClassInfo"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassMeta"}, {"predicate": "is_composite_of", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassAttribute"}, {"predicate": "is_composite_of", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassMethod"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UMLClassView", "target": "{\"lineno\":749,\"end_lineno\":776,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassView\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UMLClassView", "target": "{\"name\":\"UMLClassView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"attributes\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassAttribute]\",\"default_value\":\"\"},{\"name\":\"methods\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassMethod]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:UMLClassView", "target": "?:UMLClassAttribute"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:UMLClassView", "target": "?:UMLClassMethod"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView:attributes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView:attributes", "target": "{\"name\":\"attributes\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView:methods", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView:methods", "target": "{\"name\":\"methods\",\"type_\":\"List[UMLClassMethod]\",\"default_\":\"\",\"description\":\"methods : List[UMLClassMethod]\",\"compositions\":[\"UMLClassMethod\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView:get_mermaid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView:get_mermaid", "target": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView:load_dot_class_info", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView:load_dot_class_info", "target": "{\"name\":\"load_dot_class_info\",\"args\":[{\"name\":\"dot_class_info\",\"type_\":\"DotClassInfo\",\"default_\":\"\",\"description\":\"dot_class_info: DotClassInfo\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"UMLClassView\",\"description\":\"UMLClassView\",\"compositions\":[\"UMLClassView\"]},\"description\":\"load_dot_class_info(dot_class_info: DotClassInfo): UMLClassView\",\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/ut_writer.py", "target": "metagpt/tools/ut_writer.py:UTGenerator"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "{\"name\":\"UTGenerator\",\"package\":\"metagpt/tools/ut_writer.py:UTGenerator\",\"attributes\":{\"chatgpt_method\":{\"name\":\"chatgpt_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chatgpt_method : str\",\"compositions\":[]},\"icl_sample\":{\"name\":\"icl_sample\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"icl_sample : str\",\"compositions\":[]},\"questions_path\":{\"name\":\"questions_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"questions_path : str\",\"compositions\":[]},\"swagger_file\":{\"name\":\"swagger_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"swagger_file : str\",\"compositions\":[]},\"template_prefix\":{\"name\":\"template_prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template_prefix : str\",\"compositions\":[]},\"ut_py_path\":{\"name\":\"ut_py_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ut_py_path : str\",\"compositions\":[]}},\"methods\":{\"ask_gpt_and_save\":{\"name\":\"ask_gpt_and_save\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tag: str\",\"compositions\":[]},{\"name\":\"fname\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"fname: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_gpt_and_save(question: str, tag: str, fname: str)\",\"aggregations\":[]},\"build_api_doc\":{\"name\":\"build_api_doc\",\"args\":[{\"name\":\"node\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"node: dict\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path: str\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_api_doc(node: dict, path: str, method: str): str\",\"aggregations\":[]},\"build_object_properties\":{\"name\":\"build_object_properties\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]},{\"name\":\"level\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"level: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_object_properties(node, prop_object_required, level: int): str\",\"aggregations\":[]},\"generate_ut\":{\"name\":\"generate_ut\",\"args\":[{\"name\":\"include_tags\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_tags\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"generate_ut(include_tags): bool\",\"aggregations\":[]},\"get_swagger_json\":{\"name\":\"get_swagger_json\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_swagger_json(): dict\",\"aggregations\":[]},\"get_tags_mapping\":{\"name\":\"get_tags_mapping\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_tags_mapping(): dict\",\"aggregations\":[]},\"gpt_msgs_to_code\":{\"name\":\"gpt_msgs_to_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"messages: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"gpt_msgs_to_code(messages: list): str\",\"aggregations\":[]},\"para_to_str\":{\"name\":\"para_to_str\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"prop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"para_to_str(name, prop, prop_object_required)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:chatgpt_method"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:icl_sample"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:questions_path"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:swagger_file"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:template_prefix"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:ut_py_path"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:ask_gpt_and_save"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:build_api_doc"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:build_object_properties"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:generate_ut"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:get_swagger_json"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:get_tags_mapping"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:gpt_msgs_to_code"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:para_to_str"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:__para_to_str"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:_para_to_str"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:_generate_ut"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "{\"lineno\":104,\"end_lineno\":287,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UTGenerator\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "{\"name\":\"UTGenerator\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"chatgpt_method\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"icl_sample\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"questions_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"swagger_file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"template_prefix\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ut_py_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:chatgpt_method", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:chatgpt_method", "target": "{\"name\":\"chatgpt_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chatgpt_method : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:icl_sample", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:icl_sample", "target": "{\"name\":\"icl_sample\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"icl_sample : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:questions_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:questions_path", "target": "{\"name\":\"questions_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"questions_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:swagger_file", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:swagger_file", "target": "{\"name\":\"swagger_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"swagger_file : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:template_prefix", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:template_prefix", "target": "{\"name\":\"template_prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template_prefix : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:ut_py_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:ut_py_path", "target": "{\"name\":\"ut_py_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ut_py_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:ask_gpt_and_save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:ask_gpt_and_save", "target": "{\"name\":\"ask_gpt_and_save\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tag: str\",\"compositions\":[]},{\"name\":\"fname\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"fname: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_gpt_and_save(question: str, tag: str, fname: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:build_api_doc", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:build_api_doc", "target": "{\"name\":\"build_api_doc\",\"args\":[{\"name\":\"node\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"node: dict\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path: str\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_api_doc(node: dict, path: str, method: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:build_object_properties", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:build_object_properties", "target": "{\"name\":\"build_object_properties\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]},{\"name\":\"level\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"level: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_object_properties(node, prop_object_required, level: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:generate_ut", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:generate_ut", "target": "{\"name\":\"generate_ut\",\"args\":[{\"name\":\"include_tags\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_tags\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"generate_ut(include_tags): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:get_swagger_json", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:get_swagger_json", "target": "{\"name\":\"get_swagger_json\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_swagger_json(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:get_tags_mapping", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:get_tags_mapping", "target": "{\"name\":\"get_tags_mapping\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_tags_mapping(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:gpt_msgs_to_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:gpt_msgs_to_code", "target": "{\"name\":\"gpt_msgs_to_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"messages: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"gpt_msgs_to_code(messages: list): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:para_to_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:para_to_str", "target": "{\"name\":\"para_to_str\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"prop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"para_to_str(name, prop, prop_object_required)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "{\"name\":\"Usage\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:Usage\",\"attributes\":{\"prompt_tokens\":{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens : int\",\"compositions\":[]},\"total_tokens\":{\"name\":\"total_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_tokens : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "metagpt/tools/openai_text_to_embedding.py:Usage:prompt_tokens"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "metagpt/tools/openai_text_to_embedding.py:Usage:total_tokens"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding"}, {"predicate": "isCompositeOn", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "{\"lineno\":29,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Usage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "{\"name\":\"Usage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Usage:prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Usage:prompt_tokens", "target": "{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Usage:total_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Usage:total_tokens", "target": "{\"name\":\"total_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UserMessage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UserMessage", "target": "{\"name\":\"UserMessage\",\"package\":\"metagpt/schema.py:UserMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:UserMessage", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UserMessage", "target": "metagpt/schema.py:UserMessage:__init__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UserMessage", "target": "{\"lineno\":306,\"end_lineno\":312,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UserMessage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UserMessage", "target": "{\"name\":\"UserMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/add_requirement.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/add_requirement.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/add_requirement.py", "target": "metagpt/actions/add_requirement.py:UserRequirement"}, {"predicate": "is", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "{\"name\":\"UserRequirement\",\"package\":\"metagpt/actions/add_requirement.py:UserRequirement\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "metagpt/actions/action.py:Action"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "metagpt/schema.py:Message"}, {"predicate": "isAggregateOn", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "metagpt/schema.py:Message:cause_by"}, {"predicate": "has_page_info", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "{\"lineno\":11,\"end_lineno\":12,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UserRequirement\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "{\"name\":\"UserRequirement\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "{\"name\":\"VarianceBasedSelection\",\"package\":\"metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection\",\"attributes\":{\"feats\":{\"name\":\"feats\",\"type_\":\"\",\"default_\":\"\",\"description\":\"feats : NoneType\",\"compositions\":[]},\"label_col\":{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]},\"selector\":{\"name\":\"selector\",\"type_\":\"VarianceThreshold\",\"default_\":\"\",\"description\":\"selector : VarianceThreshold\",\"compositions\":[\"VarianceThreshold\"]},\"threshold\":{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}},\"methods\":{\"fit\":{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]},\"transform\":{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}},\"compositions\":[\"VarianceThreshold\"],\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:feats"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:label_col"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:selector"}, {"predicate": "has_class_property", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:threshold"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:fit"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:transform"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "?:VarianceThreshold"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "?:pd.DataFrame"}, {"predicate": "isGeneralizeOf", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "metagpt/tools/libs/data_preprocess.py:MLProcess"}, {"predicate": "has_class_method", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "{\"lineno\":407,\"end_lineno\":435,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VarianceBasedSelection\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection", "target": "{\"name\":\"VarianceBasedSelection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"feats\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"label_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"selector\",\"visibility\":\"+\",\"value_type\":\"VarianceThreshold\",\"default_value\":\"\"},{\"name\":\"threshold\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:feats", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:feats", "target": "{\"name\":\"feats\",\"type_\":\"\",\"default_\":\"\",\"description\":\"feats : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:label_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:label_col", "target": "{\"name\":\"label_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"label_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:selector", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:selector", "target": "{\"name\":\"selector\",\"type_\":\"VarianceThreshold\",\"default_\":\"\",\"description\":\"selector : VarianceThreshold\",\"compositions\":[\"VarianceThreshold\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:threshold", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:threshold", "target": "{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:fit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:fit", "target": "{\"name\":\"fit\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fit(df: pd.DataFrame)\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:transform", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:transform", "target": "{\"name\":\"transform\",\"args\":[{\"name\":\"df\",\"type_\":\"pd.DataFrame\",\"default_\":\"\",\"description\":\"df: pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]}],\"return_args\":{\"type_\":\"pd.DataFrame\",\"description\":\"pd.DataFrame\",\"compositions\":[\"pd.DataFrame\"]},\"description\":\"transform(df: pd.DataFrame): pd.DataFrame\",\"aggregations\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/visual_graph_repo.py", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo"}, {"predicate": "has_class", "source": "metagpt/utils/visual_graph_repo.py", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo"}, {"predicate": "has_class", "source": "metagpt/utils/visual_graph_repo.py", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "{\"name\":\"VisualDiGraphRepo\",\"package\":\"metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo\",\"attributes\":{},\"methods\":{\"get_mermaid_class_view\":{\"name\":\"get_mermaid_class_view\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid_class_view(): str\",\"aggregations\":[]},\"get_mermaid_sequence_view_versions\":{\"name\":\"get_mermaid_sequence_view_versions\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_view_versions(): List[str, str]\",\"aggregations\":[]},\"get_mermaid_sequence_views\":{\"name\":\"get_mermaid_sequence_views\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_views(): List[str, str]\",\"aggregations\":[]},\"load_from\":{\"name\":\"load_from\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_from(filename: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_class_view"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_view_versions"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_views"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:load_from"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_get_class_view"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_refine_name"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "{\"lineno\":84,\"end_lineno\":187,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VisualDiGraphRepo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "{\"name\":\"VisualDiGraphRepo\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_class_view", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_class_view", "target": "{\"name\":\"get_mermaid_class_view\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid_class_view(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_view_versions", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_view_versions", "target": "{\"name\":\"get_mermaid_sequence_view_versions\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_view_versions(): List[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_views", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_views", "target": "{\"name\":\"get_mermaid_sequence_views\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_views(): List[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:load_from", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:load_from", "target": "{\"name\":\"load_from\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_from(filename: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "{\"name\":\"VisualGraphRepo\",\"package\":\"metagpt/utils/visual_graph_repo.py:VisualGraphRepo\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_db\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "{\"lineno\":70,\"end_lineno\":81,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VisualGraphRepo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "{\"name\":\"VisualGraphRepo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db", "target": "{\"name\":\"graph_db\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_db\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "{\"name\":\"WDMHttpProxyClient\",\"package\":\"metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient\",\"attributes\":{\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(url)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:proxy"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:get"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "{\"lineno\":99,\"end_lineno\":107,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WDMHttpProxyClient\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "{\"name\":\"WDMHttpProxyClient\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(url)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "{\"name\":\"WebBrowseAndSummarize\",\"package\":\"metagpt/actions/research.py:WebBrowseAndSummarize\",\"attributes\":{\"browse_func\":{\"name\":\"browse_func\",\"type_\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_\":\"\",\"description\":\"browse_func : Optional[Union[Callable[[list[str]], None], None]]\",\"compositions\":[\"Callable\"]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"web_browser_engine\":{\"name\":\"web_browser_engine\",\"type_\":\"Optional[WebBrowserEngine]\",\"default_\":\"\",\"description\":\"web_browser_engine : Optional[WebBrowserEngine]\",\"compositions\":[\"WebBrowserEngine\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(url: str): dict[str, str]\",\"aggregations\":[]},\"validate_engine_and_run_func\":{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}},\"compositions\":[\"Callable\",\"WebBrowserEngine\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:browse_func"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:validate_engine_and_run_func"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "?:Callable"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "{\"lineno\":180,\"end_lineno\":245,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowseAndSummarize\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "{\"name\":\"WebBrowseAndSummarize\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browse_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"web_browser_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[WebBrowserEngine]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "?:WebBrowserEngine"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:browse_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:browse_func", "target": "{\"name\":\"browse_func\",\"type_\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_\":\"\",\"description\":\"browse_func : Optional[Union[Callable[[list[str]], None], None]]\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine", "target": "{\"name\":\"web_browser_engine\",\"type_\":\"Optional[WebBrowserEngine]\",\"default_\":\"\",\"description\":\"web_browser_engine : Optional[WebBrowserEngine]\",\"compositions\":[\"WebBrowserEngine\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(url: str): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:validate_engine_and_run_func", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:validate_engine_and_run_func", "target": "{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/web_browser_engine.py", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "{\"name\":\"WebBrowserEngine\",\"package\":\"metagpt/tools/web_browser_engine.py:WebBrowserEngine\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]},\"run_func\":{\"name\":\"run_func\",\"type_\":\"Optional[Callable[...,Coroutine[Any,Any,Union[WebPage,list[WebPage]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[..., Coroutine[Any, Any, Union[WebPage, list[WebPage]]]]]\",\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\"]}},\"methods\":{\"from_browser_config\":{\"name\":\"from_browser_config\",\"args\":[{\"name\":\"config\",\"type_\":\"BrowserConfig\",\"default_\":\"\",\"description\":\"config: BrowserConfig\",\"compositions\":[\"BrowserConfig\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_browser_config(config: BrowserConfig)\",\"aggregations\":[\"BrowserConfig\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\",\"description\":\"WebPage\",\"compositions\":[\"WebPage\"]},\"description\":\"run(url: str): WebPage\",\"aggregations\":[\"WebPage\"]},\"validate_extra\":{\"name\":\"validate_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_extra()\",\"aggregations\":[]}},\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\"],\"aggregations\":[\"BrowserConfig\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:model_config"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:proxy"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run_func"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:from_browser_config"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:validate_extra"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:..."}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:Callable"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:Coroutine"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:BrowserConfig"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/actions/research.py:WebBrowseAndSummarize"}, {"predicate": "isCompositeOn", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine"}, {"predicate": "is_composite_of", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/utils/parse_html.py:WebPage"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:_process_extra"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "{\"lineno\":15,\"end_lineno\":115,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowserEngine\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "{\"name\":\"WebBrowserEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"run_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[...,Coroutine[Any,Any,Union[WebPage,list[WebPage]]]]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:WebPage"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine", "target": "{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run_func", "target": "{\"name\":\"run_func\",\"type_\":\"Optional[Callable[...,Coroutine[Any,Any,Union[WebPage,list[WebPage]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[..., Coroutine[Any, Any, Union[WebPage, list[WebPage]]]]]\",\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\"]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:from_browser_config", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:from_browser_config", "target": "{\"name\":\"from_browser_config\",\"args\":[{\"name\":\"config\",\"type_\":\"BrowserConfig\",\"default_\":\"\",\"description\":\"config: BrowserConfig\",\"compositions\":[\"BrowserConfig\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_browser_config(config: BrowserConfig)\",\"aggregations\":[\"BrowserConfig\"]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\",\"description\":\"WebPage\",\"compositions\":[\"WebPage\"]},\"description\":\"run(url: str): WebPage\",\"aggregations\":[\"WebPage\"]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:validate_extra", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:validate_extra", "target": "{\"name\":\"validate_extra\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_extra()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools:WebBrowserEngineType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools:WebBrowserEngineType", "target": "{\"name\":\"WebBrowserEngineType\",\"package\":\"metagpt/tools:WebBrowserEngineType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/tools:WebBrowserEngineType:name"}, {"predicate": "isCompositeOf", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/configs/browser_config.py:BrowserConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/configs/browser_config.py:BrowserConfig:engine"}, {"predicate": "isCompositeOf", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine"}, {"predicate": "isCompositeOn", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine"}, {"predicate": "has_class_view", "source": "metagpt/tools:WebBrowserEngineType", "target": "{\"name\":\"WebBrowserEngineType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools:WebBrowserEngineType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools:WebBrowserEngineType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/parse_html.py", "target": "metagpt/utils/parse_html.py:WebPage"}, {"predicate": "has_function", "source": "metagpt/utils/parse_html.py", "target": "metagpt/utils/parse_html.py:get_html_content"}, {"predicate": "has_function", "source": "metagpt/utils/parse_html.py", "target": "metagpt/utils/parse_html.py:_get_soup"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage", "target": "{\"name\":\"WebPage\",\"package\":\"metagpt/utils/parse_html.py:WebPage\",\"attributes\":{\"html\":{\"name\":\"html\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"html : str\",\"compositions\":[]},\"inner_text\":{\"name\":\"inner_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"inner_text : str\",\"compositions\":[]},\"soup\":{\"name\":\"soup\",\"type_\":\"\",\"default_\":\"\",\"description\":\"soup\",\"compositions\":[]},\"title\":{\"name\":\"title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"title\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}},\"methods\":{\"get_links\":{\"name\":\"get_links\",\"args\":[],\"return_args\":{\"type_\":\"Generator[str,None,None]\",\"description\":\"Generator[str, None, None]\",\"compositions\":[\"Generator\"]},\"description\":\"get_links(): Generator[str, None, None]\",\"aggregations\":[\"Generator\"]}},\"compositions\":[],\"aggregations\":[\"Generator\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:html"}, {"predicate": "has_class_property", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:inner_text"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:soup"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:title"}, {"predicate": "has_class_property", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:url"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:get_links"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/parse_html.py:WebPage", "target": "?:Generator"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:WebPage", "target": "{\"lineno\":11,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebPage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/parse_html.py:WebPage", "target": "{\"name\":\"WebPage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"html\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inner_text\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"soup\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"title\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:html", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:html", "target": "{\"name\":\"html\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"html : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:inner_text", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:inner_text", "target": "{\"name\":\"inner_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"inner_text : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:soup", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:soup", "target": "{\"name\":\"soup\",\"type_\":\"\",\"default_\":\"\",\"description\":\"soup\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:soup", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:title", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:title", "target": "{\"name\":\"title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"title\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:title", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:url", "target": "{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:get_links", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:get_links", "target": "{\"name\":\"get_links\",\"args\":[],\"return_args\":{\"type_\":\"Generator[str,None,None]\",\"description\":\"Generator[str, None, None]\",\"compositions\":[\"Generator\"]},\"description\":\"get_links(): Generator[str, None, None]\",\"aggregations\":[\"Generator\"]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_env.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_env.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment/werewolf_env/werewolf_env.py", "target": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "{\"name\":\"WerewolfEnv\",\"package\":\"metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv\",\"attributes\":{\"history\":{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]},\"timestamp\":{\"name\":\"timestamp\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timestamp : int\",\"compositions\":[]}},\"methods\":{\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"add_timestamp\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"add_timestamp: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(message: Message, add_timestamp: bool)\",\"aggregations\":[\"Message\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:history"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:timestamp"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:publish_message"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:run"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "metagpt/environment/base_env.py:Environment"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "{\"lineno\":13,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WerewolfEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv", "target": "{\"name\":\"WerewolfEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"timestamp\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:history", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:history", "target": "{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:timestamp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:timestamp", "target": "{\"name\":\"timestamp\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timestamp : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:publish_message", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:publish_message", "target": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"add_timestamp\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"add_timestamp: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(message: Message, add_timestamp: bool)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_env.py:WerewolfEnv:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "{\"name\":\"WerewolfExtEnv\",\"package\":\"metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv\",\"attributes\":{\"eval_step_idx\":{\"name\":\"eval_step_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"eval_step_idx : int\",\"compositions\":[]},\"game_setup\":{\"name\":\"game_setup\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"game_setup : str\",\"compositions\":[]},\"is_hunted_player_saved\":{\"name\":\"is_hunted_player_saved\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_hunted_player_saved : bool\",\"compositions\":[]},\"living_players\":{\"name\":\"living_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"living_players\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"per_round_steps\":{\"name\":\"per_round_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"per_round_steps : int\",\"compositions\":[]},\"player_current_dead\":{\"name\":\"player_current_dead\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"player_current_dead : list[str]\",\"compositions\":[]},\"player_hunted\":{\"name\":\"player_hunted\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_hunted : Optional[str]\",\"compositions\":[]},\"player_poisoned\":{\"name\":\"player_poisoned\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_poisoned : Optional[str]\",\"compositions\":[]},\"player_protected\":{\"name\":\"player_protected\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_protected : Optional[str]\",\"compositions\":[]},\"players_state\":{\"name\":\"players_state\",\"type_\":\"dict[str,tuple[str,RoleState]]\",\"default_\":\"\",\"description\":\"players_state : dict[str, tuple[str, RoleState]]\",\"compositions\":[\"RoleState\",\"tuple\"]},\"round_hunts\":{\"name\":\"round_hunts\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"round_hunts : dict[str, str]\",\"compositions\":[]},\"round_idx\":{\"name\":\"round_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"round_idx : int\",\"compositions\":[]},\"round_votes\":{\"name\":\"round_votes\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"round_votes : dict[str, str]\",\"compositions\":[]},\"special_role_players\":{\"name\":\"special_role_players\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"special_role_players : list[str]\",\"compositions\":[]},\"step_idx\":{\"name\":\"step_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"step_idx : int\",\"compositions\":[]},\"villager_players\":{\"name\":\"villager_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"villager_players\",\"compositions\":[]},\"werewolf_players\":{\"name\":\"werewolf_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"werewolf_players\",\"compositions\":[]},\"win_reason\":{\"name\":\"win_reason\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"win_reason : Optional[str]\",\"compositions\":[]},\"winner\":{\"name\":\"winner\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"winner : Optional[str]\",\"compositions\":[]},\"witch_antidote_left\":{\"name\":\"witch_antidote_left\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"witch_antidote_left : int\",\"compositions\":[]},\"witch_poison_left\":{\"name\":\"witch_poison_left\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"witch_poison_left : int\",\"compositions\":[]}},\"methods\":{\"curr_step_instruction\":{\"name\":\"curr_step_instruction\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"curr_step_instruction(): dict\",\"aggregations\":[]},\"get_players_state\":{\"name\":\"get_players_state\",\"args\":[{\"name\":\"player_names\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"player_names: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,RoleState]\",\"description\":\"dict[str, RoleState]\",\"compositions\":[\"RoleState\"]},\"description\":\"get_players_state(player_names: list[str]): dict[str, RoleState]\",\"aggregations\":[\"RoleState\"]},\"init_game_setup\":{\"name\":\"init_game_setup\",\"args\":[{\"name\":\"role_uniq_objs\",\"type_\":\"list[object]\",\"default_\":\"\",\"description\":\"role_uniq_objs: list[object]\",\"compositions\":[\"object\"]},{\"name\":\"num_villager\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_villager: int\",\"compositions\":[]},{\"name\":\"num_werewolf\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_werewolf: int\",\"compositions\":[]},{\"name\":\"shuffle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"shuffle\",\"compositions\":[]},{\"name\":\"add_human\",\"type_\":\"\",\"default_\":\"\",\"description\":\"add_human\",\"compositions\":[]},{\"name\":\"use_reflection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_reflection\",\"compositions\":[]},{\"name\":\"use_experience\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_experience\",\"compositions\":[]},{\"name\":\"use_memory_selection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_memory_selection\",\"compositions\":[]},{\"name\":\"new_experience_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_experience_version\",\"compositions\":[]},{\"name\":\"prepare_human_player\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prepare_human_player\",\"compositions\":[]}],\"return_args\":{\"type_\":\"tuple[str,list]\",\"description\":\"tuple[str, list]\",\"compositions\":[\"tuple\"]},\"description\":\"init_game_setup(role_uniq_objs: list[object], num_villager: int, num_werewolf: int, shuffle, add_human, use_reflection, use_experience, use_memory_selection, new_experience_version, prepare_human_player): tuple[str, list]\",\"aggregations\":[\"tuple\",\"object\"]},\"update_game_states\":{\"name\":\"update_game_states\",\"args\":[{\"name\":\"memories\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"memories: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_game_states(memories: list)\",\"aggregations\":[]},\"vote_kill_someone\":{\"name\":\"vote_kill_someone\",\"args\":[{\"name\":\"voteer\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"voteer: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"player_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"vote_kill_someone(voteer: 'Role', player_name: str)\",\"aggregations\":[\"Role\"]},\"witch_poison_someone\":{\"name\":\"witch_poison_someone\",\"args\":[{\"name\":\"witch\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"witch: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_name: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"witch_poison_someone(witch: 'Role', player_name: Optional[str])\",\"aggregations\":[\"Role\"]},\"witch_save_someone\":{\"name\":\"witch_save_someone\",\"args\":[{\"name\":\"witch\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"witch: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_name: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"witch_save_someone(witch: 'Role', player_name: Optional[str])\",\"aggregations\":[\"Role\"]},\"wolf_kill_someone\":{\"name\":\"wolf_kill_someone\",\"args\":[{\"name\":\"wolf\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"wolf: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"player_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"wolf_kill_someone(wolf: 'Role', player_name: str)\",\"aggregations\":[\"Role\"]}},\"compositions\":[\"RoleState\",\"tuple\"],\"aggregations\":[\"object\",\"Role\"]}"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:eval_step_idx"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:game_setup"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:is_hunted_player_saved"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:living_players"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:model_config"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:per_round_steps"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_current_dead"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_hunted"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_poisoned"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_protected"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:players_state"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_hunts"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_idx"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_votes"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:special_role_players"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:step_idx"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:villager_players"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:werewolf_players"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:win_reason"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:winner"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_antidote_left"}, {"predicate": "has_class_property", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_poison_left"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:curr_step_instruction"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:get_players_state"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:init_game_setup"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:update_game_states"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:vote_kill_someone"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_poison_someone"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_save_someone"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:wolf_kill_someone"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "?:tuple"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "?:object"}, {"predicate": "isAggregateOf", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "?:Role"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/base_env.py:ExtEnv"}, {"predicate": "is_composite_of", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:RoleState"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_role_type_players"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_init_players_state"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_update_players_state"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_check_valid_role"}, {"predicate": "has_class_method", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_check_player_continue"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "{\"lineno\":100,\"end_lineno\":335,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WerewolfExtEnv\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "{\"name\":\"WerewolfExtEnv\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"eval_step_idx\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"game_setup\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_hunted_player_saved\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"living_players\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"per_round_steps\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"player_current_dead\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"player_hunted\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"player_poisoned\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"player_protected\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"players_state\",\"visibility\":\"+\",\"value_type\":\"dict[str,tuple[str,RoleState]]\",\"default_value\":\"\"},{\"name\":\"round_hunts\",\"visibility\":\"+\",\"value_type\":\"dict[str,str]\",\"default_value\":\"\"},{\"name\":\"round_idx\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"round_votes\",\"visibility\":\"+\",\"value_type\":\"dict[str,str]\",\"default_value\":\"\"},{\"name\":\"special_role_players\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"step_idx\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"villager_players\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"werewolf_players\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"win_reason\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"winner\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"witch_antidote_left\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"witch_poison_left\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv", "target": "?:RoleState"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:eval_step_idx", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:eval_step_idx", "target": "{\"name\":\"eval_step_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"eval_step_idx : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:game_setup", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:game_setup", "target": "{\"name\":\"game_setup\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"game_setup : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:is_hunted_player_saved", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:is_hunted_player_saved", "target": "{\"name\":\"is_hunted_player_saved\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_hunted_player_saved : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:living_players", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:living_players", "target": "{\"name\":\"living_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"living_players\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:living_players", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:per_round_steps", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:per_round_steps", "target": "{\"name\":\"per_round_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"per_round_steps : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_current_dead", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_current_dead", "target": "{\"name\":\"player_current_dead\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"player_current_dead : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_hunted", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_hunted", "target": "{\"name\":\"player_hunted\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_hunted : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_poisoned", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_poisoned", "target": "{\"name\":\"player_poisoned\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_poisoned : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_protected", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:player_protected", "target": "{\"name\":\"player_protected\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_protected : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:players_state", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:players_state", "target": "{\"name\":\"players_state\",\"type_\":\"dict[str,tuple[str,RoleState]]\",\"default_\":\"\",\"description\":\"players_state : dict[str, tuple[str, RoleState]]\",\"compositions\":[\"RoleState\",\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_hunts", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_hunts", "target": "{\"name\":\"round_hunts\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"round_hunts : dict[str, str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_idx", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_idx", "target": "{\"name\":\"round_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"round_idx : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_votes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:round_votes", "target": "{\"name\":\"round_votes\",\"type_\":\"dict[str,str]\",\"default_\":\"\",\"description\":\"round_votes : dict[str, str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:special_role_players", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:special_role_players", "target": "{\"name\":\"special_role_players\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"special_role_players : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:step_idx", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:step_idx", "target": "{\"name\":\"step_idx\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"step_idx : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:villager_players", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:villager_players", "target": "{\"name\":\"villager_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"villager_players\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:villager_players", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:werewolf_players", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:werewolf_players", "target": "{\"name\":\"werewolf_players\",\"type_\":\"\",\"default_\":\"\",\"description\":\"werewolf_players\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:werewolf_players", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:win_reason", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:win_reason", "target": "{\"name\":\"win_reason\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"win_reason : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:winner", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:winner", "target": "{\"name\":\"winner\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"winner : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_antidote_left", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_antidote_left", "target": "{\"name\":\"witch_antidote_left\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"witch_antidote_left : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_poison_left", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_poison_left", "target": "{\"name\":\"witch_poison_left\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"witch_poison_left : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:curr_step_instruction", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:curr_step_instruction", "target": "{\"name\":\"curr_step_instruction\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"curr_step_instruction(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:get_players_state", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:get_players_state", "target": "{\"name\":\"get_players_state\",\"args\":[{\"name\":\"player_names\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"player_names: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,RoleState]\",\"description\":\"dict[str, RoleState]\",\"compositions\":[\"RoleState\"]},\"description\":\"get_players_state(player_names: list[str]): dict[str, RoleState]\",\"aggregations\":[\"RoleState\"]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:init_game_setup", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:init_game_setup", "target": "{\"name\":\"init_game_setup\",\"args\":[{\"name\":\"role_uniq_objs\",\"type_\":\"list[object]\",\"default_\":\"\",\"description\":\"role_uniq_objs: list[object]\",\"compositions\":[\"object\"]},{\"name\":\"num_villager\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_villager: int\",\"compositions\":[]},{\"name\":\"num_werewolf\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_werewolf: int\",\"compositions\":[]},{\"name\":\"shuffle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"shuffle\",\"compositions\":[]},{\"name\":\"add_human\",\"type_\":\"\",\"default_\":\"\",\"description\":\"add_human\",\"compositions\":[]},{\"name\":\"use_reflection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_reflection\",\"compositions\":[]},{\"name\":\"use_experience\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_experience\",\"compositions\":[]},{\"name\":\"use_memory_selection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"use_memory_selection\",\"compositions\":[]},{\"name\":\"new_experience_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_experience_version\",\"compositions\":[]},{\"name\":\"prepare_human_player\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prepare_human_player\",\"compositions\":[]}],\"return_args\":{\"type_\":\"tuple[str,list]\",\"description\":\"tuple[str, list]\",\"compositions\":[\"tuple\"]},\"description\":\"init_game_setup(role_uniq_objs: list[object], num_villager: int, num_werewolf: int, shuffle, add_human, use_reflection, use_experience, use_memory_selection, new_experience_version, prepare_human_player): tuple[str, list]\",\"aggregations\":[\"tuple\",\"object\"]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:update_game_states", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:update_game_states", "target": "{\"name\":\"update_game_states\",\"args\":[{\"name\":\"memories\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"memories: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_game_states(memories: list)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:vote_kill_someone", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:vote_kill_someone", "target": "{\"name\":\"vote_kill_someone\",\"args\":[{\"name\":\"voteer\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"voteer: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"player_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"vote_kill_someone(voteer: 'Role', player_name: str)\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_poison_someone", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_poison_someone", "target": "{\"name\":\"witch_poison_someone\",\"args\":[{\"name\":\"witch\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"witch: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_name: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"witch_poison_someone(witch: 'Role', player_name: Optional[str])\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_save_someone", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:witch_save_someone", "target": "{\"name\":\"witch_save_someone\",\"args\":[{\"name\":\"witch\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"witch: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"player_name: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"witch_save_someone(witch: 'Role', player_name: Optional[str])\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:wolf_kill_someone", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:wolf_kill_someone", "target": "{\"name\":\"wolf_kill_someone\",\"args\":[{\"name\":\"wolf\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"wolf: 'Role'\",\"compositions\":[\"Role\"]},{\"name\":\"player_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"player_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"wolf_kill_someone(wolf: 'Role', player_name: str)\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "{\"name\":\"WikiHowTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:WikiHowTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"step\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"step: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"gen(question: str, step: str): list[str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "metagpt/tools/prompt_writer.py:WikiHowTemplate:gen"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "metagpt/tools/prompt_writer.py:WikiHowTemplate:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "{\"lineno\":52,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WikiHowTemplate\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "{\"name\":\"WikiHowTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate:gen", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate:gen", "target": "{\"name\":\"gen\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"step\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"step: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"gen(question: str, step: str): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/workspace_config.py", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "{\"name\":\"WorkspaceConfig\",\"package\":\"metagpt/configs/workspace_config.py:WorkspaceConfig\",\"attributes\":{\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]},\"uid\":{\"name\":\"uid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"uid : str\",\"compositions\":[]},\"use_uid\":{\"name\":\"use_uid\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_uid : bool\",\"compositions\":[]}},\"methods\":{\"check_uid_and_update_path\":{\"name\":\"check_uid_and_update_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_uid_and_update_path()\",\"aggregations\":[]},\"check_workspace_path\":{\"name\":\"check_workspace_path\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_workspace_path(v)\",\"aggregations\":[]}},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:path"}, {"predicate": "has_class_property", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:uid"}, {"predicate": "has_class_property", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:use_uid"}, {"predicate": "has_class_method", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_uid_and_update_path"}, {"predicate": "has_class_method", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_workspace_path"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/config2.py:Config"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/config2.py:Config:workspace"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "{\"lineno\":18,\"end_lineno\":38,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WorkspaceConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "{\"name\":\"WorkspaceConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"uid\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_uid\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:path", "target": "{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:uid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:uid", "target": "{\"name\":\"uid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"uid : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:use_uid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:use_uid", "target": "{\"name\":\"use_uid\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_uid : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_uid_and_update_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_uid_and_update_path", "target": "{\"name\":\"check_uid_and_update_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_uid_and_update_path()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_workspace_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_workspace_path", "target": "{\"name\":\"check_workspace_path\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_workspace_path(v)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:WriteAPIRegistry", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment/api/env_api.py:WriteAPIRegistry", "target": "{\"name\":\"WriteAPIRegistry\",\"package\":\"metagpt/environment/api/env_api.py:WriteAPIRegistry\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/environment/api/env_api.py:WriteAPIRegistry", "target": "metagpt/environment/api/env_api.py:EnvAPIRegistry"}, {"predicate": "has_page_info", "source": "metagpt/environment/api/env_api.py:WriteAPIRegistry", "target": "{\"lineno\":51,\"end_lineno\":54,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteAPIRegistry\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment/api/env_api.py:WriteAPIRegistry", "target": "{\"name\":\"WriteAPIRegistry\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_code.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_code.py", "target": "metagpt/actions/write_code.py:WriteCode"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode", "target": "{\"name\":\"WriteCode\",\"package\":\"metagpt/actions/write_code.py:WriteCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"get_codes\":{\"name\":\"get_codes\",\"args\":[{\"name\":\"task_doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"task_doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"exclude\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"exclude: str\",\"compositions\":[]},{\"name\":\"project_repo\",\"type_\":\"ProjectRepo\",\"default_\":\"\",\"description\":\"project_repo: ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},{\"name\":\"use_inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_inc: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_codes(task_doc: Document, exclude: str, project_repo: ProjectRepo, use_inc: bool): str\",\"aggregations\":[\"Document\",\"ProjectRepo\"]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]},\"write_code\":{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_code(prompt): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Document\",\"ProjectRepo\",\"CodingContext\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:get_codes"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:write_code"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_code.py:WriteCode", "target": "?:Document"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_code.py:WriteCode", "target": "?:ProjectRepo"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_code.py:WriteCode", "target": "?:CodingContext"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:WriteCode", "target": "{\"lineno\":83,\"end_lineno\":213,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_code.py:WriteCode", "target": "{\"name\":\"WriteCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:get_codes", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:get_codes", "target": "{\"name\":\"get_codes\",\"args\":[{\"name\":\"task_doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"task_doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"exclude\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"exclude: str\",\"compositions\":[]},{\"name\":\"project_repo\",\"type_\":\"ProjectRepo\",\"default_\":\"\",\"description\":\"project_repo: ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},{\"name\":\"use_inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_inc: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_codes(task_doc: Document, exclude: str, project_repo: ProjectRepo, use_inc: bool): str\",\"aggregations\":[\"Document\",\"ProjectRepo\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:write_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:write_code", "target": "{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_code(prompt): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_code_an_draft.py", "target": "metagpt/actions/write_code_an_draft.py:WriteCodeAN"}, {"predicate": "has_function", "source": "metagpt/actions/write_code_an_draft.py", "target": "metagpt/actions/write_code_an_draft.py:main"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "{\"name\":\"WriteCodeAN\",\"package\":\"metagpt/actions/write_code_an_draft.py:WriteCodeAN\",\"attributes\":{},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "metagpt/actions/write_code_an_draft.py:WriteCodeAN:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "{\"lineno\":576,\"end_lineno\":581,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeAN\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "{\"name\":\"WriteCodeAN\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_code_plan_and_change_an.py", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "{\"name\":\"WriteCodePlanAndChange\",\"package\":\"metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"get_old_codes\":{\"name\":\"get_old_codes\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_old_codes(): str\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:get_old_codes"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "{\"lineno\":185,\"end_lineno\":210,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodePlanAndChange\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "{\"name\":\"WriteCodePlanAndChange\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:get_old_codes", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:get_old_codes", "target": "{\"name\":\"get_old_codes\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_old_codes(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_code_review.py", "target": "metagpt/actions/write_code_review.py:WriteCodeReview"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "{\"name\":\"WriteCodeReview\",\"package\":\"metagpt/actions/write_code_review.py:WriteCodeReview\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]},\"write_code_review_and_rewrite\":{\"name\":\"write_code_review_and_rewrite\",\"args\":[{\"name\":\"context_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context_prompt\",\"compositions\":[]},{\"name\":\"cr_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cr_prompt\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filename\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code_review_and_rewrite(context_prompt, cr_prompt, filename)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"CodingContext\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:write_code_review_and_rewrite"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "?:CodingContext"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "{\"lineno\":121,\"end_lineno\":191,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeReview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "{\"name\":\"WriteCodeReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:write_code_review_and_rewrite", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:write_code_review_and_rewrite", "target": "{\"name\":\"write_code_review_and_rewrite\",\"args\":[{\"name\":\"context_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context_prompt\",\"compositions\":[]},{\"name\":\"cr_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cr_prompt\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filename\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code_review_and_rewrite(context_prompt, cr_prompt, filename)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_tutorial.py", "target": "metagpt/actions/write_tutorial.py:WriteContent"}, {"predicate": "has_class", "source": "metagpt/actions/write_tutorial.py", "target": "metagpt/actions/write_tutorial.py:WriteDirectory"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "{\"name\":\"WriteContent\",\"package\":\"metagpt/actions/write_tutorial.py:WriteContent\",\"attributes\":{\"directory\":{\"name\":\"directory\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"directory : dict\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/write_tutorial.py:WriteContent:directory"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/write_tutorial.py:WriteContent:language"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/write_tutorial.py:WriteContent:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/write_tutorial.py:WriteContent:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "{\"lineno\":42,\"end_lineno\":65,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteContent\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "{\"name\":\"WriteContent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"directory\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent:directory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent:directory", "target": "{\"name\":\"directory\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"directory : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/design_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/design_api.py", "target": "metagpt/actions/design_api.py:WriteDesign"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "{\"name\":\"WriteDesign\",\"package\":\"metagpt/actions/design_api.py:WriteDesign\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"with_messages: Message\",\"compositions\":[\"Message\"]},{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages: Message, schema: str)\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_new_system_design"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_merge"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_update_system_design"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_save_data_api_design"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_save_seq_flow"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_save_mermaid_file"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "{\"lineno\":39,\"end_lineno\":120,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDesign\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "{\"name\":\"WriteDesign\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"with_messages: Message\",\"compositions\":[\"Message\"]},{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages: Message, schema: str)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "{\"name\":\"WriteDirectory\",\"package\":\"metagpt/actions/write_tutorial.py:WriteDirectory\",\"attributes\":{\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"run(topic: str): Dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "metagpt/actions/write_tutorial.py:WriteDirectory:language"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "metagpt/actions/write_tutorial.py:WriteDirectory:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "metagpt/actions/write_tutorial.py:WriteDirectory:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "{\"lineno\":17,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDirectory\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "{\"name\":\"WriteDirectory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"run(topic: str): Dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_docstring.py", "target": "metagpt/actions/write_docstring.py:WriteDocstring"}, {"predicate": "has_function", "source": "metagpt/actions/write_docstring.py", "target": "metagpt/actions/write_docstring.py:_simplify_python_code"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "{\"name\":\"WriteDocstring\",\"package\":\"metagpt/actions/write_docstring.py:WriteDocstring\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(code: str, system_text: str, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[]},\"write_docstring\":{\"name\":\"write_docstring\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"overwrite\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"overwrite: bool\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_docstring(filename: str \\\\| Path, overwrite: bool, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/write_docstring.py:WriteDocstring:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/write_docstring.py:WriteDocstring:i_context"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/write_docstring.py:WriteDocstring:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/write_docstring.py:WriteDocstring:write_docstring"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "{\"lineno\":156,\"end_lineno\":196,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDocstring\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "{\"name\":\"WriteDocstring\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(code: str, system_text: str, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring:write_docstring", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring:write_docstring", "target": "{\"name\":\"write_docstring\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"overwrite\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"overwrite: bool\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_docstring(filename: str \\\\| Path, overwrite: bool, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_prd.py", "target": "metagpt/actions/write_prd.py:WritePRD"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "{\"name\":\"WritePRD\",\"package\":\"metagpt/actions/write_prd.py:WritePRD\",\"attributes\":{\"project_name\":{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}},\"methods\":{\"get_related_docs\":{\"name\":\"get_related_docs\",\"args\":[{\"name\":\"req\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"req: Document\",\"compositions\":[\"Document\"]},{\"name\":\"docs\",\"type_\":\"list[Document]\",\"default_\":\"\",\"description\":\"docs: list[Document]\",\"compositions\":[\"Document\"]}],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_related_docs(req: Document, docs: list[Document]): list[Document]\",\"aggregations\":[\"Document\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionOutput\\\\|Message\",\"description\":\"ActionOutput \\\\| Message\",\"compositions\":[\"ActionOutput\\\\\",\"Message\"]},\"description\":\"run(with_messages): ActionOutput \\\\| Message\",\"aggregations\":[\"Message\",\"ActionOutput\\\\\"]}},\"compositions\":[],\"aggregations\":[\"Document\",\"Message\",\"ActionOutput\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:project_name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:get_related_docs"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "?:Document"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "?:Message"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "?:ActionOutput\\"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_handle_bugfix"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_handle_new_requirement"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_handle_requirement_update"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_is_bugfix"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_is_related"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_merge"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_update_prd"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_save_competitive_analysis"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_rename_workspace"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "{\"lineno\":61,\"end_lineno\":172,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePRD\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "{\"name\":\"WritePRD\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd.py:WritePRD:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:get_related_docs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd.py:WritePRD:get_related_docs", "target": "{\"name\":\"get_related_docs\",\"args\":[{\"name\":\"req\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"req: Document\",\"compositions\":[\"Document\"]},{\"name\":\"docs\",\"type_\":\"list[Document]\",\"default_\":\"\",\"description\":\"docs: list[Document]\",\"compositions\":[\"Document\"]}],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_related_docs(req: Document, docs: list[Document]): list[Document]\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd.py:WritePRD:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionOutput\\\\|Message\",\"description\":\"ActionOutput \\\\| Message\",\"compositions\":[\"ActionOutput\\\\\",\"Message\"]},\"description\":\"run(with_messages): ActionOutput \\\\| Message\",\"aggregations\":[\"Message\",\"ActionOutput\\\\\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_prd_review.py", "target": "metagpt/actions/write_prd_review.py:WritePRDReview"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "{\"name\":\"WritePRDReview\",\"package\":\"metagpt/actions/write_prd_review.py:WritePRDReview\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"prd : Optional[str]\",\"compositions\":[]},\"prd_review_prompt_template\":{\"name\":\"prd_review_prompt_template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_review_prompt_template : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:prd"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:prd_review_prompt_template"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "{\"lineno\":14,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePRDReview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "{\"name\":\"WritePRDReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"prd_review_prompt_template\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:prd", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:prd", "target": "{\"name\":\"prd\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"prd : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:prd_review_prompt_template", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:prd_review_prompt_template", "target": "{\"name\":\"prd_review_prompt_template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_review_prompt_template : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_review.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_review.py", "target": "metagpt/actions/write_review.py:WriteReview"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:WriteReview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_review.py:WriteReview", "target": "{\"name\":\"WriteReview\",\"package\":\"metagpt/actions/write_review.py:WriteReview\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_review.py:WriteReview", "target": "metagpt/actions/write_review.py:WriteReview:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_review.py:WriteReview", "target": "metagpt/actions/write_review.py:WriteReview:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_review.py:WriteReview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:WriteReview", "target": "{\"lineno\":33,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteReview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_review.py:WriteReview", "target": "{\"name\":\"WriteReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:WriteReview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_review.py:WriteReview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:WriteReview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_review.py:WriteReview:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/project_management.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/project_management.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/project_management.py", "target": "metagpt/actions/project_management.py:WriteTasks"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "{\"name\":\"WriteTasks\",\"package\":\"metagpt/actions/project_management.py:WriteTasks\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:_update_tasks"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:_run_new_tasks"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:_merge"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:_update_requirements"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "{\"lineno\":32,\"end_lineno\":96,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTasks\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "{\"name\":\"WriteTasks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/project_management.py:WriteTasks:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/project_management.py:WriteTasks:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/project_management.py:WriteTasks:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "{\"name\":\"WriteTeachingPlanPart\",\"package\":\"metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"rsp : Optional[str]\",\"compositions\":[]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}},\"methods\":{\"format_value\":{\"name\":\"format_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"format_value(value, context: Context)\",\"aggregations\":[\"Context\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_message)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Context\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:language"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:rsp"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:topic"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:format_value"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "?:Context"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:_set_result"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__str__"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__repr__"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "{\"lineno\":15,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTeachingPlanPart\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "{\"name\":\"WriteTeachingPlanPart\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:rsp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:rsp", "target": "{\"name\":\"rsp\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"rsp : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:topic", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:topic", "target": "{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:format_value", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:format_value", "target": "{\"name\":\"format_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"format_value(value, context: Context)\",\"aggregations\":[\"Context\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_message)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_test.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_test.py", "target": "metagpt/actions/write_test.py:WriteTest"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest", "target": "{\"name\":\"WriteTest\",\"package\":\"metagpt/actions/write_test.py:WriteTest\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[TestingContext]\",\"default_\":\"\",\"description\":\"i_context : Optional[TestingContext]\",\"compositions\":[\"TestingContext\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"TestingContext\",\"description\":\"TestingContext\",\"compositions\":[\"TestingContext\"]},\"description\":\"run(): TestingContext\",\"aggregations\":[\"TestingContext\"]},\"write_code\":{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code(prompt)\",\"aggregations\":[]}},\"compositions\":[\"TestingContext\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/write_test.py:WriteTest:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/write_test.py:WriteTest:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/write_test.py:WriteTest:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/write_test.py:WriteTest:write_code"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/schema.py:TestingContext"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:WriteTest", "target": "{\"lineno\":40,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTest\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_test.py:WriteTest", "target": "{\"name\":\"WriteTest\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[TestingContext]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/write_test.py:WriteTest", "target": "?:TestingContext"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[TestingContext]\",\"default_\":\"\",\"description\":\"i_context : Optional[TestingContext]\",\"compositions\":[\"TestingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"TestingContext\",\"description\":\"TestingContext\",\"compositions\":[\"TestingContext\"]},\"description\":\"run(): TestingContext\",\"aggregations\":[\"TestingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest:write_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest:write_code", "target": "{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code(prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "{\"name\":\"WsParam\",\"package\":\"metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_secret\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"app_id\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"\",\"default_\":\"\",\"description\":\"host\",\"compositions\":[]},\"message\":{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message : NoneType\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]},\"spark_url\":{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}},\"methods\":{\"create_url\":{\"name\":\"create_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_key"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_secret"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:app_id"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:host"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:message"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:path"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:spark_url"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:create_url"}, {"predicate": "has_class_view", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "{\"name\":\"WsParam\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_secret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_secret", "target": "{\"name\":\"api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_secret\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:app_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:app_id", "target": "{\"name\":\"app_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"app_id\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:host", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:host", "target": "{\"name\":\"host\",\"type_\":\"\",\"default_\":\"\",\"description\":\"host\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:message", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:message", "target": "{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:path", "target": "{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:spark_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:spark_url", "target": "{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:create_url", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:create_url", "target": "{\"name\":\"create_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_url()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/yaml_model.py", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "has_class", "source": "metagpt/utils/yaml_model.py", "target": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "{\"name\":\"YamlModel\",\"package\":\"metagpt/utils/yaml_model.py:YamlModel\",\"attributes\":{\"extra_fields\":{\"name\":\"extra_fields\",\"type_\":\"Optional[Dict[str,str]]\",\"default_\":\"\",\"description\":\"extra_fields : Optional[Dict[str, str]]\",\"compositions\":[]}},\"methods\":{\"from_yaml_file\":{\"name\":\"from_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'YamlModel'\",\"description\":\"'YamlModel'\",\"compositions\":[\"YamlModel\"]},\"description\":\"from_yaml_file(file_path: Path): 'YamlModel'\",\"aggregations\":[\"Path\",\"YamlModel\"]},\"read_yaml\":{\"name\":\"read_yaml\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"read_yaml(file_path: Path, encoding: str): Dict\",\"aggregations\":[\"Path\"]},\"to_yaml_file\":{\"name\":\"to_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"to_yaml_file(file_path: Path, encoding: str): None\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\",\"YamlModel\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "metagpt/utils/yaml_model.py:YamlModel:extra_fields"}, {"predicate": "has_class_method", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "metagpt/utils/yaml_model.py:YamlModel:from_yaml_file"}, {"predicate": "has_class_method", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "metagpt/utils/yaml_model.py:YamlModel:read_yaml"}, {"predicate": "has_class_method", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "metagpt/utils/yaml_model.py:YamlModel:to_yaml_file"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "?:YamlModel"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "{\"lineno\":15,\"end_lineno\":36,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"YamlModel\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "{\"name\":\"YamlModel\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"extra_fields\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict[str,str]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel:extra_fields", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel:extra_fields", "target": "{\"name\":\"extra_fields\",\"type_\":\"Optional[Dict[str,str]]\",\"default_\":\"\",\"description\":\"extra_fields : Optional[Dict[str, str]]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel:from_yaml_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel:from_yaml_file", "target": "{\"name\":\"from_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'YamlModel'\",\"description\":\"'YamlModel'\",\"compositions\":[\"YamlModel\"]},\"description\":\"from_yaml_file(file_path: Path): 'YamlModel'\",\"aggregations\":[\"Path\",\"YamlModel\"]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel:read_yaml", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel:read_yaml", "target": "{\"name\":\"read_yaml\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"read_yaml(file_path: Path, encoding: str): Dict\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel:to_yaml_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel:to_yaml_file", "target": "{\"name\":\"to_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"to_yaml_file(file_path: Path, encoding: str): None\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "{\"name\":\"YamlModelWithoutDefault\",\"package\":\"metagpt/utils/yaml_model.py:YamlModelWithoutDefault\",\"attributes\":{},\"methods\":{\"check_not_default_config\":{\"name\":\"check_not_default_config\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_not_default_config(values)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault:check_not_default_config"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "{\"lineno\":39,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"YamlModelWithoutDefault\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "{\"name\":\"YamlModelWithoutDefault\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault:check_not_default_config", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault:check_not_default_config", "target": "{\"name\":\"check_not_default_config\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_not_default_config(values)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/zhipuai_api.py", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM"}, {"predicate": "has_class", "source": "metagpt/provider/zhipuai_api.py", "target": "metagpt/provider/zhipuai_api.py:ZhiPuEvent"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "{\"name\":\"ZhiPuAILLM\",\"package\":\"metagpt/provider/zhipuai_api.py:ZhiPuAILLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"pricing_plan\":{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"completion\":{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"completion(messages: list[dict], timeout): dict\",\"aggregations\":[]}},\"compositions\":[\"CostManager\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:pricing_plan"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:use_system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:completion"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "is_composite_of", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init_zhipuai"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_const_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion_stream"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "{\"lineno\":36,\"end_lineno\":110,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuAILLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "{\"name\":\"ZhiPuAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"pricing_plan\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "?:CostManager"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:model", "target": "{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:pricing_plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:pricing_plan", "target": "{\"name\":\"pricing_plan\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pricing_plan\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:use_system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:use_system_prompt", "target": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:completion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:completion", "target": "{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"completion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "{\"name\":\"ZhiPuEvent\",\"package\":\"metagpt/provider/zhipuai_api.py:ZhiPuEvent\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "metagpt/provider/zhipuai_api.py:ZhiPuEvent:name"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "{\"lineno\":28,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuEvent\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "{\"name\":\"ZhiPuEvent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/zhipuai/zhipu_model_api.py", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "{\"name\":\"ZhiPuModelAPI\",\"package\":\"metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI\",\"attributes\":{},\"methods\":{\"acreate\":{\"name\":\"acreate\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acreate(): dict\",\"aggregations\":[]},\"acreate_stream\":{\"name\":\"acreate_stream\",\"args\":[],\"return_args\":{\"type_\":\"AsyncSSEClient\",\"description\":\"AsyncSSEClient\",\"compositions\":[\"AsyncSSEClient\"]},\"description\":\"acreate_stream(): AsyncSSEClient\",\"aggregations\":[\"AsyncSSEClient\"]},\"arequest\":{\"name\":\"arequest\",\"args\":[{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream: bool\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"headers: dict\",\"compositions\":[]},{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"arequest(stream: bool, method: str, headers: dict, kwargs)\",\"aggregations\":[]},\"split_zhipu_api_url\":{\"name\":\"split_zhipu_api_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"split_zhipu_api_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"AsyncSSEClient\"]}"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate_stream"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:arequest"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:split_zhipu_api_url"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "?:AsyncSSEClient"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM"}, {"predicate": "isAggregateOn", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "{\"lineno\":14,\"end_lineno\":54,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuModelAPI\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "{\"name\":\"ZhiPuModelAPI\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate", "target": "{\"name\":\"acreate\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acreate(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate_stream", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate_stream", "target": "{\"name\":\"acreate_stream\",\"args\":[],\"return_args\":{\"type_\":\"AsyncSSEClient\",\"description\":\"AsyncSSEClient\",\"compositions\":[\"AsyncSSEClient\"]},\"description\":\"acreate_stream(): AsyncSSEClient\",\"aggregations\":[\"AsyncSSEClient\"]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:arequest", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:arequest", "target": "{\"name\":\"arequest\",\"args\":[{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream: bool\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"headers: dict\",\"compositions\":[]},{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"arequest(stream: bool, method: str, headers: dict, kwargs)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:split_zhipu_api_url", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:split_zhipu_api_url", "target": "{\"name\":\"split_zhipu_api_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"split_zhipu_api_url()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill", "target": "{\"name\":\"_AgentSkill\",\"package\":\"metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill:name"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill", "target": "{\"name\":\"_AgentSkill\",\"visibility\":\"#\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "{\"name\":\"_VisualClassView\",\"package\":\"metagpt/utils/visual_graph_repo.py:_VisualClassView\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"generalizations\":{\"name\":\"generalizations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"generalizations : List[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"package\":{\"name\":\"package\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"package : str\",\"compositions\":[]},\"uml\":{\"name\":\"uml\",\"type_\":\"Optional[UMLClassView]\",\"default_\":\"\",\"description\":\"uml : Optional[UMLClassView]\",\"compositions\":[\"UMLClassView\"]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"align: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align: int): str\",\"aggregations\":[]}},\"compositions\":[\"UMLClassView\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:aggregations"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:compositions"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:generalizations"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:package"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:uml"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:get_mermaid"}, {"predicate": "is_composite_of", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/schema.py:UMLClassView"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "{\"lineno\":25,\"end_lineno\":67,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"_VisualClassView\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "{\"name\":\"_VisualClassView\",\"visibility\":\"#\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"generalizations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"package\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"uml\",\"visibility\":\"+\",\"value_type\":\"Optional[UMLClassView]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "?:UMLClassView"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:aggregations", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:aggregations", "target": "{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:compositions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:compositions", "target": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:generalizations", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:generalizations", "target": "{\"name\":\"generalizations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"generalizations : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:package", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:package", "target": "{\"name\":\"package\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"package : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:uml", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:uml", "target": "{\"name\":\"uml\",\"type_\":\"Optional[UMLClassView]\",\"default_\":\"\",\"description\":\"uml : Optional[UMLClassView]\",\"compositions\":[\"UMLClassView\"]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:get_mermaid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:get_mermaid", "target": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"align: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:reSTDocstringParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_docstring.py:reSTDocstringParser", "target": "{\"name\":\"reSTDocstringParser\",\"package\":\"metagpt/utils/parse_docstring.py:reSTDocstringParser\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/parse_docstring.py:reSTDocstringParser", "target": "metagpt/utils/parse_docstring.py:DocstringParser"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_docstring.py:reSTDocstringParser", "target": "{\"lineno\":44,\"end_lineno\":45,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"reSTDocstringParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/parse_docstring.py:reSTDocstringParser", "target": "{\"name\":\"reSTDocstringParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:_split_literal", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:_parse_name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:_parse_args", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_file", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_expr", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_if", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_if_compare", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_variable", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_assign", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_classes", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_class_relationships", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_split_class_line", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_split_relationship_line", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_get_label", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_create_path_mapping", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_repair_namespaces", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_repair_ns", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_find_root", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:is_func", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:is_func", "target": "{\"lineno\":1008,\"end_lineno\":1018,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_func\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:ast.Constant:\nBuild a symbols repository from source code.\n\nThis script is designed to create a symbols repository from the provided source code.\n\n@Time : 2023/11/17 17:58\n@Author : alexanderwu\n@File : repo_parser.py\n", "target": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\nBuild a symbols repository from source code.\\n\\nThis script is designed to create a symbols repository from the provided source code.\\n\\n@Time : 2023/11/17 17:58\\n@Author : alexanderwu\\n@File : repo_parser.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:__future__", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['annotations']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:ast", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:json", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:re", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:subprocess", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:pathlib", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['Path']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:typing", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['Dict', 'List', 'Optional']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:pandas as pd", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:pydantic", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['BaseModel', 'Field', 'field_validator']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:metagpt.const", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['AGGREGATION', 'COMPOSITION', 'GENERALIZATION']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:metagpt.logs", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['logger']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:metagpt.utils.common", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"aread\",\"remove_white_spaces\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['any_to_str', 'aread', 'remove_white_spaces']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"aread\",\"remove_white_spaces\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['handle_exception']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:asyncio", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:typing", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Awaitable\",\"Callable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['AsyncGenerator', 'Awaitable', 'Callable']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Awaitable\",\"Callable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:pydantic", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['BaseModel', 'ConfigDict', 'Field']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:metagpt.logs", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['logger']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:metagpt.roles", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['Role']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:metagpt.schema", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['Message']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/software_company.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/software_company.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/software_company.py", "target": "metagpt/software_company.py:generate_repo"}, {"predicate": "has_function", "source": "metagpt/software_company.py", "target": "metagpt/software_company.py:startup"}, {"predicate": "has_function", "source": "metagpt/software_company.py", "target": "metagpt/software_company.py:copy_config_to"}, {"predicate": "is", "source": "metagpt/software_company.py:generate_repo", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:generate_repo", "target": "{\"lineno\":18,\"end_lineno\":72,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"generate_repo\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/software_company.py:startup", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:startup", "target": "{\"lineno\":76,\"end_lineno\":122,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"startup\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/software_company.py:copy_config_to", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:copy_config_to", "target": "{\"lineno\":125,\"end_lineno\":140,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"copy_config_to\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/software_company.py:app", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:app", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Assign\",\"tokens\":[\"app\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:asyncio", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:shutil", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:module:pathlib", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:names:['Path']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:typer", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"typer\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:module:metagpt.config2", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:names:['config']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:module:metagpt.const", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:names:['CONFIG_ROOT', 'METAGPT_ROOT']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:module:metagpt.context", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:names:['Context']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:names:['ProjectRepo']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/software_company.py:__name__:__main__", "target": "{\"lineno\":143,\"end_lineno\":144,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/__init__.py:module:metagpt", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt\",\"names\":[\"_compat as _\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/__init__.py:names:['_compat as _']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt\",\"names\":[\"_compat as _\"]}}"}, {"predicate": "is", "source": "metagpt/llm.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/llm.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/llm.py", "target": "metagpt/llm.py:LLM"}, {"predicate": "is", "source": "metagpt/llm.py:LLM", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:LLM", "target": "{\"lineno\":15,\"end_lineno\":20,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"LLM\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:ast.Constant:\n@Time : 2023/5/11 14:45\n@Author : alexanderwu\n@File : llm.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:45\\n@Author : alexanderwu\\n@File : llm.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:names:['LLMConfig']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:module:metagpt.context", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:names:['Context']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:names:['BaseLLM']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/config2.py:merge_dict", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:merge_dict", "target": "{\"lineno\":129,\"end_lineno\":134,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"merge_dict\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/config2.py:config", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:config", "target": "{\"lineno\":137,\"end_lineno\":137,\"type_name\":\"ast.Assign\",\"tokens\":[\"config\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:ast.Constant:\n@Time : 2024/1/4 01:25\n@Author : alexanderwu\n@File : config2.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 01:25\\n@Author : alexanderwu\\n@File : config2.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Iterable\",\"List\",\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['Dict', 'Iterable', 'List', 'Literal', 'Optional']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Iterable\",\"List\",\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['BaseModel', 'model_validator']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.browser_config", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.browser_config\",\"names\":[\"BrowserConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['BrowserConfig']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.browser_config\",\"names\":[\"BrowserConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.mermaid_config", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.mermaid_config\",\"names\":[\"MermaidConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['MermaidConfig']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.mermaid_config\",\"names\":[\"MermaidConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.redis_config", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['RedisConfig']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.s3_config", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.s3_config\",\"names\":[\"S3Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['S3Config']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.s3_config\",\"names\":[\"S3Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.search_config", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.search_config\",\"names\":[\"SearchConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['SearchConfig']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.search_config\",\"names\":[\"SearchConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.workspace_config", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.workspace_config\",\"names\":[\"WorkspaceConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['WorkspaceConfig']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.workspace_config\",\"names\":[\"WorkspaceConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.const", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['CONFIG_ROOT', 'METAGPT_ROOT']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['YamlModel']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "is", "source": "metagpt/team.py:Team:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/team.py:Team:_check_balance", "target": "class_method"}, {"predicate": "is", "source": "metagpt/team.py:Team:_save", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/team.py:ast.Constant:\n@Time : 2023/5/12 00:30\n@Author : alexanderwu\n@File : team.py\n@Modified By: mashenquan, 2023/11/27. Add an archiving operation after completing the project, as specified in\n Section 2.2.3.3 of RFC 135.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/12 00:30\\n@Author : alexanderwu\\n@File : team.py\\n@Modified By: mashenquan, 2023/11/27. Add an archiving operation after completing the project, as specified in\\n Section 2.2.3.3 of RFC 135.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:warnings", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:pathlib", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Path']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Any', 'Optional']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:pydantic", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['BaseModel', 'ConfigDict', 'Field']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.actions", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['UserRequirement']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.const", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\",\"SERDESER_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['MESSAGE_ROUTE_TO_ALL', 'SERDESER_PATH']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\",\"SERDESER_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.context", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Context']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.environment", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Environment']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.logs", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['logger']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.roles", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Role']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.schema", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Message']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.utils.common", "target": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"NoMoneyException\",\"read_json_file\",\"serialize_decorator\",\"write_json_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['NoMoneyException', 'read_json_file', 'serialize_decorator', 'write_json_file']", "target": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"NoMoneyException\",\"read_json_file\",\"serialize_decorator\",\"write_json_file\"]}}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:__getattr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:__setattr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:__delattr__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/context.py:ast.Constant:\n@Time : 2024/1/4 16:32\n@Author : alexanderwu\n@File : context.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:32\\n@Author : alexanderwu\\n@File : context.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['Any', 'Optional']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['BaseModel', 'ConfigDict']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.config2", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['Config']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['LLMConfig']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['BaseLLM']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"create_llm_instance\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['create_llm_instance']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"create_llm_instance\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['CostManager']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.utils.git_repository", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['GitRepository']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['ProjectRepo']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "is", "source": "metagpt/logs.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/logs.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/logs.py", "target": "metagpt/logs.py:define_log_level"}, {"predicate": "has_function", "source": "metagpt/logs.py", "target": "metagpt/logs.py:log_llm_stream"}, {"predicate": "has_function", "source": "metagpt/logs.py", "target": "metagpt/logs.py:set_llm_stream_logfunc"}, {"predicate": "is", "source": "metagpt/logs.py:define_log_level", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:define_log_level", "target": "{\"lineno\":18,\"end_lineno\":27,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"define_log_level\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/logs.py:log_llm_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:log_llm_stream", "target": "{\"lineno\":33,\"end_lineno\":34,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_llm_stream\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/logs.py:set_llm_stream_logfunc", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:set_llm_stream_logfunc", "target": "{\"lineno\":37,\"end_lineno\":39,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"set_llm_stream_logfunc\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/logs.py:logger", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:logger", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"logger\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/logs.py:_llm_stream_log", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:_llm_stream_log", "target": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"_llm_stream_log\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:ast.Constant:\n@Time : 2023/6/1 12:41\n@Author : alexanderwu\n@File : logs.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/1 12:41\\n@Author : alexanderwu\\n@File : logs.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:sys", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:module:datetime", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:names:['datetime']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:module:functools", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"partial\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:names:['partial']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"partial\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:module:loguru", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger as _logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:names:['logger as _logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger as _logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:module:metagpt.const", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:names:['METAGPT_ROOT']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"METAGPT_ROOT\"]}}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_df", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_langchain", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document.py:Repo:_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document.py:Repo:_set", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document.py:validate_cols", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/document.py:validate_cols", "target": "{\"lineno\":27,\"end_lineno\":29,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"validate_cols\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/document.py:read_data", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/document.py:read_data", "target": "{\"lineno\":32,\"end_lineno\":51,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_data\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:ast.Constant:\n@Time : 2023/6/8 14:03\n@Author : alexanderwu\n@File : document.py\n@Desc : Classes and Operations Related to Files in the File System.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/8 14:03\\n@Author : alexanderwu\\n@File : document.py\\n@Desc : Classes and Operations Related to Files in the File System.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:enum", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['Enum']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:pathlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['Path']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['Optional', 'Union']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:pandas as pd", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:langchain.document_loaders", "target": "{\"lineno\":14,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.document_loaders\",\"names\":[\"TextLoader\",\"UnstructuredPDFLoader\",\"UnstructuredWordDocumentLoader\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['TextLoader', 'UnstructuredPDFLoader', 'UnstructuredWordDocumentLoader']", "target": "{\"lineno\":14,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.document_loaders\",\"names\":[\"TextLoader\",\"UnstructuredPDFLoader\",\"UnstructuredWordDocumentLoader\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:langchain.text_splitter", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.text_splitter\",\"names\":[\"CharacterTextSplitter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['CharacterTextSplitter']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.text_splitter\",\"names\":[\"CharacterTextSplitter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:pydantic", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['BaseModel', 'ConfigDict', 'Field']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:tqdm", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tqdm\",\"names\":[\"tqdm\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['tqdm']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tqdm\",\"names\":[\"tqdm\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:metagpt.logs", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['logger']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:metagpt.repo_parser", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"RepoParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['RepoParser']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"RepoParser\"]}}"}, {"predicate": "is", "source": "metagpt/_compat.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/_compat.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/_compat.py:platform", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/_compat.py:sys", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/_compat.py:warnings", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/_compat.py:n:a:m:e:p:l:a:t:f:o:r:m:.:s:y:s:t:e:m", "target": "{\"lineno\":5,\"end_lineno\":23,\"type_name\":\"ast.If\",\"tokens\":[\"n\",\"a\",\"m\",\"e\",\"p\",\"l\",\"a\",\"t\",\"f\",\"o\",\"r\",\"m\",\".\",\"s\",\"y\",\"s\",\"t\",\"e\",\"m\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:_process_context_mixin_extra", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:ast.Constant:\n@Time : 2024/1/11 17:25\n@Author : alexanderwu\n@File : context_mixin.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/11 17:25\\n@Author : alexanderwu\\n@File : context_mixin.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:metagpt.config2", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['Config']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:metagpt.context", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['Context']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['BaseLLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/const.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/const.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/const.py", "target": "metagpt/const.py:get_metagpt_package_root"}, {"predicate": "has_function", "source": "metagpt/const.py", "target": "metagpt/const.py:get_metagpt_root"}, {"predicate": "is", "source": "metagpt/const.py:get_metagpt_package_root", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/const.py:get_metagpt_package_root", "target": "{\"lineno\":20,\"end_lineno\":30,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_metagpt_package_root\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:get_metagpt_root", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/const.py:get_metagpt_root", "target": "{\"lineno\":33,\"end_lineno\":43,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_metagpt_root\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CONFIG_ROOT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CONFIG_ROOT", "target": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONFIG_ROOT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:METAGPT_ROOT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:METAGPT_ROOT", "target": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"METAGPT_ROOT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DEFAULT_WORKSPACE_ROOT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DEFAULT_WORKSPACE_ROOT", "target": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_WORKSPACE_ROOT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:EXAMPLE_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:EXAMPLE_PATH", "target": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXAMPLE_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DATA_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DATA_PATH", "target": "{\"lineno\":52,\"end_lineno\":52,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TEST_DATA_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TEST_DATA_PATH", "target": "{\"lineno\":53,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_DATA_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:RESEARCH_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:RESEARCH_PATH", "target": "{\"lineno\":54,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TUTORIAL_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TUTORIAL_PATH", "target": "{\"lineno\":55,\"end_lineno\":55,\"type_name\":\"ast.Assign\",\"tokens\":[\"TUTORIAL_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:INVOICE_OCR_TABLE_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:INVOICE_OCR_TABLE_PATH", "target": "{\"lineno\":56,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"INVOICE_OCR_TABLE_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:UT_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:UT_PATH", "target": "{\"lineno\":58,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"UT_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SWAGGER_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SWAGGER_PATH", "target": "{\"lineno\":59,\"end_lineno\":59,\"type_name\":\"ast.Assign\",\"tokens\":[\"SWAGGER_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:UT_PY_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:UT_PY_PATH", "target": "{\"lineno\":60,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"UT_PY_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:API_QUESTIONS_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:API_QUESTIONS_PATH", "target": "{\"lineno\":61,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"API_QUESTIONS_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SERDESER_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SERDESER_PATH", "target": "{\"lineno\":63,\"end_lineno\":63,\"type_name\":\"ast.Assign\",\"tokens\":[\"SERDESER_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TMP", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TMP", "target": "{\"lineno\":65,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"TMP\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SOURCE_ROOT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SOURCE_ROOT", "target": "{\"lineno\":67,\"end_lineno\":67,\"type_name\":\"ast.Assign\",\"tokens\":[\"SOURCE_ROOT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:PROMPT_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:PROMPT_PATH", "target": "{\"lineno\":68,\"end_lineno\":68,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SKILL_DIRECTORY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SKILL_DIRECTORY", "target": "{\"lineno\":69,\"end_lineno\":69,\"type_name\":\"ast.Assign\",\"tokens\":[\"SKILL_DIRECTORY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TOOL_SCHEMA_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TOOL_SCHEMA_PATH", "target": "{\"lineno\":70,\"end_lineno\":70,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_SCHEMA_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TOOL_LIBS_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TOOL_LIBS_PATH", "target": "{\"lineno\":71,\"end_lineno\":71,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_LIBS_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MEM_TTL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MEM_TTL", "target": "{\"lineno\":75,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"MEM_TTL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_FROM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_FROM", "target": "{\"lineno\":77,\"end_lineno\":77,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_FROM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_TO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_TO", "target": "{\"lineno\":78,\"end_lineno\":78,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_CAUSE_BY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_CAUSE_BY", "target": "{\"lineno\":79,\"end_lineno\":79,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_CAUSE_BY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_META_ROLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_META_ROLE", "target": "{\"lineno\":80,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_META_ROLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_TO_ALL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_TO_ALL", "target": "{\"lineno\":81,\"end_lineno\":81,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO_ALL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_TO_NONE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_TO_NONE", "target": "{\"lineno\":82,\"end_lineno\":82,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO_NONE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:REQUIREMENT_FILENAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:REQUIREMENT_FILENAME", "target": "{\"lineno\":84,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_FILENAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:BUGFIX_FILENAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:BUGFIX_FILENAME", "target": "{\"lineno\":85,\"end_lineno\":85,\"type_name\":\"ast.Assign\",\"tokens\":[\"BUGFIX_FILENAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:PACKAGE_REQUIREMENTS_FILENAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:PACKAGE_REQUIREMENTS_FILENAME", "target": "{\"lineno\":86,\"end_lineno\":86,\"type_name\":\"ast.Assign\",\"tokens\":[\"PACKAGE_REQUIREMENTS_FILENAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DOCS_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DOCS_FILE_REPO", "target": "{\"lineno\":88,\"end_lineno\":88,\"type_name\":\"ast.Assign\",\"tokens\":[\"DOCS_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:PRDS_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:PRDS_FILE_REPO", "target": "{\"lineno\":89,\"end_lineno\":89,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRDS_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SYSTEM_DESIGN_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SYSTEM_DESIGN_FILE_REPO", "target": "{\"lineno\":90,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"SYSTEM_DESIGN_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TASK_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TASK_FILE_REPO", "target": "{\"lineno\":91,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_FILE_REPO", "target": "{\"lineno\":92,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:COMPETITIVE_ANALYSIS_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:COMPETITIVE_ANALYSIS_FILE_REPO", "target": "{\"lineno\":93,\"end_lineno\":93,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_ANALYSIS_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DATA_API_DESIGN_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DATA_API_DESIGN_FILE_REPO", "target": "{\"lineno\":94,\"end_lineno\":94,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_API_DESIGN_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SEQ_FLOW_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SEQ_FLOW_FILE_REPO", "target": "{\"lineno\":95,\"end_lineno\":95,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEQ_FLOW_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SYSTEM_DESIGN_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SYSTEM_DESIGN_PDF_FILE_REPO", "target": "{\"lineno\":96,\"end_lineno\":96,\"type_name\":\"ast.Assign\",\"tokens\":[\"SYSTEM_DESIGN_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:PRD_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:PRD_PDF_FILE_REPO", "target": "{\"lineno\":97,\"end_lineno\":97,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRD_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TASK_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TASK_PDF_FILE_REPO", "target": "{\"lineno\":98,\"end_lineno\":98,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_PDF_FILE_REPO", "target": "{\"lineno\":99,\"end_lineno\":99,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TEST_CODES_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TEST_CODES_FILE_REPO", "target": "{\"lineno\":100,\"end_lineno\":100,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_CODES_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TEST_OUTPUTS_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TEST_OUTPUTS_FILE_REPO", "target": "{\"lineno\":101,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_OUTPUTS_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CODE_SUMMARIES_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CODE_SUMMARIES_FILE_REPO", "target": "{\"lineno\":102,\"end_lineno\":102,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_SUMMARIES_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CODE_SUMMARIES_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CODE_SUMMARIES_PDF_FILE_REPO", "target": "{\"lineno\":103,\"end_lineno\":103,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_SUMMARIES_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:RESOURCES_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:RESOURCES_FILE_REPO", "target": "{\"lineno\":104,\"end_lineno\":104,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESOURCES_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SD_OUTPUT_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SD_OUTPUT_FILE_REPO", "target": "{\"lineno\":105,\"end_lineno\":105,\"type_name\":\"ast.Assign\",\"tokens\":[\"SD_OUTPUT_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:GRAPH_REPO_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:GRAPH_REPO_FILE_REPO", "target": "{\"lineno\":106,\"end_lineno\":106,\"type_name\":\"ast.Assign\",\"tokens\":[\"GRAPH_REPO_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:VISUAL_GRAPH_REPO_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:VISUAL_GRAPH_REPO_FILE_REPO", "target": "{\"lineno\":107,\"end_lineno\":107,\"type_name\":\"ast.Assign\",\"tokens\":[\"VISUAL_GRAPH_REPO_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CLASS_VIEW_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CLASS_VIEW_FILE_REPO", "target": "{\"lineno\":108,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"CLASS_VIEW_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:YAPI_URL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:YAPI_URL", "target": "{\"lineno\":110,\"end_lineno\":110,\"type_name\":\"ast.Assign\",\"tokens\":[\"YAPI_URL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DEFAULT_LANGUAGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DEFAULT_LANGUAGE", "target": "{\"lineno\":112,\"end_lineno\":112,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_LANGUAGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DEFAULT_MAX_TOKENS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DEFAULT_MAX_TOKENS", "target": "{\"lineno\":113,\"end_lineno\":113,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_MAX_TOKENS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:COMMAND_TOKENS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:COMMAND_TOKENS", "target": "{\"lineno\":114,\"end_lineno\":114,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMAND_TOKENS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:BRAIN_MEMORY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:BRAIN_MEMORY", "target": "{\"lineno\":115,\"end_lineno\":115,\"type_name\":\"ast.Assign\",\"tokens\":[\"BRAIN_MEMORY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SKILL_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SKILL_PATH", "target": "{\"lineno\":116,\"end_lineno\":116,\"type_name\":\"ast.Assign\",\"tokens\":[\"SKILL_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SERPER_API_KEY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SERPER_API_KEY", "target": "{\"lineno\":117,\"end_lineno\":117,\"type_name\":\"ast.Assign\",\"tokens\":[\"SERPER_API_KEY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DEFAULT_TOKEN_SIZE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DEFAULT_TOKEN_SIZE", "target": "{\"lineno\":118,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_TOKEN_SIZE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:BASE64_FORMAT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:BASE64_FORMAT", "target": "{\"lineno\":121,\"end_lineno\":121,\"type_name\":\"ast.Assign\",\"tokens\":[\"BASE64_FORMAT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:REDIS_KEY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:REDIS_KEY", "target": "{\"lineno\":124,\"end_lineno\":124,\"type_name\":\"ast.Assign\",\"tokens\":[\"REDIS_KEY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:LLM_API_TIMEOUT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:LLM_API_TIMEOUT", "target": "{\"lineno\":125,\"end_lineno\":125,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_API_TIMEOUT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:IGNORED_MESSAGE_ID", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:IGNORED_MESSAGE_ID", "target": "{\"lineno\":128,\"end_lineno\":128,\"type_name\":\"ast.Assign\",\"tokens\":[\"IGNORED_MESSAGE_ID\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:GENERALIZATION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:GENERALIZATION", "target": "{\"lineno\":131,\"end_lineno\":131,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERALIZATION\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:COMPOSITION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:COMPOSITION", "target": "{\"lineno\":132,\"end_lineno\":132,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPOSITION\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:AGGREGATION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:AGGREGATION", "target": "{\"lineno\":133,\"end_lineno\":133,\"type_name\":\"ast.Assign\",\"tokens\":[\"AGGREGATION\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:ast.Constant:\n@Time : 2023/5/1 11:59\n@Author : alexanderwu\n@File : const.py\n@Modified By: mashenquan, 2023-11-1. According to Section 2.2.1 and 2.2.2 of RFC 116, added key definitions for\n common properties in the Message.\n@Modified By: mashenquan, 2023-11-27. Defines file repository paths according to Section 2.2.3.4 of RFC 135.\n@Modified By: mashenquan, 2023/12/5. Add directories for code summarization..\n", "target": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/1 11:59\\n@Author : alexanderwu\\n@File : const.py\\n@Modified By: mashenquan, 2023-11-1. According to Section 2.2.1 and 2.2.2 of RFC 116, added key definitions for\\n common properties in the Message.\\n@Modified By: mashenquan, 2023-11-27. Defines file repository paths according to Section 2.2.3.4 of RFC 135.\\n@Modified By: mashenquan, 2023/12/5. Add directories for code summarization..\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:os", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:module:loguru", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:metagpt", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/schema.py:SerializationMixin:__serialize_with_class_type__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:SerializationMixin:__convert_to_real_type__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:SerializationMixin:__init_subclass__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Document:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Document:__repr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Message:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Message:__setattr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Message:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Message:__repr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:UserMessage:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:SystemMessage:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:AIMessage:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:_topological_sort", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Plan:_update_current_task", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:__hash__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:T", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:T", "target": "{\"lineno\":600,\"end_lineno\":600,\"type_name\":\"ast.Assign\",\"tokens\":[\"T\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:ast.Constant:\n@Time : 2023/5/8 22:12\n@Author : alexanderwu\n@File : schema.py\n@Modified By: mashenquan, 2023-10-31. According to Chapter 2.2.1 of RFC 116:\n Replanned the distribution of responsibilities and functional positioning of `Message` class attributes.\n@Modified By: mashenquan, 2023/11/22.\n 1. Add `Document` and `Documents` for `FileRepository` in Section 2.2.3.4 of RFC 135.\n 2. Encapsulate the common key-values set to pydantic structures to standardize and unify parameter passing\n between actions.\n 3. Add `id` to `Message` according to Section 2.2.3.1.1 of RFC 135.\n", "target": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/8 22:12\\n@Author : alexanderwu\\n@File : schema.py\\n@Modified By: mashenquan, 2023-10-31. According to Chapter 2.2.1 of RFC 116:\\n Replanned the distribution of responsibilities and functional positioning of `Message` class attributes.\\n@Modified By: mashenquan, 2023/11/22.\\n 1. Add `Document` and `Documents` for `FileRepository` in Section 2.2.3.4 of RFC 135.\\n 2. Encapsulate the common key-values set to pydantic structures to standardize and unify parameter passing\\n between actions.\\n 3. Add `id` to `Message` according to Section 2.2.3.1.1 of RFC 135.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:__future__", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['annotations']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:asyncio", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:json", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:os.path", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.Import\",\"tokens\":[\"os.path\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:uuid", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:abc", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['ABC']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:asyncio", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"asyncio\",\"names\":[\"Queue\",\"QueueEmpty\",\"wait_for\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['Queue', 'QueueEmpty', 'wait_for']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"asyncio\",\"names\":[\"Queue\",\"QueueEmpty\",\"wait_for\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:json", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['JSONDecodeError']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:pathlib", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['Path']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:typing", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Iterable\",\"List\",\"Optional\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['Any', 'Dict', 'Iterable', 'List', 'Optional', 'Type', 'TypeVar', 'Union']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Iterable\",\"List\",\"Optional\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:pydantic", "target": "{\"lineno\":28,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"PrivateAttr\",\"field_serializer\",\"field_validator\",\"model_serializer\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['BaseModel', 'ConfigDict', 'Field', 'PrivateAttr', 'field_serializer', 'field_validator', 'model_serializer', 'model_validator']", "target": "{\"lineno\":28,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"PrivateAttr\",\"field_serializer\",\"field_validator\",\"model_serializer\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.const", "target": "{\"lineno\":39,\"end_lineno\":47,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_CAUSE_BY\",\"MESSAGE_ROUTE_FROM\",\"MESSAGE_ROUTE_TO\",\"MESSAGE_ROUTE_TO_ALL\",\"PRDS_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['MESSAGE_ROUTE_CAUSE_BY', 'MESSAGE_ROUTE_FROM', 'MESSAGE_ROUTE_TO', 'MESSAGE_ROUTE_TO_ALL', 'PRDS_FILE_REPO', 'SYSTEM_DESIGN_FILE_REPO', 'TASK_FILE_REPO']", "target": "{\"lineno\":39,\"end_lineno\":47,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_CAUSE_BY\",\"MESSAGE_ROUTE_FROM\",\"MESSAGE_ROUTE_TO\",\"MESSAGE_ROUTE_TO_ALL\",\"PRDS_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.logs", "target": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['logger']", "target": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.repo_parser", "target": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['DotClassInfo']", "target": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.utils.common", "target": "{\"lineno\":50,\"end_lineno\":50,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\",\"import_class\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['any_to_str', 'any_to_str_set', 'import_class']", "target": "{\"lineno\":50,\"end_lineno\":50,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\",\"import_class\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['handle_exception']", "target": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.utils.serialize", "target": "{\"lineno\":52,\"end_lineno\":56,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"actionoutout_schema_to_mapping\",\"actionoutput_mapping_to_str\",\"actionoutput_str_to_mapping\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['actionoutout_schema_to_mapping', 'actionoutput_mapping_to_str', 'actionoutput_str_to_mapping']", "target": "{\"lineno\":52,\"end_lineno\":56,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"actionoutout_schema_to_mapping\",\"actionoutput_mapping_to_str\",\"actionoutput_str_to_mapping\"]}}"}, {"predicate": "is", "source": "metagpt/learn/text_to_image.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/text_to_image.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/learn/text_to_image.py", "target": "metagpt/learn/text_to_image.py:text_to_image"}, {"predicate": "is", "source": "metagpt/learn/text_to_image.py:text_to_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:text_to_image", "target": "{\"lineno\":20,\"end_lineno\":44,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_image\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : text_to_image.py\n@Desc : Text-to-Image skill, which provides text-to-image functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : text_to_image.py\\n@Desc : Text-to-Image skill, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:base64", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:metagpt.config2", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.config2", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['Config']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.const", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['BASE64_FORMAT']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.llm", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['LLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.tools.metagpt_text_to_image", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.metagpt_text_to_image\",\"names\":[\"oas3_metagpt_text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['oas3_metagpt_text_to_image']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.metagpt_text_to_image\",\"names\":[\"oas3_metagpt_text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.tools.openai_text_to_image", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_image\",\"names\":[\"oas3_openai_text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['oas3_openai_text_to_image']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_image\",\"names\":[\"oas3_openai_text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.utils.s3", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['S3']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"predicate": "is", "source": "metagpt/learn/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/learn/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:__all__", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:57\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:57\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:module:metagpt.learn.text_to_image", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_image\",\"names\":[\"text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:names:['text_to_image']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_image\",\"names\":[\"text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:module:metagpt.learn.text_to_speech", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_speech\",\"names\":[\"text_to_speech\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:names:['text_to_speech']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_speech\",\"names\":[\"text_to_speech\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:module:metagpt.learn.google_search", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.google_search\",\"names\":[\"google_search\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:names:['google_search']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.google_search\",\"names\":[\"google_search\"]}}"}, {"predicate": "is", "source": "metagpt/learn/google_search.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/google_search.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/learn/google_search.py", "target": "metagpt/learn/google_search.py:google_search"}, {"predicate": "is", "source": "metagpt/learn/google_search.py:google_search", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/learn/google_search.py:google_search", "target": "{\"lineno\":4,\"end_lineno\":12,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"google_search\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/google_search.py:module:metagpt.tools.search_engine", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/google_search.py:names:['SearchEngine']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "is", "source": "metagpt/learn/text_to_speech.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/text_to_speech.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/learn/text_to_speech.py", "target": "metagpt/learn/text_to_speech.py:text_to_speech"}, {"predicate": "is", "source": "metagpt/learn/text_to_speech.py:text_to_speech", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:text_to_speech", "target": "{\"lineno\":17,\"end_lineno\":69,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_speech\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : text_to_speech.py\n@Desc : Text-to-Speech skill, which provides text-to-speech functionality\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : text_to_speech.py\\n@Desc : Text-to-Speech skill, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:metagpt.config2", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.config2", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['Config']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.const", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['BASE64_FORMAT']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.tools.azure_tts", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.azure_tts\",\"names\":[\"oas3_azsure_tts\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['oas3_azsure_tts']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.azure_tts\",\"names\":[\"oas3_azsure_tts\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.tools.iflytek_tts", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.iflytek_tts\",\"names\":[\"oas3_iflytek_tts\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['oas3_iflytek_tts']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.iflytek_tts\",\"names\":[\"oas3_iflytek_tts\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.utils.s3", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['S3']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"predicate": "is", "source": "metagpt/learn/text_to_embedding.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/text_to_embedding.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/learn/text_to_embedding.py", "target": "metagpt/learn/text_to_embedding.py:text_to_embedding"}, {"predicate": "is", "source": "metagpt/learn/text_to_embedding.py:text_to_embedding", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:text_to_embedding", "target": "{\"lineno\":14,\"end_lineno\":24,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_embedding\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : text_to_embedding.py\n@Desc : Text-to-Embedding skill, which provides text-to-embedding functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : text_to_embedding.py\\n@Desc : Text-to-Embedding skill, which provides text-to-embedding functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:metagpt.config2", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:module:metagpt.config2", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:names:['Config']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:module:metagpt.tools.openai_text_to_embedding", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_embedding\",\"names\":[\"oas3_openai_text_to_embedding\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:names:['oas3_openai_text_to_embedding']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_embedding\",\"names\":[\"oas3_openai_text_to_embedding\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : skill_loader.py\n@Desc : Skill YAML Configuration Loader.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : skill_loader.py\\n@Desc : Skill YAML Configuration Loader.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:names:['Dict', 'List', 'Optional']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:aiofiles", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:yaml", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:module:pydantic", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:module:metagpt.context", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:names:['Context']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:_search_from_ddgs", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:module:__future__", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:names:['annotations']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:module:concurrent", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:names:['futures']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:names:['Literal', 'Optional', 'overload']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:names:['BaseModel', 'ConfigDict']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:__name__:__main__", "target": "{\"lineno\":91,\"end_lineno\":94,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_oas3_api_svc.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/metagpt_oas3_api_svc.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/tools/metagpt_oas3_api_svc.py", "target": "metagpt/tools/metagpt_oas3_api_svc.py:oas_http_svc"}, {"predicate": "is", "source": "metagpt/tools/metagpt_oas3_api_svc.py:oas_http_svc", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:oas_http_svc", "target": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"oas_http_svc\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : metagpt_oas3_api_svc.py\n@Desc : MetaGPT OpenAPI Specification 3.0 REST API service\n\n curl -X 'POST' 'http://localhost:8080/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\n", "target": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : metagpt_oas3_api_svc.py\\n@Desc : MetaGPT OpenAPI Specification 3.0 REST API service\\n\\n curl -X 'POST' 'http://localhost:8080/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:module:pathlib", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:names:['Path']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:connexion", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"connexion\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:__name__:__main__", "target": "{\"lineno\":31,\"end_lineno\":32,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:ast.Constant:\n@Time : 2023/5/22 21:33\n@Author : alexanderwu\n@File : search_engine_meilisearch.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/22 21:33\\n@Author : alexanderwu\\n@File : search_engine_meilisearch.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:names:['List']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:meilisearch", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"meilisearch\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:module:meilisearch.index", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"meilisearch.index\",\"names\":[\"Index\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:names:['Index']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"meilisearch.index\",\"names\":[\"Index\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:names:['handle_exception']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:oas3_openai_text_to_embedding", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:oas3_openai_text_to_embedding", "target": "{\"lineno\":75,\"end_lineno\":85,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_openai_text_to_embedding\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : openai_text_to_embedding.py\n@Desc : OpenAI Text-to-Embedding OAS3 api, which provides text-to-embedding functionality.\n For more details, checkout: `https://platform.openai.com/docs/api-reference/embeddings/object`\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : openai_text_to_embedding.py\\n@Desc : OpenAI Text-to-Embedding OAS3 api, which provides text-to-embedding functionality.\\n For more details, checkout: `https://platform.openai.com/docs/api-reference/embeddings/object`\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:names:['List']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:aiohttp", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:requests", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:module:pydantic", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:_process_response", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:ast.Constant:\n@Time : 2023/5/23 18:27\n@Author : alexanderwu\n@File : search_engine_serpapi.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 18:27\\n@Author : alexanderwu\\n@File : search_engine_serpapi.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:warnings", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:names:['Any', 'Dict', 'Optional', 'Tuple']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:aiohttp", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:__name__:__main__", "target": "{\"lineno\":115,\"end_lineno\":118,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_scrape", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_run_precheck", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_get_install_lock", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_get_install_lock", "target": "{\"lineno\":97,\"end_lineno\":101,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_get_install_lock\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_browsers", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_browsers", "target": "{\"lineno\":104,\"end_lineno\":127,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"_install_browsers\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_log_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_log_stream", "target": "{\"lineno\":130,\"end_lineno\":135,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"_log_stream\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_lock", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_lock", "target": "{\"lineno\":138,\"end_lineno\":138,\"type_name\":\"ast.AnnAssign\",\"tokens\":[\"_install_lock\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_cache", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_cache", "target": "{\"lineno\":139,\"end_lineno\":139,\"type_name\":\"ast.Assign\",\"tokens\":[\"_install_cache\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:__future__", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['annotations']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:asyncio", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:sys", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:pathlib", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['Path']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['Literal', 'Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:playwright.async_api", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['async_playwright']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"PrivateAttr\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['BaseModel', 'Field', 'PrivateAttr']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"PrivateAttr\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.utils.parse_html", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['WebPage']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SkSearchEngine:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:_process_extra", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:ast.Constant:\n@Time : 2023/5/6 20:15\n@Author : alexanderwu\n@File : search_engine.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/6 20:15\\n@Author : alexanderwu\\n@File : search_engine.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:importlib", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Coroutine\",\"Literal\",\"Optional\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:names:['Callable', 'Coroutine', 'Literal', 'Optional', 'Union', 'overload']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Coroutine\",\"Literal\",\"Optional\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:names:['BaseModel', 'ConfigDict', 'model_validator']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:module:semantic_kernel.skill_definition", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.skill_definition\",\"names\":[\"sk_function\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:names:['sk_function']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.skill_definition\",\"names\":[\"sk_function\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:module:metagpt.configs.search_config", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.search_config\",\"names\":[\"SearchConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:names:['SearchConfig']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.search_config\",\"names\":[\"SearchConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:module:metagpt.logs", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:module:metagpt.tools", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:names:['SearchEngineType']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:_process_extra", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:__future__", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['annotations']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:importlib", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Coroutine\",\"Optional\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['Any', 'Callable', 'Coroutine', 'Optional', 'Union', 'overload']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Coroutine\",\"Optional\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:pydantic", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['BaseModel', 'ConfigDict', 'model_validator']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:metagpt.configs.browser_config", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.browser_config\",\"names\":[\"BrowserConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['BrowserConfig']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.browser_config\",\"names\":[\"BrowserConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:metagpt.tools", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['WebBrowserEngineType']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:metagpt.utils.parse_html", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['WebPage']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:_process_response", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:ast.Constant:\n@Time : 2023/5/23 18:27\n@Author : alexanderwu\n@File : search_engine_serpapi.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 18:27\\n@Author : alexanderwu\\n@File : search_engine_serpapi.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:json", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:warnings", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:names:['Any', 'Dict', 'Optional', 'Tuple']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:aiohttp", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:module:pydantic", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:__name__:__main__", "target": "{\"lineno\":118,\"end_lineno\":121,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:ast.Constant:\n@Time : 2023/9/26 14:27\n@Author : zhanglei\n@File : moderation.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/26 14:27\\n@Author : zhanglei\\n@File : moderation.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:names:['Union']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:names:['BaseLLM']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:register_tool", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:register_tool", "target": "{\"lineno\":105,\"end_lineno\":126,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_tool\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:make_schema", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:make_schema", "target": "{\"lineno\":129,\"end_lineno\":142,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"make_schema\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:validate_tool_names", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:validate_tool_names", "target": "{\"lineno\":145,\"end_lineno\":155,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"validate_tool_names\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/tool_registry.py:TOOL_REGISTRY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:TOOL_REGISTRY", "target": "{\"lineno\":102,\"end_lineno\":102,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_REGISTRY\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:ast.Constant:\n@Time : 2023/01/12 17:07\n@Author : garylin2099\n@File : tool_registry.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/01/12 17:07\\n@Author : garylin2099\\n@File : tool_registry.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:module:__future__", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:names:['annotations']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:inspect", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"inspect\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:os", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:re", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:module:collections", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:names:['defaultdict']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:yaml", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:module:pydantic", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:names:['BaseModel', 'field_validator']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:module:metagpt.const", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TOOL_SCHEMA_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:names:['TOOL_SCHEMA_PATH']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TOOL_SCHEMA_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:module:metagpt.tools.tool_convert", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_convert\",\"names\":[\"convert_code_to_tool_schema\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:names:['convert_code_to_tool_schema']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_convert\",\"names\":[\"convert_code_to_tool_schema\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:module:metagpt.tools.tool_data_type", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_data_type\",\"names\":[\"Tool\",\"ToolSchema\",\"ToolTypeDef\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:names:['Tool', 'ToolSchema', 'ToolTypeDef']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_data_type\",\"names\":[\"Tool\",\"ToolSchema\",\"ToolTypeDef\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:module:metagpt.tools.tool_type", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_registry.py:names:['ToolType']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "is", "source": "metagpt/tools/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/__init__.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/__init__.py", "target": "metagpt/tools/__init__.py:SearchEngineType"}, {"predicate": "has_class", "source": "metagpt/tools/__init__.py", "target": "metagpt/tools/__init__.py:WebBrowserEngineType"}, {"predicate": "is", "source": "metagpt/tools/__init__.py:SearchEngineType", "target": "class"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:SearchEngineType", "target": "{\"lineno\":16,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchEngineType\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/__init__.py:WebBrowserEngineType", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/tools/__init__.py:WebBrowserEngineType", "target": "metagpt/tools/__init__.py:WebBrowserEngineType:__missing__"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:WebBrowserEngineType", "target": "{\"lineno\":24,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowserEngineType\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/__init__.py:WebBrowserEngineType:__missing__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/__init__.py:_", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:_", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"_\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:ast.Constant:\n@Time : 2023/4/29 15:35\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:35\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:module:enum", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:names:['Enum']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:module:metagpt.tools", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"libs\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:names:['libs']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"libs\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:module:metagpt.tools.tool_registry", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"TOOL_REGISTRY\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:names:['TOOL_REGISTRY']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"TOOL_REGISTRY\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:safe_google_results", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:safe_google_results", "target": "{\"lineno\":112,\"end_lineno\":125,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"safe_google_results\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:__future__", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['annotations']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:warnings", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:concurrent", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['futures']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:urllib.parse", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['urlparse']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:httplib2", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"httplib2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:pydantic", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['BaseModel', 'ConfigDict', 'model_validator']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:__name__:__main__", "target": "{\"lineno\":128,\"end_lineno\":131,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/tool_type.py:ToolType:__missing__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_type.py:module:enum", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_type.py:names:['Enum']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_type.py:module:metagpt.prompts.tool_types", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.tool_types\",\"names\":[\"DATA_PREPROCESS_PROMPT\",\"FEATURE_ENGINEERING_PROMPT\",\"IMAGE2WEBPAGE_PROMPT\",\"MODEL_EVALUATE_PROMPT\",\"MODEL_TRAIN_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_type.py:names:['DATA_PREPROCESS_PROMPT', 'FEATURE_ENGINEERING_PROMPT', 'IMAGE2WEBPAGE_PROMPT', 'MODEL_EVALUATE_PROMPT', 'MODEL_TRAIN_PROMPT']", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.tool_types\",\"names\":[\"DATA_PREPROCESS_PROMPT\",\"FEATURE_ENGINEERING_PROMPT\",\"IMAGE2WEBPAGE_PROMPT\",\"MODEL_EVALUATE_PROMPT\",\"MODEL_TRAIN_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_type.py:module:metagpt.tools.tool_data_type", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_data_type\",\"names\":[\"ToolTypeDef\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_type.py:names:['ToolTypeDef']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_data_type\",\"names\":[\"ToolTypeDef\"]}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_run_precheck", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_scrape_website", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:_gen_get_driver_func", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:_gen_get_driver_func", "target": "{\"lineno\":110,\"end_lineno\":134,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_gen_get_driver_func\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:_webdriver_manager_types", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:_webdriver_manager_types", "target": "{\"lineno\":91,\"end_lineno\":96,\"type_name\":\"ast.Assign\",\"tokens\":[\"_webdriver_manager_types\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:__future__", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['annotations']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:asyncio", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:importlib", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:concurrent", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['futures']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:copy", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['deepcopy']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['Callable', 'Literal', 'Optional']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"PrivateAttr\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['BaseModel', 'ConfigDict', 'Field', 'PrivateAttr']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"PrivateAttr\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.common.by", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.common.by\",\"names\":[\"By\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['By']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.common.by\",\"names\":[\"By\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.support", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support\",\"names\":[\"expected_conditions as EC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['expected_conditions as EC']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support\",\"names\":[\"expected_conditions as EC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.support.wait", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support.wait\",\"names\":[\"WebDriverWait\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['WebDriverWait']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support.wait\",\"names\":[\"WebDriverWait\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:webdriver_manager.core.download_manager", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.download_manager\",\"names\":[\"WDMDownloadManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['WDMDownloadManager']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.download_manager\",\"names\":[\"WDMDownloadManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:webdriver_manager.core.http", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.http\",\"names\":[\"WDMHttpClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['WDMHttpClient']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.http\",\"names\":[\"WDMHttpClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:metagpt.utils.parse_html", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['WebPage']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "is", "source": "metagpt/tools/openapi_v3_hello.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/openapi_v3_hello.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/tools/openapi_v3_hello.py", "target": "metagpt/tools/openapi_v3_hello.py:post_greeting"}, {"predicate": "is", "source": "metagpt/tools/openapi_v3_hello.py:post_greeting", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:post_greeting", "target": "{\"lineno\":21,\"end_lineno\":22,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"post_greeting\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:ast.Constant:\n@Time : 2023/5/2 16:03\n@Author : mashenquan\n@File : openapi_v3_hello.py\n@Desc : Implement the OpenAPI Specification 3.0 demo and use the following command to test the HTTP service:\n\n curl -X 'POST' 'http://localhost:8082/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\n", "target": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/2 16:03\\n@Author : mashenquan\\n@File : openapi_v3_hello.py\\n@Desc : Implement the OpenAPI Specification 3.0 demo and use the following command to test the HTTP service:\\n\\n curl -X 'POST' 'http://localhost:8082/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:module:pathlib", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:names:['Path']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:connexion", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"connexion\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:__name__:__main__", "target": "{\"lineno\":25,\"end_lineno\":29,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:oas3_azsure_tts", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:oas3_azsure_tts", "target": "{\"lineno\":60,\"end_lineno\":100,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_azsure_tts\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:ast.Constant:\n@Time : 2023/6/9 22:22\n@Author : Leo Xiao\n@File : azure_tts.py\n@Modified by: mashenquan, 2023/8/17. Azure TTS OAS3 api, which provides text-to-speech functionality\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/9 22:22\\n@Author : Leo Xiao\\n@File : azure_tts.py\\n@Modified by: mashenquan, 2023/8/17. Azure TTS OAS3 api, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:base64", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:module:pathlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:names:['Path']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:module:uuid", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:names:['uuid4']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:aiofiles", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:module:azure.cognitiveservices.speech", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"azure.cognitiveservices.speech\",\"names\":[\"AudioConfig\",\"SpeechConfig\",\"SpeechSynthesizer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:names:['AudioConfig', 'SpeechConfig', 'SpeechSynthesizer']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"azure.cognitiveservices.speech\",\"names\":[\"AudioConfig\",\"SpeechConfig\",\"SpeechSynthesizer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/tools/tool_convert.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/tool_convert.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/tools/tool_convert.py", "target": "metagpt/tools/tool_convert.py:convert_code_to_tool_schema"}, {"predicate": "has_function", "source": "metagpt/tools/tool_convert.py", "target": "metagpt/tools/tool_convert.py:function_docstring_to_schema"}, {"predicate": "has_function", "source": "metagpt/tools/tool_convert.py", "target": "metagpt/tools/tool_convert.py:docstring_to_schema"}, {"predicate": "has_function", "source": "metagpt/tools/tool_convert.py", "target": "metagpt/tools/tool_convert.py:get_class_method_docstring"}, {"predicate": "is", "source": "metagpt/tools/tool_convert.py:convert_code_to_tool_schema", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_convert.py:convert_code_to_tool_schema", "target": "{\"lineno\":6,\"end_lineno\":23,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"convert_code_to_tool_schema\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/tool_convert.py:function_docstring_to_schema", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_convert.py:function_docstring_to_schema", "target": "{\"lineno\":26,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"function_docstring_to_schema\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/tool_convert.py:docstring_to_schema", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_convert.py:docstring_to_schema", "target": "{\"lineno\":31,\"end_lineno\":73,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"docstring_to_schema\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/tool_convert.py:get_class_method_docstring", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_convert.py:get_class_method_docstring", "target": "{\"lineno\":76,\"end_lineno\":83,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_class_method_docstring\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_convert.py:inspect", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"inspect\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_convert.py:module:metagpt.utils.parse_docstring", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_docstring\",\"names\":[\"GoogleDocstringParser\",\"remove_spaces\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_convert.py:names:['GoogleDocstringParser', 'remove_spaces']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_docstring\",\"names\":[\"GoogleDocstringParser\",\"remove_spaces\"]}}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:oas3_openai_text_to_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:oas3_openai_text_to_image", "target": "{\"lineno\":57,\"end_lineno\":67,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_openai_text_to_image\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : openai_text_to_image.py\n@Desc : OpenAI Text-to-Image OAS3 api, which provides text-to-image functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : openai_text_to_image.py\\n@Desc : OpenAI Text-to-Image OAS3 api, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:aiohttp", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:requests", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:names:['BaseLLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:__para_to_str", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:_para_to_str", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:_generate_ut", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:ICL_SAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:ICL_SAMPLE", "target": "{\"lineno\":11,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"ICL_SAMPLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:ACT_PROMPT_PREFIX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:ACT_PROMPT_PREFIX", "target": "{\"lineno\":67,\"end_lineno\":70,\"type_name\":\"ast.Assign\",\"tokens\":[\"ACT_PROMPT_PREFIX\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:YFT_PROMPT_PREFIX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:YFT_PROMPT_PREFIX", "target": "{\"lineno\":72,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"YFT_PROMPT_PREFIX\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:OCR_API_DOC", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:OCR_API_DOC", "target": "{\"lineno\":78,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"OCR_API_DOC\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:json", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:module:pathlib", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:names:['Path']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:module:metagpt.config2", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:names:['config']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM as GPTAPI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:names:['OpenAILLM as GPTAPI']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM as GPTAPI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:module:metagpt.utils.common", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:names:['awrite']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"awrite\"]}}"}, {"predicate": "is", "source": "metagpt/tools/translator.py:prompt", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/translator.py:prompt", "target": "{\"lineno\":9,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"prompt\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/translator.py:ast.Constant:\n@Time : 2023/4/29 15:36\n@Author : alexanderwu\n@File : translator.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:36\\n@Author : alexanderwu\\n@File : translator.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:oas3_metagpt_text_to_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:oas3_metagpt_text_to_image", "target": "{\"lineno\":85,\"end_lineno\":95,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_metagpt_text_to_image\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : metagpt_text_to_image.py\n@Desc : MetaGPT Text-to-Image OAS3 api, which provides text-to-image functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : metagpt_text_to_image.py\\n@Desc : MetaGPT Text-to-Image OAS3 api, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:base64", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:names:['Dict', 'List']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:aiohttp", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:requests", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:module:pydantic", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:names:['BaseModel']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:_create_url", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:oas3_iflytek_tts", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:oas3_iflytek_tts", "target": "{\"lineno\":117,\"end_lineno\":143,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_iflytek_tts\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:DEFAULT_IFLYTEK_VOICE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:DEFAULT_IFLYTEK_VOICE", "target": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_IFLYTEK_VOICE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : iflytek_tts.py\n@Desc : iFLYTEK TTS OAS3 api, which provides text-to-speech functionality\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : iflytek_tts.py\\n@Desc : iFLYTEK TTS OAS3 api, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:base64", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:hashlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:hmac", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"hmac\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:json", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:uuid", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:datetime", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['datetime']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:enum", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['Enum']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:pathlib", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['Path']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:time", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['mktime']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:typing", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['Optional']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:urllib.parse", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['urlencode']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:wsgiref.handlers", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['format_date_time']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:aiofiles", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:websockets as websockets", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"websockets as websockets\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:pydantic", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['BaseModel']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:metagpt.logs", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['logger']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:EnronTemplate:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:ast.Constant:\n@Time : 2023/5/2 16:03\n@Author : alexanderwu\n@File : prompt_writer.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/2 16:03\\n@Author : alexanderwu\\n@File : prompt_writer.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:names:['Union']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_data_type.py:module:pydantic", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/tool_data_type.py:names:['BaseModel']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:PolynomialExpansion:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCount:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TargetMeanEncoder:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:KFoldTargetMeanEncoder:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:CatCross:_cross_two", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GroupStat:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:SplitBins:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:ExtractTimeComps:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:GeneralSelection:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TreeBasedSelection:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:VarianceBasedSelection:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/feature_engineering.py:TOOL_TYPE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:TOOL_TYPE", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_TYPE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:module:__future__", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:names:['annotations']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:itertools", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"itertools\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:numpy as np", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"numpy as np\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:pandas as pd", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:module:joblib", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"joblib\",\"names\":[\"Parallel\",\"delayed\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:names:['Parallel', 'delayed']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"joblib\",\"names\":[\"Parallel\",\"delayed\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:module:pandas.core.dtypes.common", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pandas.core.dtypes.common\",\"names\":[\"is_object_dtype\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:names:['is_object_dtype']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pandas.core.dtypes.common\",\"names\":[\"is_object_dtype\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:module:sklearn.feature_selection", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.feature_selection\",\"names\":[\"VarianceThreshold\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:names:['VarianceThreshold']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.feature_selection\",\"names\":[\"VarianceThreshold\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:module:sklearn.model_selection", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.model_selection\",\"names\":[\"KFold\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:names:['KFold']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.model_selection\",\"names\":[\"KFold\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:module:sklearn.preprocessing", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.preprocessing\",\"names\":[\"KBinsDiscretizer\",\"PolynomialFeatures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:names:['KBinsDiscretizer', 'PolynomialFeatures']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.preprocessing\",\"names\":[\"KBinsDiscretizer\",\"PolynomialFeatures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:module:metagpt.tools.libs.data_preprocess", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.libs.data_preprocess\",\"names\":[\"MLProcess\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:names:['MLProcess']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.libs.data_preprocess\",\"names\":[\"MLProcess\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:module:metagpt.tools.tool_registry", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:names:['register_tool']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:module:metagpt.tools.tool_type", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/feature_engineering.py:names:['ToolType']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:DataPreprocessTool:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:FillMissingValue:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MinMaxScale:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:StandardScale:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:MaxAbsScale:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:RobustScale:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:OrdinalEncode:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:OneHotEncode:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:LabelEncode:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:get_column_info", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:get_column_info", "target": "{\"lineno\":219,\"end_lineno\":249,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_column_info\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/libs/data_preprocess.py:TOOL_TYPE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:TOOL_TYPE", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_TYPE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:module:__future__", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:names:['annotations']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:json", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:numpy as np", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"numpy as np\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:pandas as pd", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:module:sklearn.impute", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.impute\",\"names\":[\"SimpleImputer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:names:['SimpleImputer']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.impute\",\"names\":[\"SimpleImputer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:module:sklearn.preprocessing", "target": "{\"lineno\":8,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.preprocessing\",\"names\":[\"LabelEncoder\",\"MaxAbsScaler\",\"MinMaxScaler\",\"OneHotEncoder\",\"OrdinalEncoder\",\"RobustScaler\",\"StandardScaler\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:names:['LabelEncoder', 'MaxAbsScaler', 'MinMaxScaler', 'OneHotEncoder', 'OrdinalEncoder', 'RobustScaler', 'StandardScaler']", "target": "{\"lineno\":8,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"sklearn.preprocessing\",\"names\":[\"LabelEncoder\",\"MaxAbsScaler\",\"MinMaxScaler\",\"OneHotEncoder\",\"OrdinalEncoder\",\"RobustScaler\",\"StandardScaler\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:module:metagpt.tools.tool_registry", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:names:['register_tool']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:module:metagpt.tools.tool_type", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/data_preprocess.py:names:['ToolType']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "is", "source": "metagpt/tools/libs/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/libs/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/tools/libs/__init__.py:_", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/__init__.py:_", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Assign\",\"tokens\":[\"_\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/__init__.py:module:metagpt.tools.libs", "target": "{\"lineno\":7,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.libs\",\"names\":[\"data_preprocess\",\"feature_engineering\",\"sd_engine\",\"gpt_v_generator\",\"web_scraping\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/__init__.py:names:['data_preprocess', 'feature_engineering', 'sd_engine', 'gpt_v_generator', 'web_scraping']", "target": "{\"lineno\":7,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.libs\",\"names\":[\"data_preprocess\",\"feature_engineering\",\"sd_engine\",\"gpt_v_generator\",\"web_scraping\"]}}"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py:GPTvGenerator:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py:ANALYZE_LAYOUT_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:ANALYZE_LAYOUT_PROMPT", "target": "{\"lineno\":16,\"end_lineno\":19,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANALYZE_LAYOUT_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/libs/gpt_v_generator.py:GENERATE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:GENERATE_PROMPT", "target": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERATE_PROMPT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:ast.Constant:\n@Time : 2024/01/12\n@Author : mannaandpoem\n@File : gpt_v_generator.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/01/12\\n@Author : mannaandpoem\\n@File : gpt_v_generator.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:module:metagpt.const", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_WORKSPACE_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:names:['DEFAULT_WORKSPACE_ROOT']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_WORKSPACE_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:module:metagpt.tools.tool_registry", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:names:['register_tool']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:module:metagpt.tools.tool_type", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:names:['ToolType']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:module:metagpt.utils.common", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"encode_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/gpt_v_generator.py:names:['encode_image']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"encode_image\"]}}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:SDEngine:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:decode_base64_to_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:decode_base64_to_image", "target": "{\"lineno\":172,\"end_lineno\":177,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"decode_base64_to_image\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:batch_decode_base64_to_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:batch_decode_base64_to_image", "target": "{\"lineno\":180,\"end_lineno\":183,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"batch_decode_base64_to_image\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:payload", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:payload", "target": "{\"lineno\":23,\"end_lineno\":52,\"type_name\":\"ast.Assign\",\"tokens\":[\"payload\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/libs/sd_engine.py:default_negative_prompt", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:default_negative_prompt", "target": "{\"lineno\":54,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"default_negative_prompt\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:module:__future__", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:names:['annotations']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:base64", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:hashlib", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:io", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"io\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:json", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:module:os.path", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"os.path\",\"names\":[\"join\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:names:['join']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"os.path\",\"names\":[\"join\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:requests", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:module:aiohttp", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp\",\"names\":[\"ClientSession\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:names:['ClientSession']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp\",\"names\":[\"ClientSession\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:module:PIL", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"PIL\",\"names\":[\"Image\",\"PngImagePlugin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:names:['Image', 'PngImagePlugin']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"PIL\",\"names\":[\"Image\",\"PngImagePlugin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:module:metagpt.const", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"SD_OUTPUT_FILE_REPO\",\"SOURCE_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:names:['SD_OUTPUT_FILE_REPO', 'SOURCE_ROOT']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"SD_OUTPUT_FILE_REPO\",\"SOURCE_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:module:metagpt.tools.tool_registry", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:names:['register_tool']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:module:metagpt.tools.tool_type", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/sd_engine.py:names:['ToolType']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "is", "source": "metagpt/tools/libs/web_scraping.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/libs/web_scraping.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/tools/libs/web_scraping.py", "target": "metagpt/tools/libs/web_scraping.py:scrape_web_playwright"}, {"predicate": "is", "source": "metagpt/tools/libs/web_scraping.py:scrape_web_playwright", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/web_scraping.py:scrape_web_playwright", "target": "{\"lineno\":7,\"end_lineno\":21,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"scrape_web_playwright\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/web_scraping.py:module:metagpt.tools.tool_registry", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/web_scraping.py:names:['register_tool']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"register_tool\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/web_scraping.py:module:metagpt.tools.tool_type", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/web_scraping.py:names:['ToolType']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/web_scraping.py:module:metagpt.tools.web_browser_engine_playwright", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.web_browser_engine_playwright\",\"names\":[\"PlaywrightWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/libs/web_scraping.py:names:['PlaywrightWrapper']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.web_browser_engine_playwright\",\"names\":[\"PlaywrightWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:ast.Constant:\n@Time : 2023/5/20 12:15\n@Author : alexanderwu\n@File : memory.py\n@Modified By: mashenquan, 2023-11-1. According to RFC 116: Updated the type of index key.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/20 12:15\\n@Author : alexanderwu\\n@File : memory.py\\n@Modified By: mashenquan, 2023-11-1. According to RFC 116: Updated the type of index key.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:collections", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['defaultdict']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"DefaultDict\",\"Iterable\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['DefaultDict', 'Iterable', 'Set']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"DefaultDict\",\"Iterable\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"SerializeAsAny\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['BaseModel', 'Field', 'SerializeAsAny']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"SerializeAsAny\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"IGNORED_MESSAGE_ID\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['IGNORED_MESSAGE_ID']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"IGNORED_MESSAGE_ID\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:metagpt.schema", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['Message']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:metagpt.utils.common", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['any_to_str', 'any_to_str_set']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\"]}}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_openai_summarize", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_summarize", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_is_related", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_openai_is_related", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_rewrite", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_openai_rewrite", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_summarize", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_get_summary", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : brain_memory.py\n@Desc : Used by AgentStore. Used for long-term storage and automatic compression.\n@Modified By: mashenquan, 2023/9/4. + redis memory cache.\n@Modified By: mashenquan, 2023/12/25. Simplify Functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : brain_memory.py\\n@Desc : Used by AgentStore. Used for long-term storage and automatic compression.\\n@Modified By: mashenquan, 2023/9/4. + redis memory cache.\\n@Modified By: mashenquan, 2023/12/25. Simplify Functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:re", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['Dict', 'List', 'Optional']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:pydantic", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.config2", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['config']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.const", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_MAX_TOKENS\",\"DEFAULT_TOKEN_SIZE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['DEFAULT_MAX_TOKENS', 'DEFAULT_TOKEN_SIZE']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_MAX_TOKENS\",\"DEFAULT_TOKEN_SIZE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.provider", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"MetaGPTLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['MetaGPTLLM']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"MetaGPTLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['BaseLLM']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.schema", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"SimpleMessage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['Message', 'SimpleMessage']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"SimpleMessage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.utils.redis", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.redis\",\"names\":[\"Redis\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['Redis']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.redis\",\"names\":[\"Redis\"]}}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:_load", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:_get_index_and_store_fname", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:ast.Constant:\n@Desc : the implement of memory storage\n", "target": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Desc : the implement of memory storage\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:pathlib", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['Path']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:langchain.embeddings", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['OpenAIEmbeddings']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:langchain.vectorstores.faiss", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores.faiss\",\"names\":[\"FAISS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['FAISS']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores.faiss\",\"names\":[\"FAISS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:langchain_core.embeddings", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['Embeddings']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\",\"MEM_TTL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['DATA_PATH', 'MEM_TTL']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\",\"MEM_TTL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.document_store.faiss_store", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['FaissStore']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.schema", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['Message']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.utils.serialize", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"deserialize_message\",\"serialize_message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['deserialize_message', 'serialize_message']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"deserialize_message\",\"serialize_message\"]}}"}, {"predicate": "is", "source": "metagpt/memory/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/memory/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/memory/__init__.py:__all__", "target": "{\"lineno\":14,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:57\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:57\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/__init__.py:module:metagpt.memory.memory", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/__init__.py:names:['Memory']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:ast.Constant:\n@Desc : the implement of Long-term memory\n", "target": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Desc : the implement of Long-term memory\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['Optional']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:pydantic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['ConfigDict', 'Field']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.logs", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['logger']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.memory", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['Memory']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.memory.memory_storage", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory_storage\",\"names\":[\"MemoryStorage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['MemoryStorage']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory_storage\",\"names\":[\"MemoryStorage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.roles.role", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"RoleContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['RoleContext']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"RoleContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.schema", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['Message']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:dataclasses", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"dataclasses\",\"names\":[\"dataclass\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['dataclass']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"dataclasses\",\"names\":[\"dataclass\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:typing", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['List']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:qdrant_client", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client\",\"names\":[\"QdrantClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['QdrantClient']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client\",\"names\":[\"QdrantClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:qdrant_client.models", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client.models\",\"names\":[\"Filter\",\"PointStruct\",\"VectorParams\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['Filter', 'PointStruct', 'VectorParams']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client.models\",\"names\":[\"Filter\",\"PointStruct\",\"VectorParams\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:metagpt.document_store.base_store", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['BaseStore']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/chromadb_store.py:ast.Constant:\n@Time : 2023/5/29 14:46\n@Author : alexanderwu\n@File : chromadb_store.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/29 14:46\\n@Author : alexanderwu\\n@File : chromadb_store.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/chromadb_store.py:chromadb", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"chromadb\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:ast.Constant:\n@Time : 2023/8/9 15:42\n@Author : unkn-wn (Leon Yee)\n@File : lancedb_store.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/9 15:42\\n@Author : unkn-wn (Leon Yee)\\n@File : lancedb_store.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:shutil", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:lancedb", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"lancedb\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/document_store/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/document_store/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/document_store/__init__.py:__all__", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/__init__.py:ast.Constant:\n@Time : 2023/5/25 10:20\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 10:20\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/__init__.py:module:metagpt.document_store.faiss_store", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/__init__.py:names:['FaissStore']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:_load", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:_write", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:ast.Constant:\n@Time : 2023/5/25 10:20\n@Author : alexanderwu\n@File : faiss_store.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 10:20\\n@Author : alexanderwu\\n@File : faiss_store.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:asyncio", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['Optional']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:langchain.vectorstores", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores\",\"names\":[\"FAISS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['FAISS']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores\",\"names\":[\"FAISS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:langchain_core.embeddings", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['Embeddings']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:metagpt.document", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document\",\"names\":[\"IndexableDocument\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['IndexableDocument']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document\",\"names\":[\"IndexableDocument\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:metagpt.document_store.base_store", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"LocalStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['LocalStore']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"LocalStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:metagpt.logs", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['logger']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:metagpt.utils.embedding", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.embedding\",\"names\":[\"get_embedding\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['get_embedding']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.embedding\",\"names\":[\"get_embedding\"]}}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:_get_index_and_store_fname", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:_load", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:_write", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:ast.Constant:\n@Time : 2023/5/28 00:01\n@Author : alexanderwu\n@File : base_store.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/28 00:01\\n@Author : alexanderwu\\n@File : base_store.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:module:abc", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:names:['ABC', 'abstractmethod']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:ast.Constant:\n@Time : 2023/7/21 11:15\n@Author : Leo Xiao\n@File : anthropic_api.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/21 11:15\\n@Author : Leo Xiao\\n@File : anthropic_api.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:anthropic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"anthropic\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:module:anthropic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anthropic\",\"names\":[\"Anthropic\",\"AsyncAnthropic\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:names:['Anthropic', 'AsyncAnthropic']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anthropic\",\"names\":[\"Anthropic\",\"AsyncAnthropic\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:names:['LLMConfig']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init_gemini", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_user_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_assistant_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_const_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:typing", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['Optional', 'Union']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:google.generativeai as genai", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"google.generativeai as genai\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:google.ai", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.ai\",\"names\":[\"generativelanguage as glm\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['generativelanguage as glm']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.ai\",\"names\":[\"generativelanguage as glm\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:google.generativeai.generative_models", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.generative_models\",\"names\":[\"GenerativeModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['GenerativeModel']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.generative_models\",\"names\":[\"GenerativeModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:google.generativeai.types", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types\",\"names\":[\"content_types\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['content_types']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types\",\"names\":[\"content_types\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:google.generativeai.types.generation_types", "target": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types.generation_types\",\"names\":[\"AsyncGenerateContentResponse\",\"GenerateContentResponse\",\"GenerationConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['AsyncGenerateContentResponse', 'GenerateContentResponse', 'GenerationConfig']", "target": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types.generation_types\",\"names\":[\"AsyncGenerateContentResponse\",\"GenerateContentResponse\",\"GenerationConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:tenacity", "target": "{\"lineno\":16,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":16,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.logs", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['log_llm_stream', 'logger']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['BaseLLM']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['register_provider']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['log_and_reraise']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_init_client", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_make_client_kwargs", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : openai.py\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\n", "target": "{\"lineno\":2,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : openai.py\\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:openai", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncAzureOpenAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['AsyncAzureOpenAI']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncAzureOpenAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:openai._base_client", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['AsyncHttpxClientWrapper']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['LLMType']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['register_provider']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['OpenAILLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:_make_client_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:MODEL_GRADE_TOKEN_COSTS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:MODEL_GRADE_TOKEN_COSTS", "target": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"MODEL_GRADE_TOKEN_COSTS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:re", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:openai", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncStream\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['APIConnectionError', 'AsyncStream']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncStream\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:openai.types", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['CompletionUsage']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:openai.types.chat", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletionChunk\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['ChatCompletionChunk']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletionChunk\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:tenacity", "target": "{\"lineno\":10,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":10,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['register_provider']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\",\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['OpenAILLM', 'log_and_reraise']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\",\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['CostManager', 'Costs']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:__init_ollama", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:_const_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:_decode_and_load", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:json", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:requests", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['ConnectionError']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:tenacity", "target": "{\"lineno\":8,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":8,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.const", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"LLM_API_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['LLM_API_TIMEOUT']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"LLM_API_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.logs", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['log_llm_stream', 'logger']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['BaseLLM']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.provider.general_api_requestor", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['GeneralAPIRequestor']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['register_provider']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['log_and_reraise']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"TokenCostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['TokenCostManager']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"TokenCostManager\"]}}"}, {"predicate": "is", "source": "metagpt/provider/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/provider/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:__all__", "target": "{\"lineno\":20,\"end_lineno\":31,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:ast.Constant:\n@Time : 2023/5/5 22:59\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 22:59\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.fireworks_api", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.fireworks_api\",\"names\":[\"FireworksLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['FireworksLLM']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.fireworks_api\",\"names\":[\"FireworksLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.google_gemini_api", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.google_gemini_api\",\"names\":[\"GeminiLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['GeminiLLM']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.google_gemini_api\",\"names\":[\"GeminiLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.ollama_api", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.ollama_api\",\"names\":[\"OllamaLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['OllamaLLM']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.ollama_api\",\"names\":[\"OllamaLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.open_llm_api", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.open_llm_api\",\"names\":[\"OpenLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['OpenLLM']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.open_llm_api\",\"names\":[\"OpenLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['OpenAILLM']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.zhipuai_api", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai_api\",\"names\":[\"ZhiPuAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['ZhiPuAILLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai_api\",\"names\":[\"ZhiPuAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.azure_openai_api", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.azure_openai_api\",\"names\":[\"AzureOpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['AzureOpenAILLM']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.azure_openai_api\",\"names\":[\"AzureOpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.metagpt_api", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.metagpt_api\",\"names\":[\"MetaGPTLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['MetaGPTLLM']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.metagpt_api\",\"names\":[\"MetaGPTLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.human_provider", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.human_provider\",\"names\":[\"HumanProvider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['HumanProvider']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.human_provider\",\"names\":[\"HumanProvider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.spark_api", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.spark_api\",\"names\":[\"SparkLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['SparkLLM']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.spark_api\",\"names\":[\"SparkLLM\"]}}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_init_model", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_init_client", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_make_client_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_get_proxy_params", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_cons_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_func_configs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_process_message", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_function", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_calc_usage", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_get_max_tokens", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:log_and_reraise", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:log_and_reraise", "target": "{\"lineno\":42,\"end_lineno\":50,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_and_reraise\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : openai.py\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\n", "target": "{\"lineno\":2,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : openai.py\\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:typing", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncIterator\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['AsyncIterator', 'Optional', 'Union']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncIterator\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:openai", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncOpenAI\",\"AsyncStream\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['APIConnectionError', 'AsyncOpenAI', 'AsyncStream']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncOpenAI\",\"AsyncStream\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:openai._base_client", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['AsyncHttpxClientWrapper']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:openai.types", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['CompletionUsage']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:openai.types.chat", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletion\",\"ChatCompletionChunk\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['ChatCompletion', 'ChatCompletionChunk']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletion\",\"ChatCompletionChunk\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:tenacity", "target": "{\"lineno\":18,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":18,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.logs", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['log_llm_stream', 'logger']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['BaseLLM']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.provider.constant", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.constant\",\"names\":[\"GENERAL_FUNCTION_SCHEMA\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['GENERAL_FUNCTION_SCHEMA']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.constant\",\"names\":[\"GENERAL_FUNCTION_SCHEMA\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['register_provider']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.schema", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['Message']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.utils.common", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\",\"decode_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['CodeParser', 'decode_image']", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\",\"decode_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['CostManager', 'Costs']", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['handle_exception']", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":35,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\",\"get_max_completion_tokens\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['count_message_tokens', 'count_string_tokens', 'get_max_completion_tokens']", "target": "{\"lineno\":35,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\",\"get_max_completion_tokens\"]}}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:_run", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:ast.Constant:\n@File : spark_api.py\n", "target": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@File : spark_api.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:_thread as thread", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"_thread as thread\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:base64", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:datetime", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"datetime\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:hashlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:hmac", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"hmac\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:ssl", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"ssl\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:time", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['mktime']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:urllib.parse", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['urlencode', 'urlparse']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:wsgiref.handlers", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['format_date_time']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:websocket", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"websocket\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['BaseLLM']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['register_provider']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response_line", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_async_response", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:parse_stream_helper", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:parse_stream_helper", "target": "{\"lineno\":15,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream_helper\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:parse_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:parse_stream", "target": "{\"lineno\":31,\"end_lineno\":35,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Generator\",\"Iterator\",\"Tuple\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:names:['AsyncGenerator', 'Generator', 'Iterator', 'Tuple', 'Union']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Generator\",\"Iterator\",\"Tuple\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:aiohttp", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:requests", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:module:metagpt.logs", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:names:['logger']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:module:metagpt.provider.general_api_base", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_base\",\"names\":[\"APIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:names:['APIRequestor']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_base\",\"names\":[\"APIRequestor\"]}}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_user_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_user_msg_with_imgs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_assistant_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_system_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_system_msgs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_default_system_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_extract_assistant_rsp", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_update_costs", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:ast.Constant:\n@Time : 2023/5/5 23:04\n@Author : alexanderwu\n@File : base_llm.py\n@Desc : mashenquan, 2023/8/22. + try catch\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:04\\n@Author : alexanderwu\\n@File : base_llm.py\\n@Desc : mashenquan, 2023/8/22. + try catch\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:abc", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['ABC', 'abstractmethod']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['Dict', 'Optional', 'Union']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:openai", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncOpenAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['AsyncOpenAI']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncOpenAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:openai.types", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['CompletionUsage']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['LLMConfig']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:metagpt.schema", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['Message']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['CostManager']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['handle_exception']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/provider/constant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/constant.py", "target": "python"}, {"predicate": "is", "source": "metagpt/provider/constant.py:GENERAL_FUNCTION_SCHEMA", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/constant.py:GENERAL_FUNCTION_SCHEMA", "target": "{\"lineno\":3,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERAL_FUNCTION_SCHEMA\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/constant.py:GENERAL_TOOL_CHOICE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/constant.py:GENERAL_TOOL_CHOICE", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERAL_TOOL_CHOICE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init_zhipuai", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_const_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:enum", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['Enum']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['Optional']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:openai", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"openai\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:zhipuai", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"zhipuai\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:requests", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['ConnectionError']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:tenacity", "target": "{\"lineno\":11,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":11,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['log_llm_stream', 'logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['BaseLLM']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['register_provider']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['log_and_reraise']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.zhipuai.zhipu_model_api", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.zhipu_model_api\",\"names\":[\"ZhiPuModelAPI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['ZhiPuModelAPI']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.zhipu_model_api\",\"names\":[\"ZhiPuModelAPI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['CostManager']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_validate_headers", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_prepare_request_raw", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_async_response", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response_line", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_console_log_level", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_console_log_level", "target": "{\"lineno\":78,\"end_lineno\":82,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_console_log_level\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:log_debug", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:log_debug", "target": "{\"lineno\":85,\"end_lineno\":89,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_debug\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:log_info", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:log_info", "target": "{\"lineno\":92,\"end_lineno\":96,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_info\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:log_warn", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:log_warn", "target": "{\"lineno\":99,\"end_lineno\":102,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_warn\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:logfmt", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:logfmt", "target": "{\"lineno\":105,\"end_lineno\":120,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"logfmt\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_build_api_url", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_build_api_url", "target": "{\"lineno\":153,\"end_lineno\":159,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_build_api_url\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_requests_proxies_arg", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_requests_proxies_arg", "target": "{\"lineno\":162,\"end_lineno\":173,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_requests_proxies_arg\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_aiohttp_proxies_arg", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_aiohttp_proxies_arg", "target": "{\"lineno\":176,\"end_lineno\":187,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_aiohttp_proxies_arg\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_make_session", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_make_session", "target": "{\"lineno\":190,\"end_lineno\":196,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_make_session\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:parse_stream_helper", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:parse_stream_helper", "target": "{\"lineno\":199,\"end_lineno\":210,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream_helper\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:parse_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:parse_stream", "target": "{\"lineno\":213,\"end_lineno\":217,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:parse_stream_async", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:parse_stream_async", "target": "{\"lineno\":220,\"end_lineno\":224,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"parse_stream_async\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:aiohttp_session", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:aiohttp_session", "target": "{\"lineno\":620,\"end_lineno\":622,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aiohttp_session\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:logger", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:logger", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"logger\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:TIMEOUT_SECS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:TIMEOUT_SECS", "target": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"TIMEOUT_SECS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:MAX_SESSION_LIFETIME_SECS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:MAX_SESSION_LIFETIME_SECS", "target": "{\"lineno\":43,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"MAX_SESSION_LIFETIME_SECS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:MAX_CONNECTION_RETRIES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:MAX_CONNECTION_RETRIES", "target": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"MAX_CONNECTION_RETRIES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_thread_context", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_thread_context", "target": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"_thread_context\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:LLM_LOG", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:LLM_LOG", "target": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_LOG\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:api_key_to_header", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:api_key_to_header", "target": "{\"lineno\":71,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"api_key_to_header\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:os", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:platform", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:re", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:sys", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:threading", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"threading\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:time", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"time\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:contextlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"contextlib\",\"names\":[\"asynccontextmanager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['asynccontextmanager']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"contextlib\",\"names\":[\"asynccontextmanager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:enum", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['Enum']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"AsyncIterator\",\"Dict\",\"Iterator\",\"Optional\",\"Tuple\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['AsyncGenerator', 'AsyncIterator', 'Dict', 'Iterator', 'Optional', 'Tuple', 'Union', 'overload']", "target": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"AsyncIterator\",\"Dict\",\"Iterator\",\"Optional\",\"Tuple\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:urllib.parse", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlsplit\",\"urlunsplit\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['urlencode', 'urlsplit', 'urlunsplit']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlsplit\",\"urlunsplit\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:aiohttp", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:requests", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:sys.version_info:[3, 8]", "target": "{\"lineno\":30,\"end_lineno\":33,\"type_name\":\"ast.If\",\"tokens\":[\"sys.version_info\",[3,8]],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:logging", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.Import\",\"tokens\":[\"logging\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:openai", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.Import\",\"tokens\":[\"openai\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:openai", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"version\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['version']", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"version\"]}}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:register_provider", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:register_provider", "target": "{\"lineno\":24,\"end_lineno\":31,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_provider\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:create_llm_instance", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:create_llm_instance", "target": "{\"lineno\":34,\"end_lineno\":36,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"create_llm_instance\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLM_REGISTRY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:LLM_REGISTRY", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_REGISTRY\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:ast.Constant:\n@Time : 2023/12/19 17:26\n@Author : alexanderwu\n@File : llm_provider_registry.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19 17:26\\n@Author : alexanderwu\\n@File : llm_provider_registry.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:names:['BaseLLM']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM:_calc_usage", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : metagpt_api.py\n@Desc : MetaGPT LLM provider.\n", "target": "{\"lineno\":2,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : metagpt_api.py\\n@Desc : MetaGPT LLM provider.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:module:openai.types", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:names:['CompletionUsage']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:names:['LLMType']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:module:metagpt.provider", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:names:['OpenAILLM']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:names:['register_provider']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:_make_client_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:_calc_usage", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:openai.types", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['CompletionUsage']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.logs", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['logger']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['register_provider']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['OpenAILLM']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"Costs\",\"TokenCostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['Costs', 'TokenCostManager']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"Costs\",\"TokenCostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['count_message_tokens', 'count_string_tokens']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:ast.Constant:\nFilename: MetaGPT/metagpt/provider/human_provider.py\nCreated Date: Wednesday, November 8th 2023, 11:55:46 pm\nAuthor: garylin2099\n", "target": "{\"lineno\":1,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\nFilename: MetaGPT/metagpt/provider/human_provider.py\\nCreated Date: Wednesday, November 8th 2023, 11:55:46 pm\\nAuthor: garylin2099\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:names:['Optional']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:names:['LLMConfig']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:module:metagpt.logs", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:names:['logger']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:names:['BaseLLM']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/async_sse_client.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/async_sse_client.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/async_sse_client.py:names:['Any', 'Iterator']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterator\"]}}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:json", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:module:zhipuai", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai\",\"names\":[\"ZhipuAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['ZhipuAI']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai\",\"names\":[\"ZhipuAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:module:zhipuai.core._http_client", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai.core._http_client\",\"names\":[\"ZHIPUAI_DEFAULT_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['ZHIPUAI_DEFAULT_TIMEOUT']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai.core._http_client\",\"names\":[\"ZHIPUAI_DEFAULT_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:module:metagpt.provider.general_api_requestor", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['GeneralAPIRequestor']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:module:metagpt.provider.zhipuai.async_sse_client", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.async_sse_client\",\"names\":[\"AsyncSSEClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['AsyncSSEClient']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.async_sse_client\",\"names\":[\"AsyncSSEClient\"]}}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/postprocess/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:module:typing", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:names:['Union']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:module:metagpt.utils.repair_llm_raw_output", "target": "{\"lineno\":7,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"RepairType\",\"extract_content_from_output\",\"repair_llm_raw_output\",\"retry_parse_json_text\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:names:['RepairType', 'extract_content_from_output', 'repair_llm_raw_output', 'retry_parse_json_text']", "target": "{\"lineno\":7,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"RepairType\",\"extract_content_from_output\",\"repair_llm_raw_output\",\"retry_parse_json_text\"]}}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/llm_output_postprocess.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/postprocess/llm_output_postprocess.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/provider/postprocess/llm_output_postprocess.py", "target": "metagpt/provider/postprocess/llm_output_postprocess.py:llm_output_postprocess"}, {"predicate": "is", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:llm_output_postprocess", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:llm_output_postprocess", "target": "{\"lineno\":10,\"end_lineno\":20,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"llm_output_postprocess\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:module:typing", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:names:['Union']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:module:metagpt.provider.postprocess.base_postprocess_plugin", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.base_postprocess_plugin\",\"names\":[\"BasePostProcessPlugin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:names:['BasePostProcessPlugin']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.base_postprocess_plugin\",\"names\":[\"BasePostProcessPlugin\"]}}"}, {"predicate": "is", "source": "metagpt/management/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/management/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/management/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:58\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:58\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:Skill", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:Skill", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Assign\",\"tokens\":[\"Skill\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:ast.Constant:\n@Time : 2023/6/5 01:44\n@Author : alexanderwu\n@File : skill_manager.py\n@Modified By: mashenquan, 2023/8/20. Remove useless `llm`\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/5 01:44\\n@Author : alexanderwu\\n@File : skill_manager.py\\n@Modified By: mashenquan, 2023/8/20. Remove useless `llm`\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:module:metagpt.actions", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:names:['Action']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:module:metagpt.const", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PROMPT_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:names:['PROMPT_PATH']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PROMPT_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:module:metagpt.document_store.chromadb_store", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.chromadb_store\",\"names\":[\"ChromaStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:names:['ChromaStore']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.chromadb_store\",\"names\":[\"ChromaStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:module:metagpt.logs", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:names:['logger']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:__name__:__main__", "target": "{\"lineno\":77,\"end_lineno\":79,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_parse_tasks", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act_sp_with_cr", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act_write_code", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act_summarize", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act_code_plan_and_change", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_is_pass", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_coding_context", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_coding_doc", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_code_actions", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_summarize_actions", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_code_plan_and_change_action", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:IS_PASS_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:IS_PASS_PROMPT", "target": "{\"lineno\":50,\"end_lineno\":57,\"type_name\":\"ast.Assign\",\"tokens\":[\"IS_PASS_PROMPT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : engineer.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116:\n 1. Modify the data type of the `cause_by` value in the `Message` to a string, and utilize the new message\n distribution feature for message filtering.\n 2. Consolidate message reception and processing logic within `_observe`.\n 3. Fix bug: Add logic for handling asynchronous message processing when messages are not ready.\n 4. Supplemented the external transmission of internal messages.\n@Modified By: mashenquan, 2023-11-27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.5 of RFC 135, add incremental iteration functionality.\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\n of SummarizeCode.\n", "target": "{\"lineno\":3,\"end_lineno\":18,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : engineer.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116:\\n 1. Modify the data type of the `cause_by` value in the `Message` to a string, and utilize the new message\\n distribution feature for message filtering.\\n 2. Consolidate message reception and processing logic within `_observe`.\\n 3. Fix bug: Add logic for handling asynchronous message processing when messages are not ready.\\n 4. Supplemented the external transmission of internal messages.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.5 of RFC 135, add incremental iteration functionality.\\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\\n of SummarizeCode.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:__future__", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['annotations']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:json", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:collections", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['defaultdict']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:pathlib", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['Path']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:typing", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['Set']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"WriteCode\",\"WriteCodeReview\",\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['Action', 'WriteCode', 'WriteCodeReview', 'WriteTasks']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"WriteCode\",\"WriteCodeReview\",\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions.fix_bug", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['FixBug']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions.project_management_an", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['REFINED_TASK_LIST', 'TASK_LIST']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions.summarize_code", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['SummarizeCode']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions.write_code_plan_and_change_an", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"WriteCodePlanAndChange\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['WriteCodePlanAndChange']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"WriteCodePlanAndChange\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.const", "target": "{\"lineno\":32,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"REQUIREMENT_FILENAME\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['CODE_PLAN_AND_CHANGE_FILE_REPO', 'REQUIREMENT_FILENAME', 'SYSTEM_DESIGN_FILE_REPO', 'TASK_FILE_REPO']", "target": "{\"lineno\":32,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"REQUIREMENT_FILENAME\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.logs", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['logger']", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.roles", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['Role']", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.schema", "target": "{\"lineno\":40,\"end_lineno\":47,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['CodePlanAndChangeContext', 'CodeSummarizeContext', 'CodingContext', 'Document', 'Documents', 'Message']", "target": "{\"lineno\":40,\"end_lineno\":47,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.utils.common", "target": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"any_to_str_set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['any_to_name', 'any_to_str', 'any_to_str_set']", "target": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"any_to_str_set\"]}}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_write_test", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_run_code", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_debug_error", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_act", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_observe", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : qa_engineer.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, modify the data\n type of the `cause_by` value in the `Message` to a string, and utilize the new message filtering feature.\n@Modified By: mashenquan, 2023-11-27.\n 1. Following the think-act principle, solidify the task parameters when creating the\n WriteTest/RunCode/DebugError object, rather than passing them in when calling the run function.\n 2. According to Section 2.2.3.5.7 of RFC 135, change the method of transferring files from using the Message\n to using file references.\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\n of SummarizeCode.\n", "target": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : qa_engineer.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, modify the data\\n type of the `cause_by` value in the `Message` to a string, and utilize the new message filtering feature.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. Following the think-act principle, solidify the task parameters when creating the\\n WriteTest/RunCode/DebugError object, rather than passing them in when calling the run function.\\n 2. According to Section 2.2.3.5.7 of RFC 135, change the method of transferring files from using the Message\\n to using file references.\\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\\n of SummarizeCode.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.actions", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"DebugError\",\"RunCode\",\"WriteTest\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['DebugError', 'RunCode', 'WriteTest']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"DebugError\",\"RunCode\",\"WriteTest\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.actions.summarize_code", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['SummarizeCode']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.const", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_NONE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['MESSAGE_ROUTE_TO_NONE']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_NONE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.logs", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['logger']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.roles", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['Role']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.schema", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Message\",\"RunCodeContext\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['Document', 'Message', 'RunCodeContext', 'TestingContext']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Message\",\"RunCodeContext\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.utils.common", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str_set\",\"parse_recipient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['any_to_str_set', 'parse_recipient']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str_set\",\"parse_recipient\"]}}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:_react", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:ast.Constant:\n@Time : 2023/7/27\n@Author : mashenquan\n@File : teacher.py\n@Desc : Used by Agent Store\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/27\\n@Author : mashenquan\\n@File : teacher.py\\n@Desc : Used by Agent Store\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:re", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.actions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['UserRequirement']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.actions.write_teaching_plan", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_teaching_plan\",\"names\":[\"TeachingPlanBlock\",\"WriteTeachingPlanPart\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['TeachingPlanBlock', 'WriteTeachingPlanPart']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_teaching_plan\",\"names\":[\"TeachingPlanBlock\",\"WriteTeachingPlanPart\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.roles", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['Role']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.schema", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['Message']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.utils.common", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['any_to_str', 'awrite']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"awrite\"]}}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:_observe", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : product_manager.py\n@Modified By: mashenquan, 2023/11/27. Add `PrepareDocuments` action according to Section 2.2.3.5.1 of RFC 135.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : product_manager.py\\n@Modified By: mashenquan, 2023/11/27. Add `PrepareDocuments` action according to Section 2.2.3.5.1 of RFC 135.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\",\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:names:['UserRequirement', 'WritePRD']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\",\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:module:metagpt.actions.prepare_documents", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.prepare_documents\",\"names\":[\"PrepareDocuments\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:names:['PrepareDocuments']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.prepare_documents\",\"names\":[\"PrepareDocuments\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:module:metagpt.roles.role", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:names:['Role']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:module:metagpt.utils.common", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:names:['any_to_name']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:ast.Constant:\n@Time : 2023/5/25 17:21\n@Author : alexanderwu\n@File : sales.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 17:21\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['Field', 'model_validator']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:metagpt.actions", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\",\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['SearchAndSummarize', 'UserRequirement']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\",\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:metagpt.document_store.base_store", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['BaseStore']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:metagpt.roles", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['Role']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:metagpt.tools.search_engine", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['SearchEngine']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:_act_sp", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:ast.Constant:\n@Time : 2023/5/23 17:25\n@Author : alexanderwu\n@File : searcher.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 17:25\\n@Author : alexanderwu\\n@File : searcher.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['Optional']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:pydantic", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['Field', 'model_validator']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.actions", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['SearchAndSummarize']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.actions.action_node", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['ActionNode']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.actions.action_output", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['ActionOutput']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.logs", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['logger']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.roles", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['Role']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.schema", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['Message']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.tools.search_engine", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['SearchEngine']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:_plan", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:ast.Constant:\n@Time : 2023/8/7\n@Author : mashenquan\n@File : assistant.py\n@Desc : I am attempting to incorporate certain symbol concepts from UML into MetaGPT, enabling it to have the\n ability to freely construct flows through symbol concatenation. Simultaneously, I am also striving to\n make these symbols configurable and standardized, making the process of building flows more convenient.\n For more about `fork` node in activity diagrams, see: `https://www.uml-diagrams.org/activity-diagrams.html`\n This file defines a `fork` style meta role capable of generating arbitrary roles at runtime based on a\n configuration file.\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false\n indicates that further reasoning cannot continue.\n\n", "target": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/7\\n@Author : mashenquan\\n@File : assistant.py\\n@Desc : I am attempting to incorporate certain symbol concepts from UML into MetaGPT, enabling it to have the\\n ability to freely construct flows through symbol concatenation. Simultaneously, I am also striving to\\n make these symbols configurable and standardized, making the process of building flows more convenient.\\n For more about `fork` node in activity diagrams, see: `https://www.uml-diagrams.org/activity-diagrams.html`\\n This file defines a `fork` style meta role capable of generating arbitrary roles at runtime based on a\\n configuration file.\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false\\n indicates that further reasoning cannot continue.\\n\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:enum", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Enum']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:pathlib", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Path']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:typing", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Optional']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:pydantic", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Field']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.actions.skill_action", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.skill_action\",\"names\":[\"ArgumentsParingAction\",\"SkillAction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['ArgumentsParingAction', 'SkillAction']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.skill_action\",\"names\":[\"ArgumentsParingAction\",\"SkillAction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.actions.talk_action", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.talk_action\",\"names\":[\"TalkAction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['TalkAction']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.talk_action\",\"names\":[\"TalkAction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.learn.skill_loader", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"SkillsDeclaration\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['SkillsDeclaration']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"SkillsDeclaration\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.logs", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['logger']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.memory.brain_memory", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.brain_memory\",\"names\":[\"BrainMemory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['BrainMemory']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.brain_memory\",\"names\":[\"BrainMemory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.roles", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Role']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.schema", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Message']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/roles/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/roles/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:__all__", "target": "{\"lineno\":20,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.role", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Role']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.architect", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.architect\",\"names\":[\"Architect\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Architect']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.architect\",\"names\":[\"Architect\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.project_manager", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.project_manager\",\"names\":[\"ProjectManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['ProjectManager']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.project_manager\",\"names\":[\"ProjectManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.product_manager", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.product_manager\",\"names\":[\"ProductManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['ProductManager']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.product_manager\",\"names\":[\"ProductManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.engineer", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.engineer\",\"names\":[\"Engineer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Engineer']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.engineer\",\"names\":[\"Engineer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.qa_engineer", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.qa_engineer\",\"names\":[\"QaEngineer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['QaEngineer']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.qa_engineer\",\"names\":[\"QaEngineer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.searcher", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.searcher\",\"names\":[\"Searcher\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Searcher']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.searcher\",\"names\":[\"Searcher\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.sales", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.sales\",\"names\":[\"Sales\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Sales']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.sales\",\"names\":[\"Sales\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.customer_service", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.customer_service\",\"names\":[\"CustomerService\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['CustomerService']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.customer_service\",\"names\":[\"CustomerService\"]}}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_process_role_extra", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_reset", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_setting", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_check_actions", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_init_action", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_set_react_mode", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_watch", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_set_state", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_get_prefix", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_act", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_observe", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_react", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_act_by_order", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_plan_and_act", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_act_on_task", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:PREFIX_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:PREFIX_TEMPLATE", "target": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"PREFIX_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/role.py:CONSTRAINT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:CONSTRAINT_TEMPLATE", "target": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONSTRAINT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/role.py:STATE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:STATE_TEMPLATE", "target": "{\"lineno\":50,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"STATE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/role.py:ROLE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:ROLE_TEMPLATE", "target": "{\"lineno\":67,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"ROLE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:ast.Constant:\n@Time : 2023/5/11 14:42\n@Author : alexanderwu\n@File : role.py\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116:\n 1. Merge the `recv` functionality into the `_observe` function. Future message reading operations will be\n consolidated within the `_observe` function.\n 2. Standardize the message filtering for string label matching. Role objects can access the message labels\n they've subscribed to through the `subscribed_tags` property.\n 3. Move the message receive buffer from the global variable `self.rc.env.memory` to the role's private variable\n `self.rc.msg_buffer` for easier message identification and asynchronous appending of messages.\n 4. Standardize the way messages are passed: `publish_message` sends messages out, while `put_message` places\n messages into the Role object's private message receive buffer. There are no other message transmit methods.\n 5. Standardize the parameters for the `run` function: the `test_message` parameter is used for testing purposes\n only. In the normal workflow, you should use `publish_message` or `put_message` to transmit messages.\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\n functionality is to be consolidated into the `Environment` class.\n", "target": "{\"lineno\":3,\"end_lineno\":21,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:42\\n@Author : alexanderwu\\n@File : role.py\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116:\\n 1. Merge the `recv` functionality into the `_observe` function. Future message reading operations will be\\n consolidated within the `_observe` function.\\n 2. Standardize the message filtering for string label matching. Role objects can access the message labels\\n they've subscribed to through the `subscribed_tags` property.\\n 3. Move the message receive buffer from the global variable `self.rc.env.memory` to the role's private variable\\n `self.rc.msg_buffer` for easier message identification and asynchronous appending of messages.\\n 4. Standardize the way messages are passed: `publish_message` sends messages out, while `put_message` places\\n messages into the Role object's private message receive buffer. There are no other message transmit methods.\\n 5. Standardize the parameters for the `run` function: the `test_message` parameter is used for testing purposes\\n only. In the normal workflow, you should use `publish_message` or `put_message` to transmit messages.\\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\\n functionality is to be consolidated into the `Environment` class.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:__future__", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['annotations']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:enum", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Enum']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:typing", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"TYPE_CHECKING\",\"Iterable\",\"Optional\",\"Set\",\"Type\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['TYPE_CHECKING', 'Iterable', 'Optional', 'Set', 'Type', 'Union']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"TYPE_CHECKING\",\"Iterable\",\"Optional\",\"Set\",\"Type\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:pydantic", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['BaseModel', 'ConfigDict', 'Field', 'SerializeAsAny', 'model_validator']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.actions", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Action', 'ActionOutput']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.actions.action_node", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['ActionNode']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.actions.add_requirement", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['UserRequirement']", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.context_mixin", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['ContextMixin']", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.logs", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['logger']", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.memory", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Memory']", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.provider", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"HumanProvider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['HumanProvider']", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"HumanProvider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.schema", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"MessageQueue\",\"SerializationMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Message', 'MessageQueue', 'SerializationMixin']", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"MessageQueue\",\"SerializationMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.strategy.planner", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.planner\",\"names\":[\"Planner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Planner']", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.planner\",\"names\":[\"Planner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.utils.common", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"role_raise_decorator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['any_to_name', 'any_to_str', 'role_raise_decorator']", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"role_raise_decorator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['ProjectRepo']", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.utils.repair_llm_raw_output", "target": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"extract_state_value_from_output\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['extract_state_value_from_output']", "target": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"extract_state_value_from_output\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:TYPE_CHECKING", "target": "{\"lineno\":43,\"end_lineno\":44,\"type_name\":\"ast.If\",\"tokens\":[\"TYPE_CHECKING\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:ast.Call:RoleContext.model_rebuild", "target": "{\"lineno\":605,\"end_lineno\":605,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Call\",\"RoleContext.model_rebuild\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:ast.Constant:\n@Time : 2023/9/21 14:10:05\n@Author : Stitch-z\n@File : invoice_ocr_assistant.py\n", "target": "{\"lineno\":4,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 14:10:05\\n@Author : Stitch-z\\n@File : invoice_ocr_assistant.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:json", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:pathlib", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['Path']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:typing", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['Optional']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:pandas as pd", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:pydantic", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['BaseModel']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.actions.invoice_ocr", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.invoice_ocr\",\"names\":[\"GenerateTable\",\"InvoiceOCR\",\"ReplyQuestion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['GenerateTable', 'InvoiceOCR', 'ReplyQuestion']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.invoice_ocr\",\"names\":[\"GenerateTable\",\"InvoiceOCR\",\"ReplyQuestion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.prompts.invoice_ocr", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"INVOICE_OCR_SUCCESS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['INVOICE_OCR_SUCCESS']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"INVOICE_OCR_SUCCESS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.roles.role", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['Role', 'RoleReactMode']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.schema", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['Message']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : architect.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : architect.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:module:metagpt.actions", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:names:['WritePRD']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:module:metagpt.actions.design_api", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:names:['WriteDesign']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:module:metagpt.roles.role", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:names:['Role']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:DESC", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:DESC", "target": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"DESC\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:ast.Constant:\n@Time : 2023/5/25 17:21\n@Author : alexanderwu\n@File : sales.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 17:21\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:names:['Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:module:metagpt.document_store.base_store", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:names:['BaseStore']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:module:metagpt.roles", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Sales\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:names:['Sales']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Sales\"]}}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:ast.Constant:\n@Time : 2023/9/13 12:23\n@Author : femto Zheng\n@File : sk_agent.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, utilize the new message\n distribution feature for message filtering.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:23\\n@Author : femto Zheng\\n@File : sk_agent.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, utilize the new message\\n distribution feature for message filtering.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Any', 'Callable', 'Union']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Field']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:semantic_kernel", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel\",\"names\":[\"Kernel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Kernel']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel\",\"names\":[\"Kernel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning\",\"names\":[\"SequentialPlanner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['SequentialPlanner']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning\",\"names\":[\"SequentialPlanner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning.action_planner.action_planner", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.action_planner.action_planner\",\"names\":[\"ActionPlanner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['ActionPlanner']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.action_planner.action_planner\",\"names\":[\"ActionPlanner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning.basic_planner", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.basic_planner\",\"names\":[\"BasicPlanner\",\"Plan\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['BasicPlanner', 'Plan']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.basic_planner\",\"names\":[\"BasicPlanner\",\"Plan\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.actions", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['UserRequirement']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.actions.execute_task", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.execute_task\",\"names\":[\"ExecuteTask\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['ExecuteTask']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.execute_task\",\"names\":[\"ExecuteTask\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.roles", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Role']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.schema", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Message']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.utils.make_sk_kernel", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.make_sk_kernel\",\"names\":[\"make_sk_kernel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['make_sk_kernel']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.make_sk_kernel\",\"names\":[\"make_sk_kernel\"]}}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:PREFIX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:PREFIX", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Assign\",\"tokens\":[\"PREFIX\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:FORMAT_INSTRUCTIONS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:FORMAT_INSTRUCTIONS", "target": "{\"lineno\":11,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_INSTRUCTIONS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:SUFFIX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:SUFFIX", "target": "{\"lineno\":21,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUFFIX\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:ast.Constant:\n@Time : 2023/5/18 22:43\n@Author : alexanderwu\n@File : prompt.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/18 22:43\\n@Author : alexanderwu\\n@File : prompt.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:module:enum", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:names:['Enum']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_handle_directory", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:datetime", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['datetime']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['Dict']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.actions.write_tutorial", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_tutorial\",\"names\":[\"WriteContent\",\"WriteDirectory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['WriteContent', 'WriteDirectory']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_tutorial\",\"names\":[\"WriteContent\",\"WriteDirectory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.const", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TUTORIAL_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['TUTORIAL_PATH']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TUTORIAL_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.roles.role", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['Role', 'RoleReactMode']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.schema", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['Message']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.utils.file", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['File']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:ast.Constant:\n@Time : 2023/5/11 15:04\n@Author : alexanderwu\n@File : project_manager.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 15:04\\n@Author : alexanderwu\\n@File : project_manager.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:module:metagpt.actions", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:names:['WriteTasks']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:module:metagpt.actions.design_api", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:names:['WriteDesign']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:module:metagpt.roles.role", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:names:['Role']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:ast.Constant:\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\n", "target": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:asyncio", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:re", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['BaseModel']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.actions", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"CollectLinks\",\"ConductResearch\",\"WebBrowseAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['Action', 'CollectLinks', 'ConductResearch', 'WebBrowseAndSummarize']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"CollectLinks\",\"ConductResearch\",\"WebBrowseAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.actions.research", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"get_research_system_text\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['get_research_system_text']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"get_research_system_text\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.const", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"RESEARCH_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['RESEARCH_PATH']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"RESEARCH_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.roles.role", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['Role', 'RoleReactMode']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.schema", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['Message']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:__name__:__main__", "target": "{\"lineno\":119,\"end_lineno\":126,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/ci/code_interpreter.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/ci/code_interpreter.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/ci/code_interpreter.py", "target": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter"}, {"predicate": "is", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter", "target": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter", "target": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:working_memory"}, {"predicate": "has_class_method", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter", "target": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:_act_on_task"}, {"predicate": "has_class_method", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter", "target": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:_write_and_exec_code"}, {"predicate": "has_class_method", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter", "target": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:_write_code"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter", "target": "{\"lineno\":16,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeInterpreter\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:working_memory", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:_act_on_task", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:_write_and_exec_code", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/ci/code_interpreter.py:CodeInterpreter:_write_code", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:module:__future__", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:names:['annotations']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:module:pydantic", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:names:['Field']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:module:metagpt.actions.ci.ask_review", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.ask_review\",\"names\":[\"ReviewConst\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:names:['ReviewConst']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.ask_review\",\"names\":[\"ReviewConst\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:module:metagpt.actions.ci.execute_nb_code", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.execute_nb_code\",\"names\":[\"ExecuteNbCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:names:['ExecuteNbCode']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.execute_nb_code\",\"names\":[\"ExecuteNbCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:module:metagpt.actions.ci.write_analysis_code", "target": "{\"lineno\":7,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"WriteCodeWithoutTools\",\"WriteCodeWithTools\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:names:['WriteCodeWithoutTools', 'WriteCodeWithTools']", "target": "{\"lineno\":7,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"WriteCodeWithoutTools\",\"WriteCodeWithTools\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:module:metagpt.logs", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:names:['logger']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:module:metagpt.roles", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:names:['Role']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:module:metagpt.schema", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Task\",\"TaskResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/code_interpreter.py:names:['Message', 'Task', 'TaskResult']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Task\",\"TaskResult\"]}}"}, {"predicate": "is", "source": "metagpt/roles/ci/ml_engineer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/ci/ml_engineer.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/ci/ml_engineer.py", "target": "metagpt/roles/ci/ml_engineer.py:MLEngineer"}, {"predicate": "is", "source": "metagpt/roles/ci/ml_engineer.py:MLEngineer", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/roles/ci/ml_engineer.py:MLEngineer", "target": "metagpt/roles/ci/ml_engineer.py:MLEngineer:_write_code"}, {"predicate": "has_class_method", "source": "metagpt/roles/ci/ml_engineer.py:MLEngineer", "target": "metagpt/roles/ci/ml_engineer.py:MLEngineer:_update_data_columns"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:MLEngineer", "target": "{\"lineno\":10,\"end_lineno\":64,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MLEngineer\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/ci/ml_engineer.py:MLEngineer:_write_code", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/ci/ml_engineer.py:MLEngineer:_update_data_columns", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:module:metagpt.actions.ci.debug_code", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.debug_code\",\"names\":[\"DebugCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:names:['DebugCode']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.debug_code\",\"names\":[\"DebugCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:module:metagpt.actions.ci.execute_nb_code", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.execute_nb_code\",\"names\":[\"ExecuteNbCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:names:['ExecuteNbCode']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.execute_nb_code\",\"names\":[\"ExecuteNbCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:module:metagpt.actions.ci.ml_action", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.ml_action\",\"names\":[\"UpdateDataColumns\",\"WriteCodeWithToolsML\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:names:['UpdateDataColumns', 'WriteCodeWithToolsML']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.ml_action\",\"names\":[\"UpdateDataColumns\",\"WriteCodeWithToolsML\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:module:metagpt.logs", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:names:['logger']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:module:metagpt.roles.ci.code_interpreter", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.ci.code_interpreter\",\"names\":[\"CodeInterpreter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:names:['CodeInterpreter']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.ci.code_interpreter\",\"names\":[\"CodeInterpreter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:module:metagpt.tools.tool_type", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:names:['ToolType']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_type\",\"names\":[\"ToolType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:module:metagpt.utils.common", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/ci/ml_engineer.py:names:['any_to_str']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\"]}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/serialize.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:actionoutout_schema_to_mapping"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:actionoutput_mapping_to_str"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:actionoutput_str_to_mapping"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:serialize_message"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:deserialize_message"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:actionoutout_schema_to_mapping", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:actionoutout_schema_to_mapping", "target": "{\"lineno\":11,\"end_lineno\":40,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutout_schema_to_mapping\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:actionoutput_mapping_to_str", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:actionoutput_mapping_to_str", "target": "{\"lineno\":43,\"end_lineno\":47,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutput_mapping_to_str\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:actionoutput_str_to_mapping", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:actionoutput_str_to_mapping", "target": "{\"lineno\":50,\"end_lineno\":57,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutput_str_to_mapping\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:serialize_message", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:serialize_message", "target": "{\"lineno\":60,\"end_lineno\":71,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"serialize_message\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:deserialize_message", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:deserialize_message", "target": "{\"lineno\":74,\"end_lineno\":83,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"deserialize_message\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:copy", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"copy\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:pickle", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"pickle\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:module:metagpt.utils.common", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:names:['import_class']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:__str__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:ast.Constant:\n@Time : 2024/1/8\n@Author : mashenquan\n@File : project_repo.py\n@Desc : Wrapper for GitRepository and FileRepository of project.\n Implementation of Chapter 4.6 of https://deepwisdom.feishu.cn/wiki/CUK4wImd7id9WlkQBNscIe9cnqh\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/8\\n@Author : mashenquan\\n@File : project_repo.py\\n@Desc : Wrapper for GitRepository and FileRepository of project.\\n Implementation of Chapter 4.6 of https://deepwisdom.feishu.cn/wiki/CUK4wImd7id9WlkQBNscIe9cnqh\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:__future__", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['annotations']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:pathlib", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['Path']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CLASS_VIEW_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\",\"CODE_SUMMARIES_FILE_REPO\",\"CODE_SUMMARIES_PDF_FILE_REPO\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"DATA_API_DESIGN_FILE_REPO\",\"DOCS_FILE_REPO\",\"GRAPH_REPO_FILE_REPO\",\"PRD_PDF_FILE_REPO\",\"PRDS_FILE_REPO\",\"REQUIREMENT_FILENAME\",\"RESOURCES_FILE_REPO\",\"SD_OUTPUT_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"SYSTEM_DESIGN_PDF_FILE_REPO\",\"TASK_FILE_REPO\",\"TASK_PDF_FILE_REPO\",\"TEST_CODES_FILE_REPO\",\"TEST_OUTPUTS_FILE_REPO\",\"VISUAL_GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['CLASS_VIEW_FILE_REPO', 'CODE_PLAN_AND_CHANGE_FILE_REPO', 'CODE_PLAN_AND_CHANGE_PDF_FILE_REPO', 'CODE_SUMMARIES_FILE_REPO', 'CODE_SUMMARIES_PDF_FILE_REPO', 'COMPETITIVE_ANALYSIS_FILE_REPO', 'DATA_API_DESIGN_FILE_REPO', 'DOCS_FILE_REPO', 'GRAPH_REPO_FILE_REPO', 'PRD_PDF_FILE_REPO', 'PRDS_FILE_REPO', 'REQUIREMENT_FILENAME', 'RESOURCES_FILE_REPO', 'SD_OUTPUT_FILE_REPO', 'SEQ_FLOW_FILE_REPO', 'SYSTEM_DESIGN_FILE_REPO', 'SYSTEM_DESIGN_PDF_FILE_REPO', 'TASK_FILE_REPO', 'TASK_PDF_FILE_REPO', 'TEST_CODES_FILE_REPO', 'TEST_OUTPUTS_FILE_REPO', 'VISUAL_GRAPH_REPO_FILE_REPO']", "target": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CLASS_VIEW_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\",\"CODE_SUMMARIES_FILE_REPO\",\"CODE_SUMMARIES_PDF_FILE_REPO\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"DATA_API_DESIGN_FILE_REPO\",\"DOCS_FILE_REPO\",\"GRAPH_REPO_FILE_REPO\",\"PRD_PDF_FILE_REPO\",\"PRDS_FILE_REPO\",\"REQUIREMENT_FILENAME\",\"RESOURCES_FILE_REPO\",\"SD_OUTPUT_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"SYSTEM_DESIGN_PDF_FILE_REPO\",\"TASK_FILE_REPO\",\"TASK_PDF_FILE_REPO\",\"TEST_CODES_FILE_REPO\",\"TEST_OUTPUTS_FILE_REPO\",\"VISUAL_GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:metagpt.utils.file_repository", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['FileRepository']", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:metagpt.utils.git_repository", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['GitRepository']", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "is", "source": "metagpt/utils/mmdc_playwright.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/mmdc_playwright.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/mmdc_playwright.py", "target": "metagpt/utils/mmdc_playwright.py:mermaid_to_file"}, {"predicate": "is", "source": "metagpt/utils/mmdc_playwright.py:mermaid_to_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:mermaid_to_file", "target": "{\"lineno\":17,\"end_lineno\":121,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : Steven Lee\n@File : mmdc_playwright.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : Steven Lee\\n@File : mmdc_playwright.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:os", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:module:urllib.parse", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:names:['urljoin']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:module:playwright.async_api", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:names:['async_playwright']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:ast.Constant:\n@Time : 2023/11/22\n@Author : mashenquan\n@File : dependency_file.py\n@Desc: Implementation of the dependency file described in Section 2.2.3.2 of RFC 135.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/22\\n@Author : mashenquan\\n@File : dependency_file.py\\n@Desc: Implementation of the dependency file described in Section 2.2.3.2 of RFC 135.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:re", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['Set']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:aiofiles", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:metagpt.utils.common", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['aread']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['handle_exception']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/utils/make_sk_kernel.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/make_sk_kernel.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/make_sk_kernel.py", "target": "metagpt/utils/make_sk_kernel.py:make_sk_kernel"}, {"predicate": "is", "source": "metagpt/utils/make_sk_kernel.py:make_sk_kernel", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:make_sk_kernel", "target": "{\"lineno\":19,\"end_lineno\":32,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"make_sk_kernel\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:ast.Constant:\n@Time : 2023/9/13 12:29\n@Author : femto Zheng\n@File : make_sk_kernel.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:29\\n@Author : femto Zheng\\n@File : make_sk_kernel.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:semantic_kernel as sk", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"semantic_kernel as sk\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:module:semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion", "target": "{\"lineno\":9,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion\",\"names\":[\"AzureChatCompletion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:names:['AzureChatCompletion']", "target": "{\"lineno\":9,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion\",\"names\":[\"AzureChatCompletion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:module:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion", "target": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion\",\"names\":[\"OpenAIChatCompletion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:names:['OpenAIChatCompletion']", "target": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion\",\"names\":[\"OpenAIChatCompletion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:module:metagpt.config2", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:names:['config']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/token_counter.py", "target": "metagpt/utils/token_counter.py:count_message_tokens"}, {"predicate": "has_function", "source": "metagpt/utils/token_counter.py", "target": "metagpt/utils/token_counter.py:count_string_tokens"}, {"predicate": "has_function", "source": "metagpt/utils/token_counter.py", "target": "metagpt/utils/token_counter.py:get_max_completion_tokens"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:count_message_tokens", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:count_message_tokens", "target": "{\"lineno\":65,\"end_lineno\":127,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"count_message_tokens\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:count_string_tokens", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:count_string_tokens", "target": "{\"lineno\":130,\"end_lineno\":146,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"count_string_tokens\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:get_max_completion_tokens", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:get_max_completion_tokens", "target": "{\"lineno\":149,\"end_lineno\":161,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_max_completion_tokens\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:TOKEN_COSTS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:TOKEN_COSTS", "target": "{\"lineno\":15,\"end_lineno\":38,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOKEN_COSTS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:TOKEN_MAX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:TOKEN_MAX", "target": "{\"lineno\":40,\"end_lineno\":62,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOKEN_MAX\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:ast.Constant:\n@Time : 2023/5/18 00:40\n@Author : alexanderwu\n@File : token_counter.py\nref1: https://openai.com/pricing\nref2: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\nref3: https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/llm/token_counter.py\nref4: https://github.com/hwchase17/langchain/blob/master/langchain/chat_models/openai.py\nref5: https://ai.google.dev/models/gemini\n", "target": "{\"lineno\":3,\"end_lineno\":12,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/18 00:40\\n@Author : alexanderwu\\n@File : token_counter.py\\nref1: https://openai.com/pricing\\nref2: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\\nref3: https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/llm/token_counter.py\\nref4: https://github.com/hwchase17/langchain/blob/master/langchain/chat_models/openai.py\\nref5: https://ai.google.dev/models/gemini\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:tiktoken", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"tiktoken\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/embedding.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/embedding.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/embedding.py", "target": "metagpt/utils/embedding.py:get_embedding"}, {"predicate": "is", "source": "metagpt/utils/embedding.py:get_embedding", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:get_embedding", "target": "{\"lineno\":13,\"end_lineno\":16,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_embedding\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:ast.Constant:\n@Time : 2024/1/4 20:58\n@Author : alexanderwu\n@File : embedding.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 20:58\\n@Author : alexanderwu\\n@File : embedding.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:module:langchain_community.embeddings", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_community.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:names:['OpenAIEmbeddings']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_community.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:module:metagpt.config2", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:names:['config']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_case_sensitivity", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_case_sensitivity", "target": "{\"lineno\":24,\"end_lineno\":41,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_case_sensitivity\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_special_character_missing", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_special_character_missing", "target": "{\"lineno\":44,\"end_lineno\":64,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_special_character_missing\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_required_key_pair_missing", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_required_key_pair_missing", "target": "{\"lineno\":67,\"end_lineno\":105,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_required_key_pair_missing\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_json_format", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_json_format", "target": "{\"lineno\":108,\"end_lineno\":139,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_json_format\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:_repair_llm_raw_output", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:_repair_llm_raw_output", "target": "{\"lineno\":142,\"end_lineno\":153,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_repair_llm_raw_output\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_llm_raw_output", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_llm_raw_output", "target": "{\"lineno\":156,\"end_lineno\":177,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_llm_raw_output\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_invalid_json", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_invalid_json", "target": "{\"lineno\":180,\"end_lineno\":227,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_invalid_json\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:run_after_exp_and_passon_next_retry", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:run_after_exp_and_passon_next_retry", "target": "{\"lineno\":230,\"end_lineno\":264,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"run_after_exp_and_passon_next_retry\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:retry_parse_json_text", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:retry_parse_json_text", "target": "{\"lineno\":272,\"end_lineno\":286,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"retry_parse_json_text\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:extract_content_from_output", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:extract_content_from_output", "target": "{\"lineno\":289,\"end_lineno\":319,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"extract_content_from_output\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:extract_state_value_from_output", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:extract_state_value_from_output", "target": "{\"lineno\":322,\"end_lineno\":335,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"extract_state_value_from_output\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:copy", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"copy\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:enum", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['Enum']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['Callable', 'Union']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:regex as re", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"regex as re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:tenacity", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"retry\",\"stop_after_attempt\",\"wait_fixed\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['RetryCallState', 'retry', 'stop_after_attempt', 'wait_fixed']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"retry\",\"stop_after_attempt\",\"wait_fixed\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.config2", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['config']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.utils.custom_decoder", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.custom_decoder\",\"names\":[\"CustomDecoder\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['CustomDecoder']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.custom_decoder\",\"names\":[\"CustomDecoder\"]}}"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/mermaid.py", "target": "metagpt/utils/mermaid.py:mermaid_to_file"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py:mermaid_to_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:mermaid_to_file", "target": "{\"lineno\":19,\"end_lineno\":90,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py:MMC1", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:MMC1", "target": "{\"lineno\":93,\"end_lineno\":125,\"type_name\":\"ast.Assign\",\"tokens\":[\"MMC1\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py:MMC2", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:MMC2", "target": "{\"lineno\":127,\"end_lineno\":145,\"type_name\":\"ast.Assign\",\"tokens\":[\"MMC2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:ast.Constant:\n@Time : 2023/7/4 10:53\n@Author : alexanderwu alitrack\n@File : mermaid.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/4 10:53\\n@Author : alexanderwu alitrack\\n@File : mermaid.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:asyncio", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:os", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:module:pathlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:names:['Path']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:aiofiles", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:module:metagpt.config2", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:names:['config']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:module:metagpt.logs", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:module:metagpt.utils.common", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"check_cmd_exists\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:names:['check_cmd_exists']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"check_cmd_exists\"]}}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:get_html_content", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:get_html_content", "target": "{\"lineno\":42,\"end_lineno\":45,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_html_content\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:_get_soup", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:_get_soup", "target": "{\"lineno\":48,\"end_lineno\":54,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_get_soup\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:__future__", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['annotations']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:typing", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['Generator', 'Optional']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:urllib.parse", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\",\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['urljoin', 'urlparse']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\",\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:bs4", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"bs4\",\"names\":[\"BeautifulSoup\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['BeautifulSoup']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"bs4\",\"names\":[\"BeautifulSoup\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:pydantic", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"PrivateAttr\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['BaseModel', 'PrivateAttr']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"PrivateAttr\"]}}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_get_class_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_refine_name", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : visualize_graph.py\n@Desc : Visualization tool to visualize the class diagrams or sequence diagrams of the graph repository.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : visualize_graph.py\\n@Desc : Visualization tool to visualize the class diagrams or sequence diagrams of the graph repository.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:re", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:abc", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['ABC']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['List', 'Optional']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:pydantic", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.const", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['AGGREGATION', 'COMPOSITION', 'GENERALIZATION']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.schema", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['UMLClassView']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.common", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['split_namespace']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.di_graph_repository", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['DiGraphRepository']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.graph_repository", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['GraphKeyword', 'GraphRepository']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "is", "source": "metagpt/utils/special_tokens.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/special_tokens.py", "target": "python"}, {"predicate": "is", "source": "metagpt/utils/special_tokens.py:MSG_SEP", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/special_tokens.py:MSG_SEP", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Assign\",\"tokens\":[\"MSG_SEP\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/special_tokens.py:FILENAME_CODE_SEP", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/special_tokens.py:FILENAME_CODE_SEP", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Assign\",\"tokens\":[\"FILENAME_CODE_SEP\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/ahttp_client.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/ahttp_client.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/ahttp_client.py", "target": "metagpt/utils/ahttp_client.py:apost"}, {"predicate": "has_function", "source": "metagpt/utils/ahttp_client.py", "target": "metagpt/utils/ahttp_client.py:apost_stream"}, {"predicate": "is", "source": "metagpt/utils/ahttp_client.py:apost", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:apost", "target": "{\"lineno\":11,\"end_lineno\":28,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"apost\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/ahttp_client.py:apost_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:apost_stream", "target": "{\"lineno\":31,\"end_lineno\":49,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"apost_stream\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:module:typing", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Mapping\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:names:['Any', 'Mapping', 'Optional', 'Union']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Mapping\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:aiohttp", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:module:aiohttp.client", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp.client\",\"names\":[\"DEFAULT_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:names:['DEFAULT_TIMEOUT']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp.client\",\"names\":[\"DEFAULT_TIMEOUT\"]}}"}, {"predicate": "is", "source": "metagpt/utils/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/utils/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:__all__", "target": "{\"lineno\":18,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:ast.Constant:\n@Time : 2023/4/29 15:50\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:50\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:module:metagpt.utils.read_document", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.read_document\",\"names\":[\"read_docx\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:names:['read_docx']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.read_document\",\"names\":[\"read_docx\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:module:metagpt.utils.singleton", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.singleton\",\"names\":[\"Singleton\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:names:['Singleton']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.singleton\",\"names\":[\"Singleton\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\",\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:names:['TOKEN_COSTS', 'count_message_tokens', 'count_string_tokens']", "target": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\",\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"predicate": "is", "source": "metagpt/utils/mmdc_ink.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/mmdc_ink.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/mmdc_ink.py", "target": "metagpt/utils/mmdc_ink.py:mermaid_to_file"}, {"predicate": "is", "source": "metagpt/utils/mmdc_ink.py:mermaid_to_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:mermaid_to_file", "target": "{\"lineno\":15,\"end_lineno\":41,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : alitrack\n@File : mermaid.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : alitrack\\n@File : mermaid.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:base64", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:module:aiohttp", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp\",\"names\":[\"ClientError\",\"ClientSession\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:names:['ClientError', 'ClientSession']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp\",\"names\":[\"ClientError\",\"ClientSession\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:module:metagpt.logs", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:names:['logger']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : di_graph_repository.py\n@Desc : Graph repository based on DiGraph.\n This script defines a graph repository class based on a directed graph (DiGraph), providing functionalities\n specific to handling directed relationships between entities.\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : di_graph_repository.py\\n@Desc : Graph repository based on DiGraph.\\n This script defines a graph repository class based on a directed graph (DiGraph), providing functionalities\\n specific to handling directed relationships between entities.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:__future__", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['annotations']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:json", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:pathlib", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['Path']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['List']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:networkx", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"networkx\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:metagpt.utils.common", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['aread', 'awrite']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:metagpt.utils.graph_repository", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['SPO', 'GraphRepository']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:ast.Constant:\n@Time : 2024/1/4 10:18\n@Author : alexanderwu\n@File : YamlModel.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 10:18\\n@Author : alexanderwu\\n@File : YamlModel.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:module:pathlib", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:names:['Path']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:names:['Dict', 'Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:yaml", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:names:['BaseModel', 'model_validator']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : openai.py\n@Desc : mashenquan, 2023/8/28. Separate the `CostManager` class to support user-level cost accounting.\n", "target": "{\"lineno\":2,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : openai.py\\n@Desc : mashenquan, 2023/8/28. Separate the `CostManager` class to support user-level cost accounting.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"NamedTuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:names:['NamedTuple']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"NamedTuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:names:['BaseModel']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:names:['TOKEN_COSTS']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : file.py\n@Describe : General file operations.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : file.py\\n@Describe : General file operations.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:aiofiles", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:names:['handle_exception']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/utils/save_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/save_code.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/save_code.py", "target": "metagpt/utils/save_code.py:save_code_file"}, {"predicate": "is", "source": "metagpt/utils/save_code.py:save_code_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/save_code.py:save_code_file", "target": "{\"lineno\":13,\"end_lineno\":40,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"save_code_file\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/save_code.py:os", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/save_code.py:nbformat", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"nbformat\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/save_code.py:module:metagpt.const", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/save_code.py:names:['DATA_PATH']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/save_code.py:module:metagpt.utils.common", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"write_json_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/save_code.py:names:['write_json_file']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"write_json_file\"]}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/common.py:check_cmd_exists", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:check_cmd_exists", "target": "{\"lineno\":44,\"end_lineno\":54,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"check_cmd_exists\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:require_python_version", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:require_python_version", "target": "{\"lineno\":57,\"end_lineno\":60,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"require_python_version\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:print_members", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:print_members", "target": "{\"lineno\":325,\"end_lineno\":341,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"print_members\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:get_function_schema", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:get_function_schema", "target": "{\"lineno\":344,\"end_lineno\":349,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_function_schema\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:parse_recipient", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:parse_recipient", "target": "{\"lineno\":352,\"end_lineno\":362,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_recipient\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:create_func_call_config", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:create_func_call_config", "target": "{\"lineno\":365,\"end_lineno\":372,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"create_func_call_config\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:remove_comments", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:remove_comments", "target": "{\"lineno\":375,\"end_lineno\":387,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_comments\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:get_class_name", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:get_class_name", "target": "{\"lineno\":390,\"end_lineno\":392,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_class_name\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:any_to_str", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:any_to_str", "target": "{\"lineno\":395,\"end_lineno\":402,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_str\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:any_to_str_set", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:any_to_str_set", "target": "{\"lineno\":405,\"end_lineno\":420,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_str_set\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:is_send_to", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:is_send_to", "target": "{\"lineno\":423,\"end_lineno\":431,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_send_to\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:any_to_name", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:any_to_name", "target": "{\"lineno\":434,\"end_lineno\":442,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_name\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:concat_namespace", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:concat_namespace", "target": "{\"lineno\":445,\"end_lineno\":458,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"concat_namespace\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:split_namespace", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:split_namespace", "target": "{\"lineno\":461,\"end_lineno\":478,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"split_namespace\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:auto_namespace", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:auto_namespace", "target": "{\"lineno\":481,\"end_lineno\":512,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"auto_namespace\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:add_affix", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:add_affix", "target": "{\"lineno\":515,\"end_lineno\":541,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"add_affix\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:remove_affix", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:remove_affix", "target": "{\"lineno\":544,\"end_lineno\":567,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_affix\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:general_after_log", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:general_after_log", "target": "{\"lineno\":570,\"end_lineno\":600,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"general_after_log\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:read_json_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:read_json_file", "target": "{\"lineno\":603,\"end_lineno\":612,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_json_file\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:write_json_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:write_json_file", "target": "{\"lineno\":615,\"end_lineno\":621,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"write_json_file\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:read_csv_to_list", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:read_csv_to_list", "target": "{\"lineno\":624,\"end_lineno\":644,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_csv_to_list\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:import_class", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:import_class", "target": "{\"lineno\":647,\"end_lineno\":650,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"import_class\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:import_class_inst", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:import_class_inst", "target": "{\"lineno\":653,\"end_lineno\":656,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"import_class_inst\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:format_trackback_info", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:format_trackback_info", "target": "{\"lineno\":659,\"end_lineno\":660,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"format_trackback_info\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:serialize_decorator", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:serialize_decorator", "target": "{\"lineno\":663,\"end_lineno\":674,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"serialize_decorator\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:role_raise_decorator", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:role_raise_decorator", "target": "{\"lineno\":677,\"end_lineno\":704,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"role_raise_decorator\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:aread", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:aread", "target": "{\"lineno\":708,\"end_lineno\":712,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aread\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:awrite", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:awrite", "target": "{\"lineno\":715,\"end_lineno\":720,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"awrite\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:read_file_block", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:read_file_block", "target": "{\"lineno\":723,\"end_lineno\":737,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"read_file_block\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:list_files", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:list_files", "target": "{\"lineno\":740,\"end_lineno\":754,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"list_files\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:parse_json_code_block", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:parse_json_code_block", "target": "{\"lineno\":757,\"end_lineno\":759,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_json_code_block\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:remove_white_spaces", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:remove_white_spaces", "target": "{\"lineno\":762,\"end_lineno\":772,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_white_spaces\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:aread_bin", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:aread_bin", "target": "{\"lineno\":775,\"end_lineno\":793,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aread_bin\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:awrite_bin", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:awrite_bin", "target": "{\"lineno\":796,\"end_lineno\":811,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"awrite_bin\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:is_coroutine_func", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:is_coroutine_func", "target": "{\"lineno\":814,\"end_lineno\":815,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_coroutine_func\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:load_mc_skills_code", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:load_mc_skills_code", "target": "{\"lineno\":818,\"end_lineno\":825,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"load_mc_skills_code\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:encode_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:encode_image", "target": "{\"lineno\":828,\"end_lineno\":839,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"encode_image\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:decode_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:decode_image", "target": "{\"lineno\":842,\"end_lineno\":853,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"decode_image\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:ast.Constant:\n@Time : 2023/4/29 16:07\n@Author : alexanderwu\n@File : common.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\n Add generic class-to-string and object-to-string conversion functionality.\n@Modified By: mashenquan, 2023/11/27. Bug fix: `parse_recipient` failed to parse the recipient in certain GPT-3.5\n responses.\n", "target": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 16:07\\n@Author : alexanderwu\\n@File : common.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\\n Add generic class-to-string and object-to-string conversion functionality.\\n@Modified By: mashenquan, 2023/11/27. Bug fix: `parse_recipient` failed to parse the recipient in certain GPT-3.5\\n responses.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:__future__", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['annotations']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:ast", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:base64", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:contextlib", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"contextlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:csv", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"csv\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:importlib", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:inspect", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.Import\",\"tokens\":[\"inspect\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:json", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:os", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:platform", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:re", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:sys", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:traceback", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:typing", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.Import\",\"tokens\":[\"typing\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:io", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"io\",\"names\":[\"BytesIO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['BytesIO']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"io\",\"names\":[\"BytesIO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:pathlib", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['Path']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:typing", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"List\",\"Tuple\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['Any', 'Callable', 'List', 'Tuple', 'Union']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"List\",\"Tuple\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:urllib.parse", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"quote\",\"unquote\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['quote', 'unquote']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"quote\",\"unquote\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:aiofiles", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:loguru", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.Import\",\"tokens\":[\"loguru\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:requests", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:PIL", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"PIL\",\"names\":[\"Image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['Image']", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"PIL\",\"names\":[\"Image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:pydantic_core", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic_core\",\"names\":[\"to_jsonable_python\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['to_jsonable_python']", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic_core\",\"names\":[\"to_jsonable_python\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:tenacity", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"RetryError\",\"_utils\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['RetryCallState', 'RetryError', '_utils']", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"RetryError\",\"_utils\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:metagpt.const", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['MESSAGE_ROUTE_TO_ALL']", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:metagpt.logs", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['logger']", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['handle_exception']", "target": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:_connect", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:ast.Constant:\n@Time : 2023/12/27\n@Author : mashenquan\n@File : redis.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/27\\n@Author : mashenquan\\n@File : redis.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:module:__future__", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:names:['annotations']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:traceback", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:module:datetime", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"timedelta\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:names:['timedelta']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"timedelta\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:aioredis", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aioredis\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:module:metagpt.configs.redis_config", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:names:['RedisConfig']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/text.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/text.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:reduce_message_length"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:generate_prompt_chunk"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:split_paragraph"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:decode_unicode_escape"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:_split_by_count"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:_split_text_with_ends"}, {"predicate": "is", "source": "metagpt/utils/text.py:reduce_message_length", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:reduce_message_length", "target": "{\"lineno\":6,\"end_lineno\":31,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"reduce_message_length\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:generate_prompt_chunk", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:generate_prompt_chunk", "target": "{\"lineno\":34,\"end_lineno\":76,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"generate_prompt_chunk\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:split_paragraph", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:split_paragraph", "target": "{\"lineno\":79,\"end_lineno\":96,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"split_paragraph\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:decode_unicode_escape", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:decode_unicode_escape", "target": "{\"lineno\":99,\"end_lineno\":108,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"decode_unicode_escape\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:_split_by_count", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:_split_by_count", "target": "{\"lineno\":111,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_split_by_count\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:_split_text_with_ends", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:_split_text_with_ends", "target": "{\"lineno\":121,\"end_lineno\":129,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_split_text_with_ends\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:module:typing", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Sequence\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:names:['Generator', 'Sequence']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Sequence\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_MAX\",\"count_string_tokens\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:names:['TOKEN_MAX', 'count_string_tokens']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_MAX\",\"count_string_tokens\"]}}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : graph_repository.py\n@Desc : Superclass for graph repository. This script defines a superclass for a graph repository, providing a\n foundation for specific implementations.\n\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : graph_repository.py\\n@Desc : Superclass for graph repository. This script defines a superclass for a graph repository, providing a\\n foundation for specific implementations.\\n\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:abc", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['ABC', 'abstractmethod']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:collections", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['defaultdict']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:pathlib", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['Path']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['List']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:pydantic", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['BaseModel']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:metagpt.repo_parser", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"DotClassRelationship\",\"RepoFileInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['DotClassInfo', 'DotClassRelationship', 'RepoFileInfo']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"DotClassRelationship\",\"RepoFileInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:metagpt.utils.common", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['concat_namespace', 'split_namespace']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"predicate": "is", "source": "metagpt/utils/singleton.py:Singleton:__call__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/singleton.py:ast.Constant:\n@Time : 2023/5/11 16:15\n@Author : alexanderwu\n@File : singleton.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 16:15\\n@Author : alexanderwu\\n@File : singleton.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/singleton.py:abc", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"abc\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/recovery_util.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/recovery_util.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/recovery_util.py", "target": "metagpt/utils/recovery_util.py:load_history"}, {"predicate": "has_function", "source": "metagpt/utils/recovery_util.py", "target": "metagpt/utils/recovery_util.py:save_history"}, {"predicate": "is", "source": "metagpt/utils/recovery_util.py:load_history", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:load_history", "target": "{\"lineno\":17,\"end_lineno\":32,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"load_history\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/recovery_util.py:save_history", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:save_history", "target": "{\"lineno\":35,\"end_lineno\":58,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"save_history\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:json", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:module:datetime", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:names:['datetime']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:module:pathlib", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:names:['Path']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:nbformat", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"nbformat\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:module:metagpt.const", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:names:['DATA_PATH']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:module:metagpt.roles.role", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:names:['Role']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:module:metagpt.utils.common", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"read_json_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:names:['read_json_file']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"read_json_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:module:metagpt.utils.save_code", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.save_code\",\"names\":[\"save_code_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/recovery_util.py:names:['save_code_file']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.save_code\",\"names\":[\"save_code_file\"]}}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : git_repository.py\n@Desc: File repository management. RFC 135 2.2.3.2, 2.2.3.4 and 2.2.3.13.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : git_repository.py\\n@Desc: File repository management. RFC 135 2.2.3.2, 2.2.3.4 and 2.2.3.13.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:os", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:datetime", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['datetime']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:pathlib", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['Path']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['Dict', 'List', 'Set']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:aiofiles", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:metagpt.schema", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['Document']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:metagpt.utils.common", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['aread']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:metagpt.utils.json_to_markdown", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.json_to_markdown\",\"names\":[\"json_to_markdown\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['json_to_markdown']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.json_to_markdown\",\"names\":[\"json_to_markdown\"]}}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:_leave", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:_leave", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:get_docstring_statement", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:get_docstring_statement", "target": "{\"lineno\":11,\"end_lineno\":49,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_docstring_statement\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:has_decorator", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:has_decorator", "target": "{\"lineno\":52,\"end_lineno\":57,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"has_decorator\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:merge_docstring", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:merge_docstring", "target": "{\"lineno\":159,\"end_lineno\":176,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"merge_docstring\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringNode", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:DocstringNode", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"DocstringNode\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:module:__future__", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:names:['annotations']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:module:typing", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:names:['Union']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:libcst as cst", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"libcst as cst\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:module:libcst._nodes.module", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"libcst._nodes.module\",\"names\":[\"Module\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:names:['Module']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"libcst._nodes.module\",\"names\":[\"Module\"]}}"}, {"predicate": "is", "source": "metagpt/utils/exceptions.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/exceptions.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/exceptions.py", "target": "metagpt/utils/exceptions.py:handle_exception"}, {"predicate": "is", "source": "metagpt/utils/exceptions.py:handle_exception", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:handle_exception", "target": "{\"lineno\":20,\"end_lineno\":61,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"handle_exception\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/exceptions.py:ReturnType", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:ReturnType", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"ReturnType\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:ast.Constant:\n@Time : 2023/12/19 14:46\n@Author : alexanderwu\n@File : exceptions.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19 14:46\\n@Author : alexanderwu\\n@File : exceptions.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:asyncio", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:functools", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"functools\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:traceback", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Tuple\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:names:['Any', 'Callable', 'Tuple', 'Type', 'TypeVar', 'Union']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Tuple\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:module:metagpt.logs", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:json", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Tuple\",\"Type\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:names:['Any', 'Tuple', 'Type']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Tuple\",\"Type\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:module:pydantic", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:names:['BaseModel']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:module:metagpt.logs", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:names:['logger']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:module:metagpt.utils.common", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:names:['import_class']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"predicate": "is", "source": "metagpt/utils/highlight.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/highlight.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/highlight.py", "target": "metagpt/utils/highlight.py:highlight"}, {"predicate": "is", "source": "metagpt/utils/highlight.py:highlight", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:highlight", "target": "{\"lineno\":7,\"end_lineno\":25,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"highlight\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:module:pygments", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments\",\"names\":[\"highlight as highlight_\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:names:['highlight as highlight_']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments\",\"names\":[\"highlight as highlight_\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:module:pygments.formatters", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.formatters\",\"names\":[\"HtmlFormatter\",\"TerminalFormatter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:names:['HtmlFormatter', 'TerminalFormatter']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.formatters\",\"names\":[\"HtmlFormatter\",\"TerminalFormatter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:module:pygments.lexers", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.lexers\",\"names\":[\"PythonLexer\",\"SqlLexer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:names:['PythonLexer', 'SqlLexer']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.lexers\",\"names\":[\"PythonLexer\",\"SqlLexer\"]}}"}, {"predicate": "is", "source": "metagpt/utils/mmdc_pyppeteer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/mmdc_pyppeteer.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/mmdc_pyppeteer.py", "target": "metagpt/utils/mmdc_pyppeteer.py:mermaid_to_file"}, {"predicate": "is", "source": "metagpt/utils/mmdc_pyppeteer.py:mermaid_to_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:mermaid_to_file", "target": "{\"lineno\":17,\"end_lineno\":128,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : alitrack\n@File : mmdc_pyppeteer.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : alitrack\\n@File : mmdc_pyppeteer.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:module:urllib.parse", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:names:['urljoin']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:module:pyppeteer", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pyppeteer\",\"names\":[\"launch\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:names:['launch']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pyppeteer\",\"names\":[\"launch\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:module:metagpt.config2", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:names:['config']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:base64", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:os.path", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"os.path\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:traceback", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:uuid", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:pathlib", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['Path']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['Optional']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:aioboto3", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"aioboto3\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:aiofiles", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:metagpt.config2", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"S3Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['S3Config']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"S3Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:metagpt.const", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['BASE64_FORMAT']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/json_to_markdown.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/json_to_markdown.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/json_to_markdown.py", "target": "metagpt/utils/json_to_markdown.py:json_to_markdown"}, {"predicate": "is", "source": "metagpt/utils/json_to_markdown.py:json_to_markdown", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/json_to_markdown.py:json_to_markdown", "target": "{\"lineno\":11,\"end_lineno\":42,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"json_to_markdown\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/json_to_markdown.py:ast.Constant:\n@Time : 2023/9/11 11:50\n@Author : femto Zheng\n@File : json_to_markdown.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/11 11:50\\n@Author : femto Zheng\\n@File : json_to_markdown.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:py_make_scanner", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:py_make_scanner", "target": "{\"lineno\":9,\"end_lineno\":69,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"py_make_scanner\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:JSONObject", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:JSONObject", "target": "{\"lineno\":91,\"end_lineno\":192,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"JSONObject\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:py_scanstring", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:py_scanstring", "target": "{\"lineno\":195,\"end_lineno\":267,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"py_scanstring\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:NUMBER_RE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:NUMBER_RE", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Assign\",\"tokens\":[\"NUMBER_RE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:FLAGS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:FLAGS", "target": "{\"lineno\":72,\"end_lineno\":72,\"type_name\":\"ast.Assign\",\"tokens\":[\"FLAGS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK", "target": "{\"lineno\":73,\"end_lineno\":73,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_SINGLEQUOTE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_SINGLEQUOTE", "target": "{\"lineno\":74,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_SINGLEQUOTE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_DOUBLE_QUOTE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_DOUBLE_QUOTE", "target": "{\"lineno\":75,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_TRIPLE_DOUBLE_QUOTE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_SINGLEQUOTE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_SINGLEQUOTE", "target": "{\"lineno\":76,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_TRIPLE_SINGLEQUOTE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:BACKSLASH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:BACKSLASH", "target": "{\"lineno\":77,\"end_lineno\":86,\"type_name\":\"ast.Assign\",\"tokens\":[\"BACKSLASH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:WHITESPACE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:WHITESPACE", "target": "{\"lineno\":87,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"WHITESPACE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:WHITESPACE_STR", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:WHITESPACE_STR", "target": "{\"lineno\":88,\"end_lineno\":88,\"type_name\":\"ast.Assign\",\"tokens\":[\"WHITESPACE_STR\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:scanstring", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:scanstring", "target": "{\"lineno\":270,\"end_lineno\":270,\"type_name\":\"ast.Assign\",\"tokens\":[\"scanstring\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:json", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:re", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:module:json", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:names:['JSONDecodeError']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:module:json.decoder", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json.decoder\",\"names\":[\"_decode_uXXXX\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:names:['_decode_uXXXX']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json.decoder\",\"names\":[\"_decode_uXXXX\"]}}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:_init", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : git_repository.py\n@Desc: Git repository management. RFC 135 2.2.3.3.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : git_repository.py\\n@Desc: Git repository management. RFC 135 2.2.3.3.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:shutil", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:enum", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['Enum']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['Dict', 'List']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:git.repo", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo\",\"names\":[\"Repo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['Repo']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo\",\"names\":[\"Repo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:git.repo.fun", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo.fun\",\"names\":[\"is_git_dir\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['is_git_dir']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo.fun\",\"names\":[\"is_git_dir\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:gitignore_parser", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"gitignore_parser\",\"names\":[\"parse_gitignore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['parse_gitignore']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"gitignore_parser\",\"names\":[\"parse_gitignore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:metagpt.utils.dependency_file", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.dependency_file\",\"names\":[\"DependencyFile\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['DependencyFile']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.dependency_file\",\"names\":[\"DependencyFile\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:metagpt.utils.file_repository", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['FileRepository']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "is", "source": "metagpt/utils/read_document.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/read_document.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/read_document.py", "target": "metagpt/utils/read_document.py:read_docx"}, {"predicate": "is", "source": "metagpt/utils/read_document.py:read_docx", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/read_document.py:read_docx", "target": "{\"lineno\":12,\"end_lineno\":23,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_docx\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/read_document.py:ast.Constant:\n@Time : 2023/4/29 15:45\n@Author : alexanderwu\n@File : read_document.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:45\\n@Author : alexanderwu\\n@File : read_document.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/read_document.py:docx", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"docx\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/parse_docstring.py:remove_spaces", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_docstring.py:remove_spaces", "target": "{\"lineno\":7,\"end_lineno\":8,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_spaces\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_docstring.py:re", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_docstring.py:module:typing", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_docstring.py:names:['Tuple']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_docstring.py:module:pydantic", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_docstring.py:names:['BaseModel']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/s3_config.py:ast.Constant:\n@Time : 2024/1/4 19:07\n@Author : alexanderwu\n@File : s3_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:07\\n@Author : alexanderwu\\n@File : s3_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/s3_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/s3_config.py:names:['YamlModelWithoutDefault']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : browser_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : browser_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:names:['Literal']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:module:metagpt.tools", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:names:['WebBrowserEngineType']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:names:['YamlModel']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:ast.Constant:\n@Time : 2024/1/4 19:09\n@Author : alexanderwu\n@File : workspace_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:09\\n@Author : alexanderwu\\n@File : workspace_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:datetime", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['datetime']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:uuid", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['uuid4']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['field_validator', 'model_validator']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_WORKSPACE_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['DEFAULT_WORKSPACE_ROOT']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_WORKSPACE_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['YamlModel']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:ast.Constant:\n@Time : 2024/1/4 19:07\n@Author : alexanderwu\n@File : mermaid_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:07\\n@Author : alexanderwu\\n@File : mermaid_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:names:['Literal']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:names:['YamlModel']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "is", "source": "metagpt/configs/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/configs/__init__.py:ast.Constant:\n@Time : 2024/1/4 16:33\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:33\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMType:__missing__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:ast.Constant:\n@Time : 2024/1/4 16:33\n@Author : alexanderwu\n@File : llm_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:33\\n@Author : alexanderwu\\n@File : llm_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:module:enum", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:names:['Enum']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:names:['field_validator']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:names:['YamlModel']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/redis_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : redis_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : redis_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/redis_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/redis_config.py:names:['YamlModelWithoutDefault']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : search_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : search_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:names:['Callable', 'Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:module:metagpt.tools", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:names:['SearchEngineType']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:names:['YamlModel']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class_views", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_relationship", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_diff_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_align_root", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : rebuild_class_view.py\n@Desc : Reconstructs class diagram from a source code project.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : rebuild_class_view.py\\n@Desc : Reconstructs class diagram from a source code project.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:pathlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['Path']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Set\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['Optional', 'Set', 'Tuple']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Set\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:aiofiles", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.actions", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['Action']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.config2", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['config']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.const", "target": "{\"lineno\":17,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"DATA_API_DESIGN_FILE_REPO\",\"GENERALIZATION\",\"GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['AGGREGATION', 'COMPOSITION', 'DATA_API_DESIGN_FILE_REPO', 'GENERALIZATION', 'GRAPH_REPO_FILE_REPO']", "target": "{\"lineno\":17,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"DATA_API_DESIGN_FILE_REPO\",\"GENERALIZATION\",\"GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.logs", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['logger']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.repo_parser", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"RepoParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['DotClassInfo', 'RepoParser']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"RepoParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.schema", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['UMLClassView']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.common", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['concat_namespace', 'split_namespace']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.di_graph_repository", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['DiGraphRepository']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.graph_repository", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['GraphKeyword', 'GraphRepository']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_main_sequence_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_sequence_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_main_entry", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_use_case", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_sequence_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_participants", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_use_cases", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_detail", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_uml_class_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_source_code", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_full_filename", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_new_participant", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_participant", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:ast.Constant:\n@Time : 2024/1/4\n@Author : mashenquan\n@File : rebuild_sequence_view.py\n@Desc : Reconstruct sequence view information through reverse engineering.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4\\n@Author : mashenquan\\n@File : rebuild_sequence_view.py\\n@Desc : Reconstruct sequence view information through reverse engineering.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:re", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:datetime", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['datetime']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['List', 'Optional']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:pydantic", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['BaseModel']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:tenacity", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.actions", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['Action']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.config2", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['config']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.const", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['GRAPH_REPO_FILE_REPO']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.logs", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['logger']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.repo_parser", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"CodeBlockInfo\",\"DotClassInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['CodeBlockInfo', 'DotClassInfo']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"CodeBlockInfo\",\"DotClassInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.schema", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['UMLClassView']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.common", "target": "{\"lineno\":25,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"add_affix\",\"aread\",\"auto_namespace\",\"concat_namespace\",\"general_after_log\",\"list_files\",\"parse_json_code_block\",\"read_file_block\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['add_affix', 'aread', 'auto_namespace', 'concat_namespace', 'general_after_log', 'list_files', 'parse_json_code_block', 'read_file_block', 'split_namespace']", "target": "{\"lineno\":25,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"add_affix\",\"aread\",\"auto_namespace\",\"concat_namespace\",\"general_after_log\",\"list_files\",\"parse_json_code_block\",\"read_file_block\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.di_graph_repository", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['DiGraphRepository']", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.graph_repository", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['SPO', 'GraphKeyword', 'GraphRepository']", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:PROMPT_TEMPLATE", "target": "{\"lineno\":32,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_code.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.1.3 of RFC 116, modify the data type of the `cause_by`\n value of the `Message` object.\n@Modified By: mashenquan, 2023-11-27.\n 1. Mark the location of Design, Tasks, Legacy Code and Debug logs in the PROMPT_TEMPLATE with markdown\n code-block formatting to enhance the understanding for the LLM.\n 2. Following the think-act principle, solidify the task parameters when creating the WriteCode object, rather\n than passing them in when calling the run function.\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\n", "target": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_code.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.1.3 of RFC 116, modify the data type of the `cause_by`\\n value of the `Message` object.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. Mark the location of Design, Tasks, Legacy Code and Debug logs in the PROMPT_TEMPLATE with markdown\\n code-block formatting to enhance the understanding for the LLM.\\n 2. Following the think-act principle, solidify the task parameters when creating the WriteCode object, rather\\n than passing them in when calling the run function.\\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:json", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:pydantic", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['Field']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:tenacity", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.actions.action", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['Action']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.actions.project_management_an", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['REFINED_TASK_LIST', 'TASK_LIST']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.actions.write_code_plan_and_change_an", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"REFINED_TEMPLATE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['REFINED_TEMPLATE']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"REFINED_TEMPLATE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.const", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['BUGFIX_FILENAME', 'REQUIREMENT_FILENAME']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.logs", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['logger']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.schema", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\",\"Document\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['CodingContext', 'Document', 'RunCodeResult']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\",\"Document\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.utils.common", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['CodeParser']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['ProjectRepo']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py", "target": "python"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:LANGUAGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:LANGUAGE", "target": "{\"lineno\":12,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANGUAGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:PROGRAMMING_LANGUAGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:PROGRAMMING_LANGUAGE", "target": "{\"lineno\":19,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROGRAMMING_LANGUAGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:ORIGINAL_REQUIREMENTS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:ORIGINAL_REQUIREMENTS", "target": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.Assign\",\"tokens\":[\"ORIGINAL_REQUIREMENTS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENTS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENTS", "target": "{\"lineno\":33,\"end_lineno\":38,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENTS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:PROJECT_NAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:PROJECT_NAME", "target": "{\"lineno\":40,\"end_lineno\":46,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROJECT_NAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:PRODUCT_GOALS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:PRODUCT_GOALS", "target": "{\"lineno\":48,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRODUCT_GOALS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_PRODUCT_GOALS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_PRODUCT_GOALS", "target": "{\"lineno\":55,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PRODUCT_GOALS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:USER_STORIES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:USER_STORIES", "target": "{\"lineno\":67,\"end_lineno\":78,\"type_name\":\"ast.Assign\",\"tokens\":[\"USER_STORIES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_USER_STORIES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_USER_STORIES", "target": "{\"lineno\":80,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_USER_STORIES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:COMPETITIVE_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:COMPETITIVE_ANALYSIS", "target": "{\"lineno\":94,\"end_lineno\":103,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:COMPETITIVE_QUADRANT_CHART", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:COMPETITIVE_QUADRANT_CHART", "target": "{\"lineno\":105,\"end_lineno\":124,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_QUADRANT_CHART\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REQUIREMENT_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REQUIREMENT_ANALYSIS", "target": "{\"lineno\":126,\"end_lineno\":131,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_ANALYSIS", "target": "{\"lineno\":133,\"end_lineno\":140,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENT_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REQUIREMENT_POOL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REQUIREMENT_POOL", "target": "{\"lineno\":142,\"end_lineno\":147,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_POOL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_POOL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_POOL", "target": "{\"lineno\":149,\"end_lineno\":155,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENT_POOL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:UI_DESIGN_DRAFT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:UI_DESIGN_DRAFT", "target": "{\"lineno\":157,\"end_lineno\":162,\"type_name\":\"ast.Assign\",\"tokens\":[\"UI_DESIGN_DRAFT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:ANYTHING_UNCLEAR", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:ANYTHING_UNCLEAR", "target": "{\"lineno\":164,\"end_lineno\":169,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:ISSUE_TYPE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:ISSUE_TYPE", "target": "{\"lineno\":171,\"end_lineno\":176,\"type_name\":\"ast.Assign\",\"tokens\":[\"ISSUE_TYPE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:IS_RELATIVE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:IS_RELATIVE", "target": "{\"lineno\":178,\"end_lineno\":183,\"type_name\":\"ast.Assign\",\"tokens\":[\"IS_RELATIVE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REASON", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REASON", "target": "{\"lineno\":185,\"end_lineno\":187,\"type_name\":\"ast.Assign\",\"tokens\":[\"REASON\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:NODES", "target": "{\"lineno\":190,\"end_lineno\":203,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_NODES", "target": "{\"lineno\":205,\"end_lineno\":218,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:WRITE_PRD_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:WRITE_PRD_NODE", "target": "{\"lineno\":220,\"end_lineno\":220,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_PRD_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_PRD_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_PRD_NODE", "target": "{\"lineno\":221,\"end_lineno\":221,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PRD_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:WP_ISSUE_TYPE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:WP_ISSUE_TYPE_NODE", "target": "{\"lineno\":222,\"end_lineno\":222,\"type_name\":\"ast.Assign\",\"tokens\":[\"WP_ISSUE_TYPE_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:WP_IS_RELATIVE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:WP_IS_RELATIVE_NODE", "target": "{\"lineno\":223,\"end_lineno\":223,\"type_name\":\"ast.Assign\",\"tokens\":[\"WP_IS_RELATIVE_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:ast.Constant:\n@Time : 2023/12/14 11:40\n@Author : alexanderwu\n@File : write_prd_an.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/14 11:40\\n@Author : alexanderwu\\n@File : write_prd_an.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:names:['List']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:module:metagpt.actions.action_node", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:names:['ActionNode']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:PROMPT_TEMPLATE", "target": "{\"lineno\":17,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:FORMAT_EXAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:FORMAT_EXAMPLE", "target": "{\"lineno\":46,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_EXAMPLE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:ast.Constant:\n@Author : alexanderwu\n@File : summarize_code.py\n@Modified By: mashenquan, 2023/12/5. Archive the summarization content of issue discovery for use in WriteCode.\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : summarize_code.py\\n@Modified By: mashenquan, 2023/12/5. Archive the summarization content of issue discovery for use in WriteCode.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:pathlib", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['Path']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:tenacity", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:metagpt.actions.action", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['Action']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:metagpt.schema", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodeSummarizeContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['CodeSummarizeContext']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodeSummarizeContext\"]}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:_search_and_rank_urls", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/research.py:ConductResearch:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/research.py:get_research_system_text", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:get_research_system_text", "target": "{\"lineno\":276,\"end_lineno\":286,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_research_system_text\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:LANG_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:LANG_PROMPT", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANG_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:RESEARCH_BASE_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:RESEARCH_BASE_SYSTEM", "target": "{\"lineno\":20,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_BASE_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:RESEARCH_TOPIC_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:RESEARCH_TOPIC_SYSTEM", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_TOPIC_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:SEARCH_TOPIC_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:SEARCH_TOPIC_PROMPT", "target": "{\"lineno\":25,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_TOPIC_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:SUMMARIZE_SEARCH_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:SUMMARIZE_SEARCH_PROMPT", "target": "{\"lineno\":28,\"end_lineno\":35,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_SEARCH_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:COLLECT_AND_RANKURLS_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:COLLECT_AND_RANKURLS_PROMPT", "target": "{\"lineno\":37,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"COLLECT_AND_RANKURLS_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WEB_BROWSE_AND_SUMMARIZE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:WEB_BROWSE_AND_SUMMARIZE_PROMPT", "target": "{\"lineno\":51,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"WEB_BROWSE_AND_SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CONDUCT_RESEARCH_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:CONDUCT_RESEARCH_PROMPT", "target": "{\"lineno\":63,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONDUCT_RESEARCH_PROMPT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:__future__", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['annotations']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['Any', 'Callable', 'Optional', 'Union']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:pydantic", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"TypeAdapter\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['TypeAdapter', 'model_validator']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"TypeAdapter\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.config2", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['config']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.logs", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['logger']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.tools.search_engine", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['SearchEngine']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.tools.web_browser_engine", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.web_browser_engine\",\"names\":[\"WebBrowserEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['WebBrowserEngine']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.web_browser_engine\",\"names\":[\"WebBrowserEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.utils.common", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['OutputParser']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.utils.text", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.text\",\"names\":[\"generate_prompt_chunk\",\"reduce_message_length\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['generate_prompt_chunk', 'reduce_message_length']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.text\",\"names\":[\"generate_prompt_chunk\",\"reduce_message_length\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : skill_action.py\n@Desc : Call learned skill\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : skill_action.py\\n@Desc : Call learned skill\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:ast", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:importlib", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:traceback", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:copy", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['deepcopy']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['Dict', 'Optional']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:metagpt.actions", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['Action']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:metagpt.learn.skill_loader", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"Skill\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['Skill']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"Skill\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:metagpt.schema", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['Message']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:PROMPT_TEMPLATE", "target": "{\"lineno\":19,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:ast.Constant:\n@Time : 2023/5/11 22:12\n@Author : alexanderwu\n@File : write_test.py\n@Modified By: mashenquan, 2023-11-27. Following the think-act principle, solidify the task parameters when creating the\n WriteTest object, rather than passing them in when calling the run function.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 22:12\\n@Author : alexanderwu\\n@File : write_test.py\\n@Modified By: mashenquan, 2023-11-27. Following the think-act principle, solidify the task parameters when creating the\\n WriteTest object, rather than passing them in when calling the run function.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['Optional']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.actions.action", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['Action']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TEST_CODES_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['TEST_CODES_FILE_REPO']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TEST_CODES_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.logs", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.schema", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['Document', 'TestingContext']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.utils.common", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['CodeParser']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "is", "source": "metagpt/actions/action_graph.py:ActionGraph:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_graph.py:ast.Constant:\n@Time : 2024/1/30 13:52\n@Author : alexanderwu\n@File : action_graph.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/30 13:52\\n@Author : alexanderwu\\n@File : action_graph.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_graph.py:module:__future__", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_graph.py:names:['annotations']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:PROMPT_TEMPLATE", "target": "{\"lineno\":20,\"end_lineno\":45,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:ast.Constant:\n@Time : 2023/5/11 17:46\n@Author : alexanderwu\n@File : debug_error.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Divide the context into three components: legacy code, unit test code, and console log.\n 2. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:46\\n@Author : alexanderwu\\n@File : debug_error.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Divide the context into three components: legacy code, unit test code, and console log.\\n 2. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:re", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:pydantic", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['Field']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:metagpt.actions.action", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['Action']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:metagpt.schema", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['RunCodeContext', 'RunCodeResult']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:metagpt.utils.common", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['CodeParser']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_new_system_design", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_merge", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_update_system_design", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_save_data_api_design", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_save_seq_flow", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_save_mermaid_file", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:NEW_REQ_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:NEW_REQ_TEMPLATE", "target": "{\"lineno\":30,\"end_lineno\":36,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:ast.Constant:\n@Time : 2023/5/11 19:26\n@Author : alexanderwu\n@File : design_api.py\n@Modified By: mashenquan, 2023/11/27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.3 of RFC 135, add incremental iteration functionality.\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\n", "target": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:26\\n@Author : alexanderwu\\n@File : design_api.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.3 of RFC 135, add incremental iteration functionality.\\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:json", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['Optional']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.actions", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['Action', 'ActionOutput']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.actions.design_api_an", "target": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_an\",\"names\":[\"DATA_STRUCTURES_AND_INTERFACES\",\"DESIGN_API_NODE\",\"PROGRAM_CALL_FLOW\",\"REFINED_DATA_STRUCTURES_AND_INTERFACES\",\"REFINED_DESIGN_NODE\",\"REFINED_PROGRAM_CALL_FLOW\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['DATA_STRUCTURES_AND_INTERFACES', 'DESIGN_API_NODE', 'PROGRAM_CALL_FLOW', 'REFINED_DATA_STRUCTURES_AND_INTERFACES', 'REFINED_DESIGN_NODE', 'REFINED_PROGRAM_CALL_FLOW']", "target": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_an\",\"names\":[\"DATA_STRUCTURES_AND_INTERFACES\",\"DESIGN_API_NODE\",\"PROGRAM_CALL_FLOW\",\"REFINED_DATA_STRUCTURES_AND_INTERFACES\",\"REFINED_DESIGN_NODE\",\"REFINED_PROGRAM_CALL_FLOW\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.const", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_API_DESIGN_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['DATA_API_DESIGN_FILE_REPO', 'SEQ_FLOW_FILE_REPO']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_API_DESIGN_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.logs", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['logger']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.schema", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['Document', 'Documents', 'Message']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.utils.mermaid", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['mermaid_to_file']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/actions/design_api_an.py", "target": "metagpt/actions/design_api_an.py:main"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:main", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:main", "target": "{\"lineno\":114,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:IMPLEMENTATION_APPROACH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:IMPLEMENTATION_APPROACH", "target": "{\"lineno\":14,\"end_lineno\":19,\"type_name\":\"ast.Assign\",\"tokens\":[\"IMPLEMENTATION_APPROACH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_IMPLEMENTATION_APPROACH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_IMPLEMENTATION_APPROACH", "target": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_IMPLEMENTATION_APPROACH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:PROJECT_NAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:PROJECT_NAME", "target": "{\"lineno\":30,\"end_lineno\":32,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROJECT_NAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:FILE_LIST", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:FILE_LIST", "target": "{\"lineno\":34,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"FILE_LIST\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_FILE_LIST", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_FILE_LIST", "target": "{\"lineno\":41,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_FILE_LIST\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:DATA_STRUCTURES_AND_INTERFACES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:DATA_STRUCTURES_AND_INTERFACES", "target": "{\"lineno\":49,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_STRUCTURES_AND_INTERFACES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_DATA_STRUCTURES_AND_INTERFACES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_DATA_STRUCTURES_AND_INTERFACES", "target": "{\"lineno\":58,\"end_lineno\":66,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_DATA_STRUCTURES_AND_INTERFACES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:PROGRAM_CALL_FLOW", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:PROGRAM_CALL_FLOW", "target": "{\"lineno\":68,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROGRAM_CALL_FLOW\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_PROGRAM_CALL_FLOW", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_PROGRAM_CALL_FLOW", "target": "{\"lineno\":76,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PROGRAM_CALL_FLOW\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:ANYTHING_UNCLEAR", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:ANYTHING_UNCLEAR", "target": "{\"lineno\":86,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:NODES", "target": "{\"lineno\":93,\"end_lineno\":100,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_NODES", "target": "{\"lineno\":102,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:DESIGN_API_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:DESIGN_API_NODE", "target": "{\"lineno\":110,\"end_lineno\":110,\"type_name\":\"ast.Assign\",\"tokens\":[\"DESIGN_API_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_DESIGN_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_DESIGN_NODE", "target": "{\"lineno\":111,\"end_lineno\":111,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_DESIGN_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:ast.Constant:\n@Time : 2023/12/12 22:24\n@Author : alexanderwu\n@File : design_api_an.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/12 22:24\\n@Author : alexanderwu\\n@File : design_api_an.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:names:['List']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:module:metagpt.actions.action_node", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:names:['ActionNode']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:module:metagpt.logs", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:names:['logger']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:module:metagpt.utils.mermaid", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"MMC1\",\"MMC2\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:names:['MMC1', 'MMC2']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"MMC1\",\"MMC2\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:__name__:__main__", "target": "{\"lineno\":121,\"end_lineno\":122,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_output.py:ActionOutput:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_output.py:ast.Constant:\n@Time : 2023/7/11 10:03\n@Author : chengmaoyu\n@File : action_output\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/11 10:03\\n@Author : chengmaoyu\\n@File : action_output\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_output.py:module:pydantic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_output.py:names:['BaseModel']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "is", "source": "metagpt/actions/action_outcls_registry.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/action_outcls_registry.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/actions/action_outcls_registry.py", "target": "metagpt/actions/action_outcls_registry.py:register_action_outcls"}, {"predicate": "is", "source": "metagpt/actions/action_outcls_registry.py:register_action_outcls", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_outcls_registry.py:register_action_outcls", "target": "{\"lineno\":11,\"end_lineno\":42,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_action_outcls\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_outcls_registry.py:action_outcls_registry", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_outcls_registry.py:action_outcls_registry", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"action_outcls_registry\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_outcls_registry.py:module:functools", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"wraps\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_outcls_registry.py:names:['wraps']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"wraps\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/add_requirement.py:ast.Constant:\n@Time : 2023/5/20 17:46\n@Author : alexanderwu\n@File : add_requirement.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/20 17:46\\n@Author : alexanderwu\\n@File : add_requirement.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/add_requirement.py:module:metagpt.actions", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/add_requirement.py:names:['Action']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "is", "source": "metagpt/actions/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/__init__.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/__init__.py", "target": "metagpt/actions/__init__.py:ActionType"}, {"predicate": "is", "source": "metagpt/actions/__init__.py:ActionType", "target": "class"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:ActionType", "target": "{\"lineno\":30,\"end_lineno\":51,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionType\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:__all__", "target": "{\"lineno\":54,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:ast.Constant:\n@Time : 2023/5/11 17:44\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:44\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:enum", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['Enum']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.action", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.action_output", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['ActionOutput']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.add_requirement", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['UserRequirement']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.debug_error", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.debug_error\",\"names\":[\"DebugError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['DebugError']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.debug_error\",\"names\":[\"DebugError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.design_api", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteDesign']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.design_api_review", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_review\",\"names\":[\"DesignReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['DesignReview']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_review\",\"names\":[\"DesignReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.project_management", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management\",\"names\":[\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteTasks']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management\",\"names\":[\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.research", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"CollectLinks\",\"WebBrowseAndSummarize\",\"ConductResearch\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['CollectLinks', 'WebBrowseAndSummarize', 'ConductResearch']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"CollectLinks\",\"WebBrowseAndSummarize\",\"ConductResearch\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.run_code", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.run_code\",\"names\":[\"RunCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['RunCode']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.run_code\",\"names\":[\"RunCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.search_and_summarize", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.search_and_summarize\",\"names\":[\"SearchAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['SearchAndSummarize']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.search_and_summarize\",\"names\":[\"SearchAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_code", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code\",\"names\":[\"WriteCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteCode']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code\",\"names\":[\"WriteCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_code_review", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_review\",\"names\":[\"WriteCodeReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteCodeReview']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_review\",\"names\":[\"WriteCodeReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_prd", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd\",\"names\":[\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WritePRD']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd\",\"names\":[\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_prd_review", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_review\",\"names\":[\"WritePRDReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WritePRDReview']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_review\",\"names\":[\"WritePRDReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_test", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_test\",\"names\":[\"WriteTest\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteTest']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_test\",\"names\":[\"WriteTest\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.ci.execute_nb_code", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.execute_nb_code\",\"names\":[\"ExecuteNbCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['ExecuteNbCode']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.execute_nb_code\",\"names\":[\"ExecuteNbCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.ci.write_analysis_code", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"WriteCodeWithoutTools\",\"WriteCodeWithTools\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteCodeWithoutTools', 'WriteCodeWithTools']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"WriteCodeWithoutTools\",\"WriteCodeWithTools\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.ci.write_plan", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_plan\",\"names\":[\"WritePlan\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WritePlan']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_plan\",\"names\":[\"WritePlan\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:REVIEW", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:REVIEW", "target": "{\"lineno\":12,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:LGTM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:LGTM", "target": "{\"lineno\":22,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"LGTM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:WRITE_REVIEW_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:WRITE_REVIEW_NODE", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_REVIEW_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:ast.Constant:\n@Author : alexanderwu\n@File : write_review.py\n", "target": "{\"lineno\":3,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : write_review.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:names:['List']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:module:metagpt.actions", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:names:['Action']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:module:metagpt.actions.action_node", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:names:['ActionNode']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:_init_with_instruction", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:__repr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:_aask", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:_run_action_node", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : action.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : action.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['Optional', 'Union']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:pydantic", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:metagpt.actions.action_node", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['ActionNode']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:metagpt.context_mixin", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['ContextMixin']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:metagpt.schema", "target": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"SerializationMixin\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['CodePlanAndChangeContext', 'CodeSummarizeContext', 'CodingContext', 'RunCodeContext', 'SerializationMixin', 'TestingContext']", "target": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"SerializationMixin\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['ProjectRepo']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:ast.Constant:\n@Time : 2023/9/13 12:26\n@Author : femto Zheng\n@File : execute_task.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:26\\n@Author : femto Zheng\\n@File : execute_task.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:module:metagpt.schema", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:names:['Message']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_handle_bugfix", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_handle_new_requirement", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_handle_requirement_update", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_is_bugfix", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_is_related", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_merge", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_update_prd", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_save_competitive_analysis", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_rename_workspace", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:CONTEXT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:CONTEXT_TEMPLATE", "target": "{\"lineno\":41,\"end_lineno\":50,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONTEXT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:NEW_REQ_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:NEW_REQ_TEMPLATE", "target": "{\"lineno\":52,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_prd.py\n@Modified By: mashenquan, 2023/11/27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.2 of RFC 135, add incremental iteration functionality.\n 3. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\n", "target": "{\"lineno\":3,\"end_lineno\":12,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_prd.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.2 of RFC 135, add incremental iteration functionality.\\n 3. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:__future__", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['annotations']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:json", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:pathlib", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['Path']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.actions", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['Action', 'ActionOutput']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.actions.action_node", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['ActionNode']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.actions.fix_bug", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['FixBug']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.actions.write_prd_an", "target": "{\"lineno\":22,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_an\",\"names\":[\"COMPETITIVE_QUADRANT_CHART\",\"PROJECT_NAME\",\"REFINED_PRD_NODE\",\"WP_IS_RELATIVE_NODE\",\"WP_ISSUE_TYPE_NODE\",\"WRITE_PRD_NODE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['COMPETITIVE_QUADRANT_CHART', 'PROJECT_NAME', 'REFINED_PRD_NODE', 'WP_IS_RELATIVE_NODE', 'WP_ISSUE_TYPE_NODE', 'WRITE_PRD_NODE']", "target": "{\"lineno\":22,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_an\",\"names\":[\"COMPETITIVE_QUADRANT_CHART\",\"PROJECT_NAME\",\"REFINED_PRD_NODE\",\"WP_IS_RELATIVE_NODE\",\"WP_ISSUE_TYPE_NODE\",\"WRITE_PRD_NODE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.const", "target": "{\"lineno\":30,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['BUGFIX_FILENAME', 'COMPETITIVE_ANALYSIS_FILE_REPO', 'REQUIREMENT_FILENAME']", "target": "{\"lineno\":30,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.logs", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['logger']", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.schema", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"BugFixContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['BugFixContext', 'Document', 'Documents', 'Message']", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"BugFixContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.utils.common", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['CodeParser']", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.utils.file_repository", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['FileRepository']", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.utils.mermaid", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['mermaid_to_file']", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:_simplify_python_code", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:_simplify_python_code", "target": "{\"lineno\":199,\"end_lineno\":212,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_simplify_python_code\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_SYSTEM", "target": "{\"lineno\":34,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_GOOGLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_GOOGLE", "target": "{\"lineno\":58,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_GOOGLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_NUMPY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_NUMPY", "target": "{\"lineno\":86,\"end_lineno\":122,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_NUMPY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_SPHINX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_SPHINX", "target": "{\"lineno\":124,\"end_lineno\":147,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_SPHINX\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:_python_docstring_style", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:_python_docstring_style", "target": "{\"lineno\":149,\"end_lineno\":153,\"type_name\":\"ast.Assign\",\"tokens\":[\"_python_docstring_style\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:ast.Constant:Code Docstring Generator.\n\nThis script provides a tool to automatically generate docstrings for Python code. It uses the specified style to create\ndocstrings for the given code and system text.\n\nUsage:\n python3 -m metagpt.actions.write_docstring [--overwrite] [--style=]\n\nArguments:\n filename The path to the Python file for which you want to generate docstrings.\n\nOptions:\n --overwrite If specified, overwrite the original file with the code containing docstrings.\n --style= Specify the style of the generated docstrings.\n Valid values: 'google', 'numpy', or 'sphinx'.\n Default: 'google'\n\nExample:\n python3 -m metagpt.actions.write_docstring ./metagpt/software_company.py --overwrite False --style=numpy\n\nThis script uses the 'fire' library to create a command-line interface. It generates docstrings for the given Python code using\nthe specified docstring style and adds them to the code.\n", "target": "{\"lineno\":1,\"end_lineno\":23,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"Code Docstring Generator.\\n\\nThis script provides a tool to automatically generate docstrings for Python code. It uses the specified style to create\\ndocstrings for the given code and system text.\\n\\nUsage:\\n python3 -m metagpt.actions.write_docstring [--overwrite] [--style=]\\n\\nArguments:\\n filename The path to the Python file for which you want to generate docstrings.\\n\\nOptions:\\n --overwrite If specified, overwrite the original file with the code containing docstrings.\\n --style= Specify the style of the generated docstrings.\\n Valid values: 'google', 'numpy', or 'sphinx'.\\n Default: 'google'\\n\\nExample:\\n python3 -m metagpt.actions.write_docstring ./metagpt/software_company.py --overwrite False --style=numpy\\n\\nThis script uses the 'fire' library to create a command-line interface. It generates docstrings for the given Python code using\\nthe specified docstring style and adds them to the code.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:__future__", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['annotations']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:ast", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:pathlib", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['Path']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:typing", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['Literal', 'Optional']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:metagpt.actions.action", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['Action']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:metagpt.utils.common", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"aread\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['OutputParser', 'aread', 'awrite']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"aread\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:metagpt.utils.pycst", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.pycst\",\"names\":[\"merge_docstring\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['merge_docstring']", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.pycst\",\"names\":[\"merge_docstring\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:__name__:__main__", "target": "{\"lineno\":215,\"end_lineno\":218,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/fix_bug.py:ast.Constant:\n@Time : 2023-12-12\n@Author : mashenquan\n@File : fix_bug.py\n", "target": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023-12-12\\n@Author : mashenquan\\n@File : fix_bug.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/fix_bug.py:module:metagpt.actions", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/fix_bug.py:names:['Action']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py:QUESTIONS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:QUESTIONS", "target": "{\"lineno\":11,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"QUESTIONS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:ast.Constant:\n@Time : 2023/9/19 15:02\n@Author : DevXiaolan\n@File : prepare_interview.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/19 15:02\\n@Author : DevXiaolan\\n@File : prepare_interview.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:module:metagpt.actions", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:names:['Action']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:module:metagpt.actions.action_node", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:names:['ActionNode']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:_install_via_subprocess", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:_install_requirements", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:_install_pytest", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:_install_dependencies", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:PROMPT_TEMPLATE", "target": "{\"lineno\":29,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:TEMPLATE_CONTEXT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:TEMPLATE_CONTEXT", "target": "{\"lineno\":51,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEMPLATE_CONTEXT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:ast.Constant:\n@Time : 2023/5/11 17:46\n@Author : alexanderwu\n@File : run_code.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Mark the location of Console logs in the PROMPT_TEMPLATE with markdown code-block formatting to enhance\n the understanding for the LLM.\n 2. Fix bug: Add the \"install dependency\" operation.\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\n 4. According to section 2.2.3.5.7 of RFC 135, change the method of transferring file content\n (code files, unit test files, log files) from using the message to using the file name.\n 5. Merged the `Config` class of send18:dev branch to take over the set/get operations of the Environment\n class.\n", "target": "{\"lineno\":3,\"end_lineno\":17,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:46\\n@Author : alexanderwu\\n@File : run_code.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Mark the location of Console logs in the PROMPT_TEMPLATE with markdown code-block formatting to enhance\\n the understanding for the LLM.\\n 2. Fix bug: Add the \\\"install dependency\\\" operation.\\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\\n 4. According to section 2.2.3.5.7 of RFC 135, change the method of transferring file content\\n (code files, unit test files, log files) from using the message to using the file name.\\n 5. Merged the `Config` class of send18:dev branch to take over the set/get operations of the Environment\\n class.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:subprocess", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:pathlib", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['Path']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:typing", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['Tuple']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:pydantic", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['Field']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:metagpt.actions.action", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['Action']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:metagpt.logs", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['logger']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:metagpt.schema", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['RunCodeContext', 'RunCodeResult']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['handle_exception']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:main", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:main", "target": "{\"lineno\":584,\"end_lineno\":585,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:REVIEW", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:REVIEW", "target": "{\"lineno\":13,\"end_lineno\":22,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:REVIEW_RESULT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:REVIEW_RESULT", "target": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW_RESULT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:NEXT_STEPS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:NEXT_STEPS", "target": "{\"lineno\":31,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEXT_STEPS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WRITE_DRAFT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WRITE_DRAFT", "target": "{\"lineno\":63,\"end_lineno\":68,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_DRAFT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WRITE_FUNCTION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WRITE_FUNCTION", "target": "{\"lineno\":71,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_FUNCTION\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:REWRITE_CODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:REWRITE_CODE", "target": "{\"lineno\":83,\"end_lineno\":94,\"type_name\":\"ast.Assign\",\"tokens\":[\"REWRITE_CODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_CONTEXT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_CONTEXT", "target": "{\"lineno\":97,\"end_lineno\":416,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_CONTEXT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SMALLEST_CONTEXT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SMALLEST_CONTEXT", "target": "{\"lineno\":419,\"end_lineno\":489,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_SMALLEST_CONTEXT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SAMPLE", "target": "{\"lineno\":492,\"end_lineno\":554,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_SAMPLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WRITE_CODE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WRITE_CODE_NODE", "target": "{\"lineno\":557,\"end_lineno\":557,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_CODE_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WRITE_MOVE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WRITE_MOVE_NODE", "target": "{\"lineno\":558,\"end_lineno\":558,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_MOVE_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:CR_FOR_MOVE_FUNCTION_BY_3", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:CR_FOR_MOVE_FUNCTION_BY_3", "target": "{\"lineno\":561,\"end_lineno\":573,\"type_name\":\"ast.Assign\",\"tokens\":[\"CR_FOR_MOVE_FUNCTION_BY_3\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:ast.Constant:\n@Author : alexanderwu\n@File : write_review.py\n", "target": "{\"lineno\":3,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : write_review.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:asyncio", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:names:['List', 'Literal']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:module:metagpt.actions.action_node", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:names:['ActionNode']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:__name__:__main__", "target": "{\"lineno\":588,\"end_lineno\":589,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : talk_action.py\n@Desc : Act as it\u2019s a talk\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : talk_action.py\\n@Desc : Act as it\u2019s a talk\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:metagpt.actions", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['Action']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:metagpt.config2", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['config']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:metagpt.schema", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['Message']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n@Describe : Actions of the tutorial assistant, including writing directories and document content.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n@Describe : Actions of the tutorial assistant, including writing directories and document content.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:names:['Dict']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:module:metagpt.actions", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:names:['Action']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:module:metagpt.prompts.tutorial_assistant", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.tutorial_assistant\",\"names\":[\"CONTENT_PROMPT\",\"DIRECTORY_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:names:['CONTENT_PROMPT', 'DIRECTORY_PROMPT']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.tutorial_assistant\",\"names\":[\"CONTENT_PROMPT\",\"DIRECTORY_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:module:metagpt.utils.common", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:names:['OutputParser']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_prd_review.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_prd_review.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:module:metagpt.actions.action", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:names:['Action']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py:QUESTIONS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:QUESTIONS", "target": "{\"lineno\":9,\"end_lineno\":15,\"type_name\":\"ast.Assign\",\"tokens\":[\"QUESTIONS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:ast.Constant:\n@File : generate_questions.py\n", "target": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@File : generate_questions.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:module:metagpt.actions", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:names:['Action']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:module:metagpt.actions.action_node", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:names:['ActionNode']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:_init_repo", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : prepare_documents.py\n@Desc: PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt.\n RFC 135 2.2.3.5.1.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : prepare_documents.py\\n@Desc: PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt.\\n RFC 135 2.2.3.5.1.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:shutil", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:pathlib", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['Path']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:typing", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['Optional']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.actions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['Action', 'ActionOutput']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.const", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['REQUIREMENT_FILENAME']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.utils.file_repository", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['FileRepository']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.utils.git_repository", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['GitRepository']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['ProjectRepo']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM", "target": "{\"lineno\":18,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM_EN_US", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM_EN_US", "target": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SYSTEM_EN_US\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_PROMPT", "target": "{\"lineno\":43,\"end_lineno\":57,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_SYSTEM", "target": "{\"lineno\":59,\"end_lineno\":79,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SALES_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_PROMPT", "target": "{\"lineno\":81,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SALES_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_FOOD", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_FOOD", "target": "{\"lineno\":92,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_FOOD\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:ast.Constant:\n@Time : 2023/5/23 17:26\n@Author : alexanderwu\n@File : search_google.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 17:26\\n@Author : alexanderwu\\n@File : search_google.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"pydantic\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['model_validator']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:metagpt.actions", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['Action']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:metagpt.schema", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['Message']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:metagpt.tools.search_engine", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['SearchEngine']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:PROMPT_TEMPLATE", "target": "{\"lineno\":21,\"end_lineno\":34,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:EXAMPLE_AND_INSTRUCTION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:EXAMPLE_AND_INSTRUCTION", "target": "{\"lineno\":36,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXAMPLE_AND_INSTRUCTION\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:FORMAT_EXAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:FORMAT_EXAMPLE", "target": "{\"lineno\":58,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_EXAMPLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:REWRITE_CODE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:REWRITE_CODE_TEMPLATE", "target": "{\"lineno\":111,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"REWRITE_CODE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_code_review.py\n@Modified By: mashenquan, 2023/11/27. Following the think-act principle, solidify the task parameters when creating the\n WriteCode object, rather than passing them in when calling the run function.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_code_review.py\\n@Modified By: mashenquan, 2023/11/27. Following the think-act principle, solidify the task parameters when creating the\\n WriteCode object, rather than passing them in when calling the run function.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['Field']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:tenacity", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.actions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['WriteCode']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.actions.action", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['Action']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.const", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['REQUIREMENT_FILENAME']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.logs", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['logger']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.schema", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['CodingContext']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.utils.common", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['CodeParser']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:_set_result", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__repr__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:ast.Constant:\n@Time : 2023/7/27\n@Author : mashenquan\n@File : write_teaching_plan.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/27\\n@Author : mashenquan\\n@File : write_teaching_plan.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:module:metagpt.context", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:names:['Context']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:module:metagpt.logs", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:names:['logger']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/actions/project_management_an.py", "target": "metagpt/actions/project_management_an.py:main"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:main", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:main", "target": "{\"lineno\":124,\"end_lineno\":128,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REQUIRED_PYTHON_PACKAGES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REQUIRED_PYTHON_PACKAGES", "target": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIRED_PYTHON_PACKAGES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REQUIRED_OTHER_LANGUAGE_PACKAGES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REQUIRED_OTHER_LANGUAGE_PACKAGES", "target": "{\"lineno\":20,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIRED_OTHER_LANGUAGE_PACKAGES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:LOGIC_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:LOGIC_ANALYSIS", "target": "{\"lineno\":27,\"end_lineno\":36,\"type_name\":\"ast.Assign\",\"tokens\":[\"LOGIC_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_LOGIC_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_LOGIC_ANALYSIS", "target": "{\"lineno\":38,\"end_lineno\":50,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_LOGIC_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:TASK_LIST", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:TASK_LIST", "target": "{\"lineno\":52,\"end_lineno\":57,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_LIST\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_TASK_LIST", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_TASK_LIST", "target": "{\"lineno\":59,\"end_lineno\":66,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_TASK_LIST\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:FULL_API_SPEC", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:FULL_API_SPEC", "target": "{\"lineno\":68,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"FULL_API_SPEC\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:SHARED_KNOWLEDGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:SHARED_KNOWLEDGE", "target": "{\"lineno\":76,\"end_lineno\":81,\"type_name\":\"ast.Assign\",\"tokens\":[\"SHARED_KNOWLEDGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_SHARED_KNOWLEDGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_SHARED_KNOWLEDGE", "target": "{\"lineno\":83,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_SHARED_KNOWLEDGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:ANYTHING_UNCLEAR_PM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:ANYTHING_UNCLEAR_PM", "target": "{\"lineno\":93,\"end_lineno\":98,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR_PM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:NODES", "target": "{\"lineno\":100,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_NODES", "target": "{\"lineno\":110,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:PM_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:PM_NODE", "target": "{\"lineno\":120,\"end_lineno\":120,\"type_name\":\"ast.Assign\",\"tokens\":[\"PM_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_PM_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_PM_NODE", "target": "{\"lineno\":121,\"end_lineno\":121,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PM_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:ast.Constant:\n@Time : 2023/12/14 15:28\n@Author : alexanderwu\n@File : project_management_an.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/14 15:28\\n@Author : alexanderwu\\n@File : project_management_an.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:names:['List']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:module:metagpt.actions.action_node", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:names:['ActionNode']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:module:metagpt.logs", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:names:['logger']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:__name__:__main__", "target": "{\"lineno\":131,\"end_lineno\":132,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:_update_tasks", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:_run_new_tasks", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:_merge", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:_update_requirements", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:NEW_REQ_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:NEW_REQ_TEMPLATE", "target": "{\"lineno\":23,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:ast.Constant:\n@Time : 2023/5/11 19:12\n@Author : alexanderwu\n@File : project_management.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Divide the context into three components: legacy code, unit test code, and console log.\n 2. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\n 3. According to the design in Section 2.2.3.5.4 of RFC 135, add incremental iteration functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:12\\n@Author : alexanderwu\\n@File : project_management.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Divide the context into three components: legacy code, unit test code, and console log.\\n 2. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\\n 3. According to the design in Section 2.2.3.5.4 of RFC 135, add incremental iteration functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:json", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['Optional']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.actions.action", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['Action']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.actions.action_output", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['ActionOutput']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.actions.project_management_an", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"PM_NODE\",\"REFINED_PM_NODE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['PM_NODE', 'REFINED_PM_NODE']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"PM_NODE\",\"REFINED_PM_NODE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.const", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PACKAGE_REQUIREMENTS_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['PACKAGE_REQUIREMENTS_FILENAME']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PACKAGE_REQUIREMENTS_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.schema", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['Document', 'Documents']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\"]}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:__repr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_get_children_mapping", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_get_self_mapping", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_create_children_class", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_to_dict", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_compile_f", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_aask_v1", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_req", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_comment", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:dict_to_markdown", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:dict_to_markdown", "target": "{\"lineno\":115,\"end_lineno\":119,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"dict_to_markdown\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:TAG", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:TAG", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.Assign\",\"tokens\":[\"TAG\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:LANGUAGE_CONSTRAINT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:LANGUAGE_CONSTRAINT", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANGUAGE_CONSTRAINT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:FORMAT_CONSTRAINT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:FORMAT_CONSTRAINT", "target": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_CONSTRAINT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:SIMPLE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:SIMPLE_TEMPLATE", "target": "{\"lineno\":43,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"SIMPLE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:REVIEW_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:REVIEW_TEMPLATE", "target": "{\"lineno\":62,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:REVISE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:REVISE_TEMPLATE", "target": "{\"lineno\":92,\"end_lineno\":112,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVISE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:ast.Constant:\n@Time : 2023/12/11 18:45\n@Author : alexanderwu\n@File : action_node.py\n\nNOTE: You should use typing.List instead of list to do type annotation. Because in the markdown extraction process,\n we can use typing to extract the type of the node, but we cannot use built-in list to extract.\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/11 18:45\\n@Author : alexanderwu\\n@File : action_node.py\\n\\nNOTE: You should use typing.List instead of list to do type annotation. Because in the markdown extraction process,\\n we can use typing to extract the type of the node, but we cannot use built-in list to extract.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:typing", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"typing\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:enum", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['Enum']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"List\",\"Optional\",\"Tuple\",\"Type\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['Any', 'Dict', 'List', 'Optional', 'Tuple', 'Type', 'Union']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"List\",\"Optional\",\"Tuple\",\"Type\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:pydantic", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"create_model\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['BaseModel', 'Field', 'create_model', 'model_validator']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"create_model\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:tenacity", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.actions.action_outcls_registry", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_outcls_registry\",\"names\":[\"register_action_outcls\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['register_action_outcls']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_outcls_registry\",\"names\":[\"register_action_outcls\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.llm", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['BaseLLM']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.logs", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['logger']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.provider.postprocess.llm_output_postprocess", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.llm_output_postprocess\",\"names\":[\"llm_output_postprocess\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['llm_output_postprocess']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.llm_output_postprocess\",\"names\":[\"llm_output_postprocess\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.utils.common", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"general_after_log\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['OutputParser', 'general_after_log']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"general_after_log\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.utils.human_interaction", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.human_interaction\",\"names\":[\"HumanInteraction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['HumanInteraction']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.human_interaction\",\"names\":[\"HumanInteraction\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE", "target": "{\"lineno\":16,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE_CONTEXT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE_CONTEXT", "target": "{\"lineno\":111,\"end_lineno\":126,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_CONTEXT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:REFINED_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:REFINED_TEMPLATE", "target": "{\"lineno\":128,\"end_lineno\":180,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WRITE_CODE_PLAN_AND_CHANGE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:WRITE_CODE_PLAN_AND_CHANGE_NODE", "target": "{\"lineno\":182,\"end_lineno\":182,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_CODE_PLAN_AND_CHANGE_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:ast.Constant:\n@Time : 2023/12/26\n@Author : mannaandpoem\n@File : write_code_plan_and_change_an.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/26\\n@Author : mannaandpoem\\n@File : write_code_plan_and_change_an.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:names:['Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.actions.action", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:names:['Action']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.actions.action_node", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:names:['ActionNode']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.schema", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:names:['CodePlanAndChangeContext']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:ast.Constant:\n@Time : 2023/5/11 19:31\n@Author : alexanderwu\n@File : design_api_review.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:31\\n@Author : alexanderwu\\n@File : design_api_review.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:module:metagpt.actions.action", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:names:['Action']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_check_file_type", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_unzip", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_ocr", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:ast.Constant:\n@Time : 2023/9/21 18:10:20\n@Author : Stitch-z\n@File : invoice_ocr.py\n@Describe : Actions of the invoice ocr assistant.\n", "target": "{\"lineno\":4,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 18:10:20\\n@Author : Stitch-z\\n@File : invoice_ocr.py\\n@Describe : Actions of the invoice ocr assistant.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:os", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:zipfile", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"zipfile\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:datetime", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['datetime']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:pathlib", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['Path']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['Optional']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:pandas as pd", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:paddleocr", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"paddleocr\",\"names\":[\"PaddleOCR\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['PaddleOCR']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"paddleocr\",\"names\":[\"PaddleOCR\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.actions", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['Action']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.const", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"INVOICE_OCR_TABLE_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['INVOICE_OCR_TABLE_PATH']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"INVOICE_OCR_TABLE_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.logs", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['logger']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.prompts.invoice_ocr", "target": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\",\"REPLY_OCR_QUESTION_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['EXTRACT_OCR_MAIN_INFO_PROMPT', 'REPLY_OCR_QUESTION_PROMPT']", "target": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\",\"REPLY_OCR_QUESTION_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.utils.common", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['OutputParser']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.utils.file", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['File']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/ci/write_analysis_code.py", "target": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode"}, {"predicate": "has_class", "source": "metagpt/actions/ci/write_analysis_code.py", "target": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithoutTools"}, {"predicate": "has_class", "source": "metagpt/actions/ci/write_analysis_code.py", "target": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode", "target": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode:insert_system_message"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode", "target": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode:run"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode", "target": "{\"lineno\":25,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseWriteAnalysisCode\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode:insert_system_message", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:BaseWriteAnalysisCode:run", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithoutTools", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithoutTools", "target": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithoutTools:run"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithoutTools", "target": "{\"lineno\":47,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeWithoutTools\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithoutTools:run", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools", "target": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:_get_tools_by_type"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools", "target": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:_recommend_tool"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools", "target": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:_prepare_tools"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools", "target": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:run"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools", "target": "{\"lineno\":56,\"end_lineno\":155,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeWithTools\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:_get_tools_by_type", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:_recommend_tool", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:_prepare_tools", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/write_analysis_code.py:WriteCodeWithTools:run", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:ast.Constant:\n@Date : 2023/11/20 13:19:39\n@Author : orange-crow\n@File : write_analysis_code.py\n", "target": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Date : 2023/11/20 13:19:39\\n@Author : orange-crow\\n@File : write_analysis_code.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:module:__future__", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:names:['annotations']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:names:['Tuple']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.actions", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:names:['Action']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.logs", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:names:['logger']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.prompts.ci.write_analysis_code", "target": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.write_analysis_code\",\"names\":[\"CODE_GENERATOR_WITH_TOOLS\",\"SELECT_FUNCTION_TOOLS\",\"TOOL_RECOMMENDATION_PROMPT\",\"TOOL_USAGE_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:names:['CODE_GENERATOR_WITH_TOOLS', 'SELECT_FUNCTION_TOOLS', 'TOOL_RECOMMENDATION_PROMPT', 'TOOL_USAGE_PROMPT']", "target": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.write_analysis_code\",\"names\":[\"CODE_GENERATOR_WITH_TOOLS\",\"SELECT_FUNCTION_TOOLS\",\"TOOL_RECOMMENDATION_PROMPT\",\"TOOL_USAGE_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.schema", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\",\"SystemMessage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:names:['Message', 'Plan', 'SystemMessage']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\",\"SystemMessage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.tools", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"TOOL_REGISTRY\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:names:['TOOL_REGISTRY']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"TOOL_REGISTRY\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.tools.tool_registry", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"validate_tool_names\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:names:['validate_tool_names']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.tool_registry\",\"names\":[\"validate_tool_names\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:module:metagpt.utils.common", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"create_func_call_config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_analysis_code.py:names:['create_func_call_config']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"create_func_call_config\"]}}"}, {"predicate": "is", "source": "metagpt/actions/ci/write_plan.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/ci/write_plan.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/ci/write_plan.py", "target": "metagpt/actions/ci/write_plan.py:WritePlan"}, {"predicate": "has_function", "source": "metagpt/actions/ci/write_plan.py", "target": "metagpt/actions/ci/write_plan.py:rsp_to_tasks"}, {"predicate": "has_function", "source": "metagpt/actions/ci/write_plan.py", "target": "metagpt/actions/ci/write_plan.py:update_plan_from_rsp"}, {"predicate": "has_function", "source": "metagpt/actions/ci/write_plan.py", "target": "metagpt/actions/ci/write_plan.py:precheck_update_plan_from_rsp"}, {"predicate": "is", "source": "metagpt/actions/ci/write_plan.py:WritePlan", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/write_plan.py:WritePlan", "target": "metagpt/actions/ci/write_plan.py:WritePlan:assign_task_type"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/write_plan.py:WritePlan", "target": "metagpt/actions/ci/write_plan.py:WritePlan:run"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:WritePlan", "target": "{\"lineno\":24,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePlan\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/write_plan.py:WritePlan:assign_task_type", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/write_plan.py:WritePlan:run", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/write_plan.py:rsp_to_tasks", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:rsp_to_tasks", "target": "{\"lineno\":82,\"end_lineno\":85,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"rsp_to_tasks\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/write_plan.py:update_plan_from_rsp", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:update_plan_from_rsp", "target": "{\"lineno\":88,\"end_lineno\":107,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"update_plan_from_rsp\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/write_plan.py:precheck_update_plan_from_rsp", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:precheck_update_plan_from_rsp", "target": "{\"lineno\":110,\"end_lineno\":116,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"precheck_update_plan_from_rsp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:ast.Constant:\n@Date : 2023/11/20 11:24:03\n@Author : orange-crow\n@File : plan.py\n", "target": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Date : 2023/11/20 11:24:03\\n@Author : orange-crow\\n@File : plan.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:module:__future__", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:names:['annotations']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:json", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:module:copy", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:names:['deepcopy']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:names:['Tuple']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:module:metagpt.actions", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:names:['Action']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:module:metagpt.prompts.ci.write_analysis_code", "target": "{\"lineno\":15,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.write_analysis_code\",\"names\":[\"ASSIGN_TASK_TYPE_CONFIG\",\"ASSIGN_TASK_TYPE_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:names:['ASSIGN_TASK_TYPE_CONFIG', 'ASSIGN_TASK_TYPE_PROMPT']", "target": "{\"lineno\":15,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.write_analysis_code\",\"names\":[\"ASSIGN_TASK_TYPE_CONFIG\",\"ASSIGN_TASK_TYPE_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:module:metagpt.schema", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\",\"Task\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:names:['Message', 'Plan', 'Task']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\",\"Task\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:module:metagpt.tools", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"TOOL_REGISTRY\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:names:['TOOL_REGISTRY']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"TOOL_REGISTRY\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:module:metagpt.utils.common", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\",\"create_func_call_config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/write_plan.py:names:['CodeParser', 'create_func_call_config']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\",\"create_func_call_config\"]}}"}, {"predicate": "is", "source": "metagpt/actions/ci/ask_review.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/ci/ask_review.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/ci/ask_review.py", "target": "metagpt/actions/ci/ask_review.py:ReviewConst"}, {"predicate": "has_class", "source": "metagpt/actions/ci/ask_review.py", "target": "metagpt/actions/ci/ask_review.py:AskReview"}, {"predicate": "is", "source": "metagpt/actions/ci/ask_review.py:ReviewConst", "target": "class"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:ReviewConst", "target": "{\"lineno\":10,\"end_lineno\":24,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviewConst\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/ask_review.py:AskReview", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/ask_review.py:AskReview", "target": "metagpt/actions/ci/ask_review.py:AskReview:run"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:AskReview", "target": "{\"lineno\":27,\"end_lineno\":62,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AskReview\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/ask_review.py:AskReview:run", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:module:__future__", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:names:['annotations']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:module:typing", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:names:['Tuple']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:module:metagpt.actions", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:names:['Action']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:module:metagpt.logs", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:names:['logger']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:module:metagpt.schema", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ask_review.py:names:['Message', 'Plan']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\"]}}"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/ci/execute_nb_code.py", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode"}, {"predicate": "has_function", "source": "metagpt/actions/ci/execute_nb_code.py", "target": "metagpt/actions/ci/execute_nb_code.py:truncate"}, {"predicate": "has_function", "source": "metagpt/actions/ci/execute_nb_code.py", "target": "metagpt/actions/ci/execute_nb_code.py:remove_escape_and_color_codes"}, {"predicate": "has_function", "source": "metagpt/actions/ci/execute_nb_code.py", "target": "metagpt/actions/ci/execute_nb_code.py:display_markdown"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:__init__"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:build"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:terminate"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:reset"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:add_code_cell"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:add_markdown_cell"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:_display"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:add_output_to_cell"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:parse_outputs"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:show_bytes_figure"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:is_ipython"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:run_cell"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:run"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode", "target": "{\"lineno\":31,\"end_lineno\":196,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExecuteNbCode\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:build", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:terminate", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:reset", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:add_code_cell", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:add_markdown_cell", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:_display", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:add_output_to_cell", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:parse_outputs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:show_bytes_figure", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:is_ipython", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:run_cell", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:ExecuteNbCode:run", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:truncate", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:truncate", "target": "{\"lineno\":199,\"end_lineno\":214,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"truncate\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:remove_escape_and_color_codes", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:remove_escape_and_color_codes", "target": "{\"lineno\":217,\"end_lineno\":221,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"remove_escape_and_color_codes\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/execute_nb_code.py:display_markdown", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:display_markdown", "target": "{\"lineno\":224,\"end_lineno\":249,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"display_markdown\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:ast.Constant:\n@Date : 2023/11/17 14:22:15\n@Author : orange-crow\n@File : execute_nb_code.py\n", "target": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Date : 2023/11/17 14:22:15\\n@Author : orange-crow\\n@File : execute_nb_code.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:__future__", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['annotations']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:asyncio", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:base64", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:re", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:traceback", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['Literal', 'Tuple']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:nbformat", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"nbformat\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:nbclient", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbclient\",\"names\":[\"NotebookClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['NotebookClient']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbclient\",\"names\":[\"NotebookClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:nbclient.exceptions", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbclient.exceptions\",\"names\":[\"CellTimeoutError\",\"DeadKernelError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['CellTimeoutError', 'DeadKernelError']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbclient.exceptions\",\"names\":[\"CellTimeoutError\",\"DeadKernelError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:nbformat", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbformat\",\"names\":[\"NotebookNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['NotebookNode']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbformat\",\"names\":[\"NotebookNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:nbformat.v4", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbformat.v4\",\"names\":[\"new_code_cell\",\"new_markdown_cell\",\"new_output\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['new_code_cell', 'new_markdown_cell', 'new_output']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"nbformat.v4\",\"names\":[\"new_code_cell\",\"new_markdown_cell\",\"new_output\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:rich.box", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.box\",\"names\":[\"MINIMAL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['MINIMAL']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.box\",\"names\":[\"MINIMAL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:rich.console", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.console\",\"names\":[\"Console\",\"Group\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['Console', 'Group']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.console\",\"names\":[\"Console\",\"Group\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:rich.live", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.live\",\"names\":[\"Live\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['Live']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.live\",\"names\":[\"Live\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:rich.markdown", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.markdown\",\"names\":[\"Markdown\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['Markdown']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.markdown\",\"names\":[\"Markdown\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:rich.panel", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.panel\",\"names\":[\"Panel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['Panel']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.panel\",\"names\":[\"Panel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:rich.syntax", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.syntax\",\"names\":[\"Syntax\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['Syntax']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"rich.syntax\",\"names\":[\"Syntax\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:metagpt.actions", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['Action']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:module:metagpt.logs", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/execute_nb_code.py:names:['logger']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/actions/ci/ml_action.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/ci/ml_action.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/ci/ml_action.py", "target": "metagpt/actions/ci/ml_action.py:WriteCodeWithToolsML"}, {"predicate": "has_class", "source": "metagpt/actions/ci/ml_action.py", "target": "metagpt/actions/ci/ml_action.py:UpdateDataColumns"}, {"predicate": "is", "source": "metagpt/actions/ci/ml_action.py:WriteCodeWithToolsML", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/ml_action.py:WriteCodeWithToolsML", "target": "metagpt/actions/ci/ml_action.py:WriteCodeWithToolsML:run"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:WriteCodeWithToolsML", "target": "{\"lineno\":18,\"end_lineno\":59,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeWithToolsML\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/ml_action.py:WriteCodeWithToolsML:run", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/ml_action.py:UpdateDataColumns", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/ml_action.py:UpdateDataColumns", "target": "metagpt/actions/ci/ml_action.py:UpdateDataColumns:run"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:UpdateDataColumns", "target": "{\"lineno\":62,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UpdateDataColumns\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/ml_action.py:UpdateDataColumns:run", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:module:__future__", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:names:['annotations']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:module:typing", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:names:['Tuple']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:module:metagpt.actions", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:names:['Action']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:module:metagpt.actions.ci.write_analysis_code", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"WriteCodeWithTools\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:names:['WriteCodeWithTools']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"WriteCodeWithTools\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:module:metagpt.prompts.ci.ml_action", "target": "{\"lineno\":7,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.ml_action\",\"names\":[\"ML_GENERATE_CODE_PROMPT\",\"ML_TOOL_USAGE_PROMPT\",\"PRINT_DATA_COLUMNS\",\"UPDATE_DATA_COLUMNS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:names:['ML_GENERATE_CODE_PROMPT', 'ML_TOOL_USAGE_PROMPT', 'PRINT_DATA_COLUMNS', 'UPDATE_DATA_COLUMNS']", "target": "{\"lineno\":7,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.ml_action\",\"names\":[\"ML_GENERATE_CODE_PROMPT\",\"ML_TOOL_USAGE_PROMPT\",\"PRINT_DATA_COLUMNS\",\"UPDATE_DATA_COLUMNS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:module:metagpt.prompts.ci.write_analysis_code", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.write_analysis_code\",\"names\":[\"CODE_GENERATOR_WITH_TOOLS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:names:['CODE_GENERATOR_WITH_TOOLS']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.ci.write_analysis_code\",\"names\":[\"CODE_GENERATOR_WITH_TOOLS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:module:metagpt.schema", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:names:['Message', 'Plan']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:module:metagpt.utils.common", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"create_func_call_config\",\"remove_comments\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/ml_action.py:names:['create_func_call_config', 'remove_comments']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"create_func_call_config\",\"remove_comments\"]}}"}, {"predicate": "is", "source": "metagpt/actions/ci/debug_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/ci/debug_code.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/ci/debug_code.py", "target": "metagpt/actions/ci/debug_code.py:DebugCode"}, {"predicate": "is", "source": "metagpt/actions/ci/debug_code.py:DebugCode", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/actions/ci/debug_code.py:DebugCode", "target": "metagpt/actions/ci/debug_code.py:DebugCode:run"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:DebugCode", "target": "{\"lineno\":75,\"end_lineno\":109,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DebugCode\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/debug_code.py:DebugCode:run", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/ci/debug_code.py:DEBUG_REFLECTION_EXAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:DEBUG_REFLECTION_EXAMPLE", "target": "{\"lineno\":8,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEBUG_REFLECTION_EXAMPLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/debug_code.py:REFLECTION_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:REFLECTION_PROMPT", "target": "{\"lineno\":39,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFLECTION_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/ci/debug_code.py:CODE_REFLECTION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:CODE_REFLECTION", "target": "{\"lineno\":55,\"end_lineno\":72,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REFLECTION\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:module:__future__", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:names:['annotations']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:module:metagpt.actions.ci.write_analysis_code", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"BaseWriteAnalysisCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:names:['BaseWriteAnalysisCode']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_analysis_code\",\"names\":[\"BaseWriteAnalysisCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:module:metagpt.logs", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:names:['logger']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:module:metagpt.schema", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:names:['Message']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:module:metagpt.utils.common", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"create_func_call_config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/ci/debug_code.py:names:['create_func_call_config']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"create_func_call_config\"]}}"}, {"predicate": "is", "source": "metagpt/prompts/sales.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/sales.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/sales.py:SALES_ASSISTANT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/sales.py:SALES_ASSISTANT", "target": "{\"lineno\":10,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"SALES_ASSISTANT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/sales.py:SALES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/sales.py:SALES", "target": "{\"lineno\":33,\"end_lineno\":55,\"type_name\":\"ast.Assign\",\"tokens\":[\"SALES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/sales.py:conversation_stages", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/sales.py:conversation_stages", "target": "{\"lineno\":57,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"conversation_stages\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/sales.py:ast.Constant:\n@Time : 2023/5/8 15:29\n@Author : alexanderwu\n@File : sales.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/8 15:29\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/prompts/__init__.py:ast.Constant:\n@Time : 2023/5/30 09:51\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/30 09:51\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tool_types.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/tool_types.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/tool_types.py:DATA_PREPROCESS_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tool_types.py:DATA_PREPROCESS_PROMPT", "target": "{\"lineno\":2,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_PREPROCESS_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tool_types.py:FEATURE_ENGINEERING_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tool_types.py:FEATURE_ENGINEERING_PROMPT", "target": "{\"lineno\":14,\"end_lineno\":23,\"type_name\":\"ast.Assign\",\"tokens\":[\"FEATURE_ENGINEERING_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tool_types.py:MODEL_TRAIN_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tool_types.py:MODEL_TRAIN_PROMPT", "target": "{\"lineno\":26,\"end_lineno\":32,\"type_name\":\"ast.Assign\",\"tokens\":[\"MODEL_TRAIN_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tool_types.py:MODEL_EVALUATE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tool_types.py:MODEL_EVALUATE_PROMPT", "target": "{\"lineno\":35,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"MODEL_EVALUATE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tool_types.py:IMAGE2WEBPAGE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tool_types.py:IMAGE2WEBPAGE_PROMPT", "target": "{\"lineno\":42,\"end_lineno\":46,\"type_name\":\"ast.Assign\",\"tokens\":[\"IMAGE2WEBPAGE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT", "target": "{\"lineno\":11,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_2", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_2", "target": "{\"lineno\":28,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_2\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_3", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_3", "target": "{\"lineno\":43,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_3\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_4", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_4", "target": "{\"lineno\":57,\"end_lineno\":69,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_4\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_5", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_5", "target": "{\"lineno\":72,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_5\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:ast.Constant:\n@Time : 2023/6/19 23:07\n@Author : alexanderwu\n@File : summarize.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/19 23:07\\n@Author : alexanderwu\\n@File : summarize.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/metagpt_sample.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/metagpt_sample.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/metagpt_sample.py:METAGPT_SAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/metagpt_sample.py:METAGPT_SAMPLE", "target": "{\"lineno\":9,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"METAGPT_SAMPLE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/metagpt_sample.py:ast.Constant:\n@Time : 2023/6/7 20:29\n@Author : alexanderwu\n@File : metagpt_sample.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/7 20:29\\n@Author : alexanderwu\\n@File : metagpt_sample.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py:COMMON_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tutorial_assistant.py:COMMON_PROMPT", "target": "{\"lineno\":10,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMON_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py:DIRECTORY_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tutorial_assistant.py:DIRECTORY_PROMPT", "target": "{\"lineno\":15,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"DIRECTORY_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py:CONTENT_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tutorial_assistant.py:CONTENT_PROMPT", "target": "{\"lineno\":27,\"end_lineno\":45,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONTENT_PROMPT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tutorial_assistant.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n@Describe : Tutorial Assistant's prompt templates.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n@Describe : Tutorial Assistant's prompt templates.\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py:COMMON_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:COMMON_PROMPT", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMON_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py:EXTRACT_OCR_MAIN_INFO_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:EXTRACT_OCR_MAIN_INFO_PROMPT", "target": "{\"lineno\":13,\"end_lineno\":27,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py:REPLY_OCR_QUESTION_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:REPLY_OCR_QUESTION_PROMPT", "target": "{\"lineno\":29,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"REPLY_OCR_QUESTION_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py:INVOICE_OCR_SUCCESS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:INVOICE_OCR_SUCCESS", "target": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"INVOICE_OCR_SUCCESS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:ast.Constant:\n@Time : 2023/9/21 16:30:25\n@Author : Stitch-z\n@File : invoice_ocr.py\n@Describe : Prompts of the invoice ocr assistant.\n", "target": "{\"lineno\":4,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 16:30:25\\n@Author : Stitch-z\\n@File : invoice_ocr.py\\n@Describe : Prompts of the invoice ocr assistant.\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/write_analysis_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/ci/write_analysis_code.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/ci/write_analysis_code.py:ASSIGN_TASK_TYPE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/write_analysis_code.py:ASSIGN_TASK_TYPE_PROMPT", "target": "{\"lineno\":1,\"end_lineno\":7,\"type_name\":\"ast.Assign\",\"tokens\":[\"ASSIGN_TASK_TYPE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/write_analysis_code.py:ASSIGN_TASK_TYPE_CONFIG", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/write_analysis_code.py:ASSIGN_TASK_TYPE_CONFIG", "target": "{\"lineno\":9,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"ASSIGN_TASK_TYPE_CONFIG\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/write_analysis_code.py:TOOL_RECOMMENDATION_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/write_analysis_code.py:TOOL_RECOMMENDATION_PROMPT", "target": "{\"lineno\":27,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_RECOMMENDATION_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/write_analysis_code.py:SELECT_FUNCTION_TOOLS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/write_analysis_code.py:SELECT_FUNCTION_TOOLS", "target": "{\"lineno\":44,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"SELECT_FUNCTION_TOOLS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/write_analysis_code.py:CODE_GENERATOR_WITH_TOOLS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/write_analysis_code.py:CODE_GENERATOR_WITH_TOOLS", "target": "{\"lineno\":62,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_GENERATOR_WITH_TOOLS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/write_analysis_code.py:TOOL_USAGE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/write_analysis_code.py:TOOL_USAGE_PROMPT", "target": "{\"lineno\":77,\"end_lineno\":93,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOOL_USAGE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/ml_action.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/ci/ml_action.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/ci/ml_action.py:UPDATE_DATA_COLUMNS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/ml_action.py:UPDATE_DATA_COLUMNS", "target": "{\"lineno\":7,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"UPDATE_DATA_COLUMNS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/ml_action.py:PRINT_DATA_COLUMNS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/ml_action.py:PRINT_DATA_COLUMNS", "target": "{\"lineno\":30,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRINT_DATA_COLUMNS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/ml_action.py:ML_COMMON_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/ml_action.py:ML_COMMON_PROMPT", "target": "{\"lineno\":45,\"end_lineno\":64,\"type_name\":\"ast.Assign\",\"tokens\":[\"ML_COMMON_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/ml_action.py:USE_NO_TOOLS_EXAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/ml_action.py:USE_NO_TOOLS_EXAMPLE", "target": "{\"lineno\":66,\"end_lineno\":86,\"type_name\":\"ast.Assign\",\"tokens\":[\"USE_NO_TOOLS_EXAMPLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/ml_action.py:USE_TOOLS_EXAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/ml_action.py:USE_TOOLS_EXAMPLE", "target": "{\"lineno\":88,\"end_lineno\":125,\"type_name\":\"ast.Assign\",\"tokens\":[\"USE_TOOLS_EXAMPLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/ml_action.py:ML_GENERATE_CODE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/ml_action.py:ML_GENERATE_CODE_PROMPT", "target": "{\"lineno\":127,\"end_lineno\":127,\"type_name\":\"ast.Assign\",\"tokens\":[\"ML_GENERATE_CODE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/ci/ml_action.py:ML_TOOL_USAGE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/ci/ml_action.py:ML_TOOL_USAGE_PROMPT", "target": "{\"lineno\":128,\"end_lineno\":128,\"type_name\":\"ast.Assign\",\"tokens\":[\"ML_TOOL_USAGE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/environment/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:__all__", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:module:metagpt.environment.base_env", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:names:['Environment']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:module:metagpt.environment.android_env.android_env", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.android_env.android_env\",\"names\":[\"AndroidEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:names:['AndroidEnv']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.android_env.android_env\",\"names\":[\"AndroidEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:module:metagpt.environment.mincraft_env.mincraft_env", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.mincraft_env\",\"names\":[\"MincraftExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:names:['MincraftExtEnv']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.mincraft_env\",\"names\":[\"MincraftExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:module:metagpt.environment.werewolf_env.werewolf_env", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.werewolf_env.werewolf_env\",\"names\":[\"WerewolfEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:names:['WerewolfEnv']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.werewolf_env.werewolf_env\",\"names\":[\"WerewolfEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:module:metagpt.environment.stanford_town_env.stanford_town_env", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.stanford_town_env.stanford_town_env\",\"names\":[\"StanfordTownEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:names:['StanfordTownEnv']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.stanford_town_env.stanford_town_env\",\"names\":[\"StanfordTownEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:module:metagpt.environment.software_env.software_env", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.software_env.software_env\",\"names\":[\"SoftwareEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/__init__.py:names:['SoftwareEnv']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.software_env.software_env\",\"names\":[\"SoftwareEnv\"]}}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:ExtEnv:_check_api_exist", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:mark_as_readable", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:mark_as_readable", "target": "{\"lineno\":37,\"end_lineno\":40,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"mark_as_readable\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:mark_as_writeable", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:mark_as_writeable", "target": "{\"lineno\":43,\"end_lineno\":46,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"mark_as_writeable\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:env_write_api_registry", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:env_write_api_registry", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.Assign\",\"tokens\":[\"env_write_api_registry\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/base_env.py:env_read_api_registry", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:env_read_api_registry", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.Assign\",\"tokens\":[\"env_read_api_registry\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:module:enum", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:names:['Enum']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"TYPE_CHECKING\",\"Any\",\"Dict\",\"Iterable\",\"Optional\",\"Set\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:names:['TYPE_CHECKING', 'Any', 'Dict', 'Iterable', 'Optional', 'Set', 'Union']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"TYPE_CHECKING\",\"Any\",\"Dict\",\"Iterable\",\"Optional\",\"Set\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:module:pydantic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:names:['BaseModel', 'ConfigDict', 'Field', 'SerializeAsAny', 'model_validator']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:module:metagpt.context", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:names:['Context']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:module:metagpt.environment.api.env_api", "target": "{\"lineno\":12,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.api.env_api\",\"names\":[\"EnvAPIAbstract\",\"ReadAPIRegistry\",\"WriteAPIRegistry\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:names:['EnvAPIAbstract', 'ReadAPIRegistry', 'WriteAPIRegistry']", "target": "{\"lineno\":12,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.api.env_api\",\"names\":[\"EnvAPIAbstract\",\"ReadAPIRegistry\",\"WriteAPIRegistry\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:module:metagpt.logs", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:names:['logger']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:module:metagpt.schema", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:names:['Message']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:module:metagpt.utils.common", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"get_function_schema\",\"is_coroutine_func\",\"is_send_to\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:names:['get_function_schema', 'is_coroutine_func', 'is_send_to']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"get_function_schema\",\"is_coroutine_func\",\"is_send_to\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:TYPE_CHECKING", "target": "{\"lineno\":21,\"end_lineno\":22,\"type_name\":\"ast.If\",\"tokens\":[\"TYPE_CHECKING\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/base_env.py:ast.Call:Environment.model_rebuild", "target": "{\"lineno\":212,\"end_lineno\":212,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Call\",\"Environment.model_rebuild\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/android_env/android_ext_env.py:AndroidExtEnv:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:subprocess", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:module:pathlib", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:names:['Path']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:names:['Any', 'Optional']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:module:pydantic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:names:['Field']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:module:metagpt.environment.android_env.const", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.android_env.const\",\"names\":[\"ADB_EXEC_FAIL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:names:['ADB_EXEC_FAIL']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.android_env.const\",\"names\":[\"ADB_EXEC_FAIL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:module:metagpt.environment.base_env", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_readable\",\"mark_as_writeable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_ext_env.py:names:['ExtEnv', 'mark_as_readable', 'mark_as_writeable']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_readable\",\"mark_as_writeable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_env.py:module:pydantic", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_env.py:names:['Field']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_env.py:module:metagpt.environment.android_env.android_ext_env", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.android_env.android_ext_env\",\"names\":[\"AndroidExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_env.py:names:['AndroidExtEnv']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.android_env.android_ext_env\",\"names\":[\"AndroidExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_env.py:module:metagpt.environment.base_env", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/android_env.py:names:['Environment']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "is", "source": "metagpt/environment/android_env/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/android_env/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/environment/android_env/const.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/android_env/const.py", "target": "python"}, {"predicate": "is", "source": "metagpt/environment/android_env/const.py:ADB_EXEC_FAIL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/android_env/const.py:ADB_EXEC_FAIL", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Assign\",\"tokens\":[\"ADB_EXEC_FAIL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:StanfordTownExtEnv:_init_maze", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:math", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"math\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:pathlib", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['Path']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['Optional', 'Tuple']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['ConfigDict', 'Field', 'model_validator']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:metagpt.environment.base_env", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_readable\",\"mark_as_writeable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['ExtEnv', 'mark_as_readable', 'mark_as_writeable']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_readable\",\"mark_as_writeable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:module:metagpt.utils.common", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"read_csv_to_list\",\"read_json_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_ext_env.py:names:['read_csv_to_list', 'read_json_file']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"read_csv_to_list\",\"read_json_file\"]}}"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/stanford_town_env/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:module:metagpt.environment.base_env", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:names:['Environment']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:module:metagpt.environment.stanford_town_env.stanford_town_ext_env", "target": "{\"lineno\":6,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.stanford_town_env.stanford_town_ext_env\",\"names\":[\"StanfordTownExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/stanford_town_env/stanford_town_env.py:names:['StanfordTownExtEnv']", "target": "{\"lineno\":6,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.stanford_town_env.stanford_town_ext_env\",\"names\":[\"StanfordTownExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:module:pydantic", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:names:['Field']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:module:metagpt.environment.base_env", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:names:['Environment']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:module:metagpt.environment.werewolf_env.werewolf_ext_env", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.werewolf_env.werewolf_ext_env\",\"names\":[\"WerewolfExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:names:['WerewolfExtEnv']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.werewolf_env.werewolf_ext_env\",\"names\":[\"WerewolfExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:module:metagpt.logs", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:names:['logger']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:module:metagpt.schema", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_env.py:names:['Message']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_role_type_players", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_init_players_state", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_update_players_state", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_check_valid_role", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:WerewolfExtEnv:_check_player_continue", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:STEP_INSTRUCTIONS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:STEP_INSTRUCTIONS", "target": "{\"lineno\":24,\"end_lineno\":97,\"type_name\":\"ast.Assign\",\"tokens\":[\"STEP_INSTRUCTIONS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:random", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"random\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:collections", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"Counter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['Counter']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"Counter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:enum", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['Enum']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['Callable', 'Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['ConfigDict', 'Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:metagpt.environment.base_env", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_readable\",\"mark_as_writeable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['ExtEnv', 'mark_as_readable', 'mark_as_writeable']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_readable\",\"mark_as_writeable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/werewolf_env/werewolf_ext_env.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry:__getitem__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry:__setitem__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/api/env_api.py:EnvAPIRegistry:__len__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/environment/api/env_api.py:module:typing", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/api/env_api.py:names:['Any', 'Callable', 'Union']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/api/env_api.py:module:pydantic", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/api/env_api.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "is", "source": "metagpt/environment/api/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/api/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:re", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:time", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"time\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['Any', 'Iterable']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:langchain.embeddings.openai", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.embeddings.openai\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['OpenAIEmbeddings']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.embeddings.openai\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:langchain.vectorstores", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores\",\"names\":[\"Chroma\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['Chroma']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores\",\"names\":[\"Chroma\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:pydantic", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['ConfigDict', 'Field']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.config2", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config as CONFIG\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['config as CONFIG']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config as CONFIG\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.environment.base_env", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['Environment']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.environment.mincraft_env.const", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.const\",\"names\":[\"MC_CKPT_DIR\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['MC_CKPT_DIR']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.const\",\"names\":[\"MC_CKPT_DIR\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.environment.mincraft_env.mincraft_ext_env", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.mincraft_ext_env\",\"names\":[\"MincraftExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['MincraftExtEnv']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.mincraft_ext_env\",\"names\":[\"MincraftExtEnv\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:module:metagpt.utils.common", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"load_mc_skills_code\",\"read_json_file\",\"write_json_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_env.py:names:['load_mc_skills_code', 'read_json_file', 'write_json_file']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"load_mc_skills_code\",\"read_json_file\",\"write_json_file\"]}}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/process_monitor.py:SubprocessMonitor:_start", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:re", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:subprocess", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:threading", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"threading\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:warnings", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:names:['List']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:psutil", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"psutil\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"define_log_level\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/process_monitor.py:names:['define_log_level']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"define_log_level\"]}}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:MincraftExtEnv:_post_init_ext_env", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:time", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"time\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:requests", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['ConfigDict', 'Field', 'model_validator']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:metagpt.environment.base_env", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_writeable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['ExtEnv', 'mark_as_writeable']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"ExtEnv\",\"mark_as_writeable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:metagpt.environment.mincraft_env.const", "target": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.const\",\"names\":[\"MC_CKPT_DIR\",\"MC_CORE_INVENTORY_ITEMS\",\"MC_CURRICULUM_OB\",\"MC_DEFAULT_WARMUP\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['MC_CKPT_DIR', 'MC_CORE_INVENTORY_ITEMS', 'MC_CURRICULUM_OB', 'MC_DEFAULT_WARMUP', 'METAGPT_ROOT']", "target": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.const\",\"names\":[\"MC_CKPT_DIR\",\"MC_CORE_INVENTORY_ITEMS\",\"MC_CURRICULUM_OB\",\"MC_DEFAULT_WARMUP\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:metagpt.environment.mincraft_env.process_monitor", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.process_monitor\",\"names\":[\"SubprocessMonitor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['SubprocessMonitor']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.mincraft_env.process_monitor\",\"names\":[\"SubprocessMonitor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:module:metagpt.logs", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/mincraft_ext_env.py:names:['logger']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/const.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/const.py", "target": "python"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/const.py:MC_CKPT_DIR", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/const.py:MC_CKPT_DIR", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_CKPT_DIR\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/const.py:MC_LOG_DIR", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/const.py:MC_LOG_DIR", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_LOG_DIR\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/const.py:MC_DEFAULT_WARMUP", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/const.py:MC_DEFAULT_WARMUP", "target": "{\"lineno\":10,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_DEFAULT_WARMUP\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/const.py:MC_CURRICULUM_OB", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/const.py:MC_CURRICULUM_OB", "target": "{\"lineno\":27,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_CURRICULUM_OB\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/mincraft_env/const.py:MC_CORE_INVENTORY_ITEMS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/const.py:MC_CORE_INVENTORY_ITEMS", "target": "{\"lineno\":43,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"MC_CORE_INVENTORY_ITEMS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/const.py:module:metagpt.const", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/const.py:names:['METAGPT_ROOT']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/mincraft_env/const.py:ast.Tuple:['|cobblestone|dirt|coal|.*_pickaxe|.*_sword|.*_axe']", "target": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Tuple\",[\"|cobblestone|dirt|coal|.*_pickaxe|.*_sword|.*_axe\"]],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/environment/software_env/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment/software_env/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/environment/software_env/software_env.py:module:metagpt.environment.base_env", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment/software_env/software_env.py:names:['Environment']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment.base_env\",\"names\":[\"Environment\"]}}"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:Planner:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/planner.py:STRUCTURAL_CONTEXT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:STRUCTURAL_CONTEXT", "target": "{\"lineno\":17,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRUCTURAL_CONTEXT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:module:__future__", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:names:['annotations']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:json", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:module:pydantic", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:module:metagpt.actions.ci.ask_review", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.ask_review\",\"names\":[\"AskReview\",\"ReviewConst\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:names:['AskReview', 'ReviewConst']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.ask_review\",\"names\":[\"AskReview\",\"ReviewConst\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:module:metagpt.actions.ci.write_plan", "target": "{\"lineno\":8,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_plan\",\"names\":[\"WritePlan\",\"precheck_update_plan_from_rsp\",\"update_plan_from_rsp\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:names:['WritePlan', 'precheck_update_plan_from_rsp', 'update_plan_from_rsp']", "target": "{\"lineno\":8,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.ci.write_plan\",\"names\":[\"WritePlan\",\"precheck_update_plan_from_rsp\",\"update_plan_from_rsp\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:module:metagpt.memory", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:names:['Memory']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:module:metagpt.schema", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\",\"Task\",\"TaskResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/planner.py:names:['Message', 'Plan', 'Task', 'TaskResult']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"Plan\",\"Task\",\"TaskResult\"]}}"}, {"predicate": "is", "source": "metagpt/strategy/solver.py:BaseSolver:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:ast.Constant:\n@Time : 2024/1/30 17:13\n@Author : alexanderwu\n@File : solver.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/30 17:13\\n@Author : alexanderwu\\n@File : solver.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:module:abc", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:names:['abstractmethod']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:module:metagpt.actions.action_graph", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_graph\",\"names\":[\"ActionGraph\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:names:['ActionGraph']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_graph\",\"names\":[\"ActionGraph\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:names:['BaseLLM']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:module:metagpt.strategy.search_space", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.search_space\",\"names\":[\"SearchSpace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/solver.py:names:['SearchSpace']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.search_space\",\"names\":[\"SearchSpace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:module:enum", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:names:['Enum']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:module:pydantic", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:module:metagpt.strategy.base", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"BaseEvaluator\",\"BaseParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:names:['BaseEvaluator', 'BaseParser']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"BaseEvaluator\",\"BaseParser\"]}}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver:_bfs_build", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:DFSSolver:_dfs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:_initialize_solver", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:OUTPUT_FORMAT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:OUTPUT_FORMAT", "target": "{\"lineno\":19,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"OUTPUT_FORMAT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:__future__", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['annotations']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:asyncio", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['Any', 'List', 'Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['BaseModel', 'ConfigDict', 'Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.llm", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['LLM']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['BaseLLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.strategy.base", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"ThoughtNode\",\"ThoughtTree\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['ThoughtNode', 'ThoughtTree']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"ThoughtNode\",\"ThoughtTree\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.strategy.tot_schema", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.tot_schema\",\"names\":[\"MethodSelect\",\"Strategy\",\"ThoughtSolverConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['MethodSelect', 'Strategy', 'ThoughtSolverConfig']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.tot_schema\",\"names\":[\"MethodSelect\",\"Strategy\",\"ThoughtSolverConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.utils.common", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['CodeParser']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "is", "source": "metagpt/strategy/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/strategy/search_space.py:SearchSpace:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/strategy/search_space.py:ast.Constant:\n@Time : 2024/1/30 17:15\n@Author : alexanderwu\n@File : search_space.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/30 17:15\\n@Author : alexanderwu\\n@File : search_space.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser:__call__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseEvaluator:__call__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:module:abc", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:names:['ABC']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:names:['List']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:module:anytree", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anytree\",\"names\":[\"Node\",\"RenderTree\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:names:['Node', 'RenderTree']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anytree\",\"names\":[\"Node\",\"RenderTree\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:module:pydantic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:names:['BaseModel']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}]} \ No newline at end of file diff --git a/tests/data/graph_db/networkx.sequence_view.json b/tests/data/graph_db/networkx.sequence_view.json deleted file mode 100644 index ca521bae2b..0000000000 --- a/tests/data/graph_db/networkx.sequence_view.json +++ /dev/null @@ -1 +0,0 @@ -{"directed": true, "multigraph": false, "graph": {}, "nodes": [{"id": "metagpt/schema.py"}, {"id": "source_code"}, {"id": "python"}, {"id": "metagpt/schema.py:AIMessage"}, {"id": "class"}, {"id": "{\"name\":\"AIMessage\",\"package\":\"metagpt/schema.py:AIMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/general_api_base.py"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor"}, {"id": "{\"name\":\"APIRequestor\",\"package\":\"metagpt/provider/general_api_base.py:APIRequestor\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key : NoneType\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"AZURE_AD,OPEN_AI\",\"default_\":\"\",\"description\":\"api_type : AZURE_AD, OPEN_AI\",\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"]},\"api_version\":{\"name\":\"api_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_version\",\"compositions\":[]},\"base_url\":{\"name\":\"base_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"base_url : NoneType\",\"compositions\":[]},\"organization\":{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization : NoneType\",\"compositions\":[]}},\"methods\":{\"arequest\":{\"name\":\"arequest\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[AsyncGenerator[OpenAIResponse,None],bool,str]\",\"description\":\"Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"compositions\":[\"AsyncGenerator\",\"OpenAIResponse\"]},\"description\":\"arequest(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\"]},\"arequest_raw\":{\"name\":\"arequest_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"aiohttp.ClientResponse\",\"description\":\"aiohttp.ClientResponse\",\"compositions\":[\"aiohttp.ClientResponse\"]},\"description\":\"arequest_raw(method, url, session): aiohttp.ClientResponse\",\"aggregations\":[\"aiohttp.ClientResponse\"]},\"request\":{\"name\":\"request\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[Iterator[OpenAIResponse],bool,str]\",\"description\":\"Tuple[Iterator[OpenAIResponse], bool, str]\",\"compositions\":[\"OpenAIResponse\"]},\"description\":\"request(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[Iterator[OpenAIResponse], bool, str]\",\"aggregations\":[\"OpenAIResponse\"]},\"request_headers\":{\"name\":\"request_headers\",\"args\":[{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"extra\",\"type_\":\"\",\"default_\":\"\",\"description\":\"extra\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"request_headers(method: str, extra, request_id: Optional[str]): Dict[str, str]\",\"aggregations\":[]},\"request_raw\":{\"name\":\"request_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"requests.Response\",\"description\":\"requests.Response\",\"compositions\":[\"requests.Response\"]},\"description\":\"request_raw(method, url): requests.Response\",\"aggregations\":[\"requests.Response\"]}},\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"],\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\",\"aiohttp.ClientResponse\",\"requests.Response\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:api_key"}, {"id": "class_property"}, {"id": "{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:api_type"}, {"id": "{\"name\":\"api_type\",\"type_\":\"AZURE_AD,OPEN_AI\",\"default_\":\"\",\"description\":\"api_type : AZURE_AD, OPEN_AI\",\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:api_version"}, {"id": "{\"name\":\"api_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_version\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:base_url"}, {"id": "{\"name\":\"base_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"base_url : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:organization"}, {"id": "{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:arequest"}, {"id": "class_method"}, {"id": "{\"name\":\"arequest\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[AsyncGenerator[OpenAIResponse,None],bool,str]\",\"description\":\"Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"compositions\":[\"AsyncGenerator\",\"OpenAIResponse\"]},\"description\":\"arequest(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:arequest_raw"}, {"id": "{\"name\":\"arequest_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"aiohttp.ClientResponse\",\"description\":\"aiohttp.ClientResponse\",\"compositions\":[\"aiohttp.ClientResponse\"]},\"description\":\"arequest_raw(method, url, session): aiohttp.ClientResponse\",\"aggregations\":[\"aiohttp.ClientResponse\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:request"}, {"id": "{\"name\":\"request\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[Iterator[OpenAIResponse],bool,str]\",\"description\":\"Tuple[Iterator[OpenAIResponse], bool, str]\",\"compositions\":[\"OpenAIResponse\"]},\"description\":\"request(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[Iterator[OpenAIResponse], bool, str]\",\"aggregations\":[\"OpenAIResponse\"]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:request_headers"}, {"id": "{\"name\":\"request_headers\",\"args\":[{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"extra\",\"type_\":\"\",\"default_\":\"\",\"description\":\"extra\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"request_headers(method: str, extra, request_id: Optional[str]): Dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:request_raw"}, {"id": "{\"name\":\"request_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"requests.Response\",\"description\":\"requests.Response\",\"compositions\":[\"requests.Response\"]},\"description\":\"request_raw(method, url): requests.Response\",\"aggregations\":[\"requests.Response\"]}"}, {"id": "?:AZURE_AD"}, {"id": "?:OPEN_AI"}, {"id": "?:OpenAIResponse"}, {"id": "?:AsyncGenerator"}, {"id": "?:aiohttp.ClientResponse"}, {"id": "?:requests.Response"}, {"id": "metagpt/actions/action.py"}, {"id": "metagpt/actions/action.py:Action"}, {"id": "{\"name\":\"Action\",\"package\":\"metagpt/actions/action.py:Action\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_\":\"\",\"description\":\"i_context : Union[dict, CodingContext, CodeSummarizeContext, TestingContext, RunCodeContext, CodePlanAndChangeContext, str, None]\",\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"node\":{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},\"prefix\":{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"set_name_if_empty\":{\"name\":\"set_name_if_empty\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_name_if_empty(values)\",\"aggregations\":[]},\"set_prefix\":{\"name\":\"set_prefix\",\"args\":[{\"name\":\"prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prefix\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_prefix(prefix)\",\"aggregations\":[]}},\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/action.py:Action:desc"}, {"id": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_\":\"\",\"description\":\"i_context : Union[dict, CodingContext, CodeSummarizeContext, TestingContext, RunCodeContext, CodePlanAndChangeContext, str, None]\",\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"]}"}, {"id": "metagpt/actions/action.py:Action:model_config"}, {"id": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:name"}, {"id": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:node"}, {"id": "{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:prefix"}, {"id": "{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:project_name"}, {"id": "{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:project_path"}, {"id": "{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:prompt_schema"}, {"id": "{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:repo"}, {"id": "{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}"}, {"id": "metagpt/actions/action.py:Action:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action.py:Action:set_name_if_empty"}, {"id": "{\"name\":\"set_name_if_empty\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_name_if_empty(values)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action.py:Action:set_prefix"}, {"id": "{\"name\":\"set_prefix\",\"args\":[{\"name\":\"prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prefix\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_prefix(prefix)\",\"aggregations\":[]}"}, {"id": "?:CodePlanAndChangeContext"}, {"id": "?:CodeSummarizeContext"}, {"id": "?:CodingContext"}, {"id": "?:RunCodeContext"}, {"id": "?:TestingContext"}, {"id": "metagpt/actions/action_node.py"}, {"id": "metagpt/actions/action_node.py:ActionNode"}, {"id": "{\"name\":\"ActionNode\",\"package\":\"metagpt/actions/action_node.py:ActionNode\",\"attributes\":{\"children\":{\"name\":\"children\",\"type_\":\"dict[str,ActionNode]\",\"default_\":\"\",\"description\":\"children : dict[str, 'ActionNode']\",\"compositions\":[\"ActionNode\"]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]},\"example\":{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]},\"expected_type\":{\"name\":\"expected_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"expected_type : Type\",\"compositions\":[\"Type\"]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]},\"instruction\":{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]},\"key\":{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key : str\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"schema\":{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema : str\",\"compositions\":[]}},\"methods\":{\"add_child\":{\"name\":\"add_child\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_child(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"add_children\":{\"name\":\"add_children\",\"args\":[{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_children(nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]},\"auto_review\":{\"name\":\"auto_review\",\"args\":[{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_review(template: str): dict[str, str]\",\"aggregations\":[]},\"auto_revise\":{\"name\":\"auto_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]},{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_revise(revise_mode: ReviseMode, template: str): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"compile\":{\"name\":\"compile\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"template\",\"type_\":\"\",\"default_\":\"\",\"description\":\"template\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile(context, schema, mode, template, exclude): str\",\"aggregations\":[]},\"compile_example\":{\"name\":\"compile_example\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_example(schema, mode, tag, exclude): str\",\"aggregations\":[]},\"compile_instruction\":{\"name\":\"compile_instruction\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_instruction(schema, mode, tag, exclude): str\",\"aggregations\":[]},\"compile_to\":{\"name\":\"compile_to\",\"args\":[{\"name\":\"i\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"i: Dict\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"kv_sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kv_sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_to(i: Dict, schema, kv_sep): str\",\"aggregations\":[]},\"create_children_class\":{\"name\":\"create_children_class\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_children_class(exclude)\",\"aggregations\":[]},\"create_class\":{\"name\":\"create_class\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]},{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_class(mode: str, class_name: str, exclude)\",\"aggregations\":[]},\"create_model_class\":{\"name\":\"create_model_class\",\"args\":[{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"default_\":\"\",\"description\":\"mapping: Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_model_class(class_name: str, mapping: Dict[str, Tuple[Type, Any]])\",\"aggregations\":[\"Type\"]},\"fill\":{\"name\":\"fill\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"strgy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strgy\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fill(context, llm, schema, mode, strgy, timeout, exclude)\",\"aggregations\":[]},\"from_children\":{\"name\":\"from_children\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_children(key, nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]},\"from_pydantic\":{\"name\":\"from_pydantic\",\"args\":[{\"name\":\"model\",\"type_\":\"Type[BaseModel]\",\"default_\":\"\",\"description\":\"model: Type[BaseModel]\",\"compositions\":[\"BaseModel\",\"Type\"]},{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_pydantic(model: Type[BaseModel], key: str)\",\"aggregations\":[\"BaseModel\",\"Type\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key)\",\"aggregations\":[]},\"get_child\":{\"name\":\"get_child\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union['ActionNode',None]\",\"description\":\"Union['ActionNode', None]\",\"compositions\":[\"ActionNode\"]},\"description\":\"get_child(key: str): Union['ActionNode', None]\",\"aggregations\":[\"ActionNode\"]},\"get_children_mapping\":{\"name\":\"get_children_mapping\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_children_mapping(exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"get_children_mapping_old\":{\"name\":\"get_children_mapping_old\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_children_mapping_old(exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"get_mapping\":{\"name\":\"get_mapping\",\"args\":[{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_mapping(mode, exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"get_self_mapping\":{\"name\":\"get_self_mapping\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_self_mapping(): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"human_review\":{\"name\":\"human_review\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_review(): dict[str, str]\",\"aggregations\":[]},\"human_revise\":{\"name\":\"human_revise\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_revise(): dict[str, str]\",\"aggregations\":[]},\"keys\":{\"name\":\"keys\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"keys(mode: str): list\",\"aggregations\":[]},\"review\":{\"name\":\"review\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"review(strgy: str, review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]},\"revise\":{\"name\":\"revise\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"revise(strgy: str, revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"set_context\":{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context)\",\"aggregations\":[]},\"set_llm\":{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm)\",\"aggregations\":[]},\"set_recursive\":{\"name\":\"set_recursive\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_recursive(name, value)\",\"aggregations\":[]},\"simple_fill\":{\"name\":\"simple_fill\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_fill(schema, mode, timeout, exclude)\",\"aggregations\":[]},\"simple_review\":{\"name\":\"simple_review\",\"args\":[{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_review(review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]},\"simple_revise\":{\"name\":\"simple_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"simple_revise(revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"tagging\":{\"name\":\"tagging\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"tagging(text, schema, tag): str\",\"aggregations\":[]},\"to_dict\":{\"name\":\"to_dict\",\"args\":[{\"name\":\"format_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format_func\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"to_dict(format_func, mode, exclude): Dict\",\"aggregations\":[]},\"update_instruct_content\":{\"name\":\"update_instruct_content\",\"args\":[{\"name\":\"incre_data\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"incre_data: dict[str, Any]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_instruct_content(incre_data: dict[str, Any])\",\"aggregations\":[]}},\"compositions\":[\"ActionNode\",\"Type\",\"BaseModel\"],\"aggregations\":[\"ReviseMode\",\"ReviewMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:children"}, {"id": "{\"name\":\"children\",\"type_\":\"dict[str,ActionNode]\",\"default_\":\"\",\"description\":\"children : dict[str, 'ActionNode']\",\"compositions\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:content"}, {"id": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:context"}, {"id": "{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:example"}, {"id": "{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:expected_type"}, {"id": "{\"name\":\"expected_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"expected_type : Type\",\"compositions\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:instruct_content"}, {"id": "{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:instruction"}, {"id": "{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:key"}, {"id": "{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:llm"}, {"id": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:schema"}, {"id": "{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:add_child"}, {"id": "{\"name\":\"add_child\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_child(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:add_children"}, {"id": "{\"name\":\"add_children\",\"args\":[{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_children(nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:auto_review"}, {"id": "{\"name\":\"auto_review\",\"args\":[{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_review(template: str): dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:auto_revise"}, {"id": "{\"name\":\"auto_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]},{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_revise(revise_mode: ReviseMode, template: str): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:compile"}, {"id": "{\"name\":\"compile\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"template\",\"type_\":\"\",\"default_\":\"\",\"description\":\"template\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile(context, schema, mode, template, exclude): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:compile_example"}, {"id": "{\"name\":\"compile_example\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_example(schema, mode, tag, exclude): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:compile_instruction"}, {"id": "{\"name\":\"compile_instruction\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_instruction(schema, mode, tag, exclude): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:compile_to"}, {"id": "{\"name\":\"compile_to\",\"args\":[{\"name\":\"i\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"i: Dict\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"kv_sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kv_sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_to(i: Dict, schema, kv_sep): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:create_children_class"}, {"id": "{\"name\":\"create_children_class\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_children_class(exclude)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:create_class"}, {"id": "{\"name\":\"create_class\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]},{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_class(mode: str, class_name: str, exclude)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:create_model_class"}, {"id": "{\"name\":\"create_model_class\",\"args\":[{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"default_\":\"\",\"description\":\"mapping: Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_model_class(class_name: str, mapping: Dict[str, Tuple[Type, Any]])\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:fill"}, {"id": "{\"name\":\"fill\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"strgy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strgy\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fill(context, llm, schema, mode, strgy, timeout, exclude)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:from_children"}, {"id": "{\"name\":\"from_children\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_children(key, nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:from_pydantic"}, {"id": "{\"name\":\"from_pydantic\",\"args\":[{\"name\":\"model\",\"type_\":\"Type[BaseModel]\",\"default_\":\"\",\"description\":\"model: Type[BaseModel]\",\"compositions\":[\"BaseModel\",\"Type\"]},{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_pydantic(model: Type[BaseModel], key: str)\",\"aggregations\":[\"BaseModel\",\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:get_child"}, {"id": "{\"name\":\"get_child\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union['ActionNode',None]\",\"description\":\"Union['ActionNode', None]\",\"compositions\":[\"ActionNode\"]},\"description\":\"get_child(key: str): Union['ActionNode', None]\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:get_children_mapping"}, {"id": "{\"name\":\"get_children_mapping\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_children_mapping(exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:get_children_mapping_old"}, {"id": "{\"name\":\"get_children_mapping_old\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_children_mapping_old(exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:get_mapping"}, {"id": "{\"name\":\"get_mapping\",\"args\":[{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_mapping(mode, exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:get_self_mapping"}, {"id": "{\"name\":\"get_self_mapping\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_self_mapping(): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:human_review"}, {"id": "{\"name\":\"human_review\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_review(): dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:human_revise"}, {"id": "{\"name\":\"human_revise\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_revise(): dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:keys"}, {"id": "{\"name\":\"keys\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"keys(mode: str): list\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:review"}, {"id": "{\"name\":\"review\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"review(strgy: str, review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:revise"}, {"id": "{\"name\":\"revise\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"revise(strgy: str, revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:set_context"}, {"id": "{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:set_llm"}, {"id": "{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:set_recursive"}, {"id": "{\"name\":\"set_recursive\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_recursive(name, value)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:simple_fill"}, {"id": "{\"name\":\"simple_fill\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_fill(schema, mode, timeout, exclude)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:simple_review"}, {"id": "{\"name\":\"simple_review\",\"args\":[{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_review(review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:simple_revise"}, {"id": "{\"name\":\"simple_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"simple_revise(revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:tagging"}, {"id": "{\"name\":\"tagging\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"tagging(text, schema, tag): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:to_dict"}, {"id": "{\"name\":\"to_dict\",\"args\":[{\"name\":\"format_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format_func\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"to_dict(format_func, mode, exclude): Dict\",\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ActionNode:update_instruct_content"}, {"id": "{\"name\":\"update_instruct_content\",\"args\":[{\"name\":\"incre_data\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"incre_data: dict[str, Any]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_instruct_content(incre_data: dict[str, Any])\",\"aggregations\":[]}"}, {"id": "?:ActionNode"}, {"id": "?:Type"}, {"id": "?:BaseModel"}, {"id": "?:ReviseMode"}, {"id": "?:ReviewMode"}, {"id": "metagpt/actions/action_output.py"}, {"id": "metagpt/actions/action_output.py:ActionOutput"}, {"id": "{\"name\":\"ActionOutput\",\"package\":\"metagpt/actions/action_output.py:ActionOutput\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}},\"methods\":{},\"compositions\":[\"BaseModel\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/action_output.py:ActionOutput:content"}, {"id": "metagpt/actions/action_output.py:ActionOutput:instruct_content"}, {"id": "metagpt/actions"}, {"id": ""}, {"id": "metagpt/actions:ActionType"}, {"id": "{\"name\":\"ActionType\",\"package\":\"metagpt/actions:ActionType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions:ActionType:name"}, {"id": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:ApiType"}, {"id": "{\"name\":\"ApiType\",\"package\":\"metagpt/provider/general_api_base.py:ApiType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"from_str\":{\"name\":\"from_str\",\"args\":[{\"name\":\"label\",\"type_\":\"\",\"default_\":\"\",\"description\":\"label\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_str(label)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/general_api_base.py:ApiType:name"}, {"id": "metagpt/provider/general_api_base.py:ApiType:from_str"}, {"id": "{\"name\":\"from_str\",\"args\":[{\"name\":\"label\",\"type_\":\"\",\"default_\":\"\",\"description\":\"label\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_str(label)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/architect.py"}, {"id": "metagpt/roles/architect.py:Architect"}, {"id": "{\"name\":\"Architect\",\"package\":\"metagpt/roles/architect.py:Architect\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/architect.py:Architect:constraints"}, {"id": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/architect.py:Architect:goal"}, {"id": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/architect.py:Architect:name"}, {"id": "metagpt/roles/architect.py:Architect:profile"}, {"id": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction"}, {"id": "{\"name\":\"ArgumentsParingAction\",\"package\":\"metagpt/actions/skill_action.py:ArgumentsParingAction\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"Optional[Dict]\",\"default_\":\"\",\"description\":\"args : Optional[Dict]\",\"compositions\":[]},\"ask\":{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]},\"prompt\":{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]},\"skill\":{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}},\"methods\":{\"parse_arguments\":{\"name\":\"parse_arguments\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill_name\",\"compositions\":[]},{\"name\":\"txt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"txt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"parse_arguments(skill_name, txt): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:args"}, {"id": "{\"name\":\"args\",\"type_\":\"Optional[Dict]\",\"default_\":\"\",\"description\":\"args : Optional[Dict]\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:ask"}, {"id": "{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt"}, {"id": "{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp"}, {"id": "{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill"}, {"id": "{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:parse_arguments"}, {"id": "{\"name\":\"parse_arguments\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill_name\",\"compositions\":[]},{\"name\":\"txt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"txt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"parse_arguments(skill_name, txt): dict\",\"aggregations\":[]}"}, {"id": "metagpt/actions/skill_action.py:ArgumentsParingAction:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}"}, {"id": "?:Message"}, {"id": "metagpt/roles/assistant.py"}, {"id": "metagpt/roles/assistant.py:Assistant"}, {"id": "{\"name\":\"Assistant\",\"package\":\"metagpt/roles/assistant.py:Assistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"Optional[SkillsDeclaration]\",\"default_\":\"\",\"description\":\"skills : Optional[SkillsDeclaration]\",\"compositions\":[\"SkillsDeclaration\"]}},\"methods\":{\"act\":{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"act(): Message\",\"aggregations\":[\"Message\"]},\"get_memory\":{\"name\":\"get_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_memory(): str\",\"aggregations\":[]},\"load_memory\":{\"name\":\"load_memory\",\"args\":[{\"name\":\"m\",\"type_\":\"\",\"default_\":\"\",\"description\":\"m\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_memory(m)\",\"aggregations\":[]},\"refine_memory\":{\"name\":\"refine_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"refine_memory(): str\",\"aggregations\":[]},\"skill_handler\":{\"name\":\"skill_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"skill_handler(text): bool\",\"aggregations\":[]},\"talk\":{\"name\":\"talk\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"talk(text)\",\"aggregations\":[]},\"talk_handler\":{\"name\":\"talk_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"talk_handler(text): bool\",\"aggregations\":[]},\"think\":{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"think(): bool\",\"aggregations\":[]}},\"compositions\":[\"SkillsDeclaration\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/assistant.py:Assistant:constraints"}, {"id": "metagpt/roles/assistant.py:Assistant:desc"}, {"id": "metagpt/roles/assistant.py:Assistant:goal"}, {"id": "metagpt/roles/assistant.py:Assistant:memory"}, {"id": "{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:name"}, {"id": "metagpt/roles/assistant.py:Assistant:profile"}, {"id": "metagpt/roles/assistant.py:Assistant:skills"}, {"id": "{\"name\":\"skills\",\"type_\":\"Optional[SkillsDeclaration]\",\"default_\":\"\",\"description\":\"skills : Optional[SkillsDeclaration]\",\"compositions\":[\"SkillsDeclaration\"]}"}, {"id": "metagpt/roles/assistant.py:Assistant:act"}, {"id": "{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"act(): Message\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/assistant.py:Assistant:get_memory"}, {"id": "{\"name\":\"get_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_memory(): str\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:load_memory"}, {"id": "{\"name\":\"load_memory\",\"args\":[{\"name\":\"m\",\"type_\":\"\",\"default_\":\"\",\"description\":\"m\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_memory(m)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:refine_memory"}, {"id": "{\"name\":\"refine_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"refine_memory(): str\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:skill_handler"}, {"id": "{\"name\":\"skill_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"skill_handler(text): bool\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:talk"}, {"id": "{\"name\":\"talk\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"talk(text)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:talk_handler"}, {"id": "{\"name\":\"talk_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"talk_handler(text): bool\",\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:Assistant:think"}, {"id": "{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"think(): bool\",\"aggregations\":[]}"}, {"id": "?:SkillsDeclaration"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient"}, {"id": "{\"name\":\"AsyncSSEClient\",\"package\":\"metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient\",\"attributes\":{},\"methods\":{\"stream\":{\"name\":\"stream\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"stream(): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:stream"}, {"id": "{\"name\":\"stream\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"stream(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/context.py"}, {"id": "metagpt/context.py:AttrDict"}, {"id": "{\"name\":\"AttrDict\",\"package\":\"metagpt/context.py:AttrDict\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"default\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"default: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key, default: Any)\",\"aggregations\":[]},\"remove\":{\"name\":\"remove\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove(key)\",\"aggregations\":[]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"val\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"val: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key, val: Any)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/context.py:AttrDict:model_config"}, {"id": "metagpt/context.py:AttrDict:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"default\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"default: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key, default: Any)\",\"aggregations\":[]}"}, {"id": "metagpt/context.py:AttrDict:remove"}, {"id": "{\"name\":\"remove\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove(key)\",\"aggregations\":[]}"}, {"id": "metagpt/context.py:AttrDict:set"}, {"id": "{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"val\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"val: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key, val: Any)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py"}, {"id": "metagpt/tools/iflytek_tts.py:AudioData"}, {"id": "{\"name\":\"AudioData\",\"package\":\"metagpt/tools/iflytek_tts.py:AudioData\",\"attributes\":{\"audio\":{\"name\":\"audio\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"audio : str\",\"compositions\":[]},\"ced\":{\"name\":\"ced\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ced : str\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"status : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:AudioData:audio"}, {"id": "{\"name\":\"audio\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"audio : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:AudioData:ced"}, {"id": "{\"name\":\"ced\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ced : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:AudioData:status"}, {"id": "{\"name\":\"status\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"status : int\",\"compositions\":[]}"}, {"id": "metagpt/provider/azure_openai_api.py"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM"}, {"id": "{\"name\":\"AzureOpenAILLM\",\"package\":\"metagpt/provider/azure_openai_api.py:AzureOpenAILLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"AsyncAzureOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncAzureOpenAI\",\"compositions\":[\"AsyncAzureOpenAI\"]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"AsyncAzureOpenAI\"],\"aggregations\":[]}"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:aclient"}, {"id": "{\"name\":\"aclient\",\"type_\":\"AsyncAzureOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncAzureOpenAI\",\"compositions\":[\"AsyncAzureOpenAI\"]}"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:model"}, {"id": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}"}, {"id": "?:AsyncAzureOpenAI"}, {"id": "metagpt/tools/azure_tts.py"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS"}, {"id": "{\"name\":\"AzureTTS\",\"package\":\"metagpt/tools/azure_tts.py:AzureTTS\",\"attributes\":{\"region\":{\"name\":\"region\",\"type_\":\"\",\"default_\":\"\",\"description\":\"region\",\"compositions\":[]},\"subscription_key\":{\"name\":\"subscription_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subscription_key\",\"compositions\":[]}},\"methods\":{\"role_style_text\":{\"name\":\"role_style_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_style_text(role, style, text)\",\"aggregations\":[]},\"role_text\":{\"name\":\"role_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_text(role, text)\",\"aggregations\":[]},\"style_text\":{\"name\":\"style_text\",\"args\":[{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"style_text(style, text)\",\"aggregations\":[]},\"synthesize_speech\":{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_file\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(lang, voice, text, output_file)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:region"}, {"id": "{\"name\":\"region\",\"type_\":\"\",\"default_\":\"\",\"description\":\"region\",\"compositions\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:subscription_key"}, {"id": "{\"name\":\"subscription_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subscription_key\",\"compositions\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:role_style_text"}, {"id": "{\"name\":\"role_style_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_style_text(role, style, text)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:role_text"}, {"id": "{\"name\":\"role_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_text(role, text)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:style_text"}, {"id": "{\"name\":\"style_text\",\"args\":[{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"style_text(style, text)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:synthesize_speech"}, {"id": "{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_file\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(lang, voice, text, output_file)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py"}, {"id": "metagpt/tools/prompt_writer.py:BEAGECTemplate"}, {"id": "{\"name\":\"BEAGECTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:BEAGECTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:BEAGECTemplate:gen"}, {"id": "{\"name\":\"gen\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen()\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py"}, {"id": "metagpt/strategy/tot.py:BFSSolver"}, {"id": "{\"name\":\"BFSSolver\",\"package\":\"metagpt/strategy/tot.py:BFSSolver\",\"attributes\":{\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}},\"methods\":{\"generate_and_evaluate_nodes\":{\"name\":\"generate_and_evaluate_nodes\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_value\",\"compositions\":[]},{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_and_evaluate_nodes(current_state, current_value, node)\",\"aggregations\":[]},\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:BFSSolver:thought_tree"}, {"id": "{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot.py:BFSSolver:generate_and_evaluate_nodes"}, {"id": "{\"name\":\"generate_and_evaluate_nodes\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_value\",\"compositions\":[]},{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_and_evaluate_nodes(current_state, current_value, node)\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:BFSSolver:solve"}, {"id": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:BaseContext"}, {"id": "{\"name\":\"BaseContext\",\"package\":\"metagpt/schema.py:BaseContext\",\"attributes\":{},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[T]\",\"description\":\"Optional[T]\",\"compositions\":[\"T\"]},\"description\":\"loads(val: str): Optional[T]\",\"aggregations\":[\"T\"]}},\"compositions\":[],\"aggregations\":[\"T\"]}"}, {"id": "metagpt/schema.py:BaseContext:loads"}, {"id": "{\"name\":\"loads\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[T]\",\"description\":\"Optional[T]\",\"compositions\":[\"T\"]},\"description\":\"loads(val: str): Optional[T]\",\"aggregations\":[\"T\"]}"}, {"id": "?:T"}, {"id": "metagpt/strategy/base.py"}, {"id": "metagpt/strategy/base.py:BaseEvaluator"}, {"id": "{\"name\":\"BaseEvaluator\",\"package\":\"metagpt/strategy/base.py:BaseEvaluator\",\"attributes\":{},\"methods\":{\"status_verify\":{\"name\":\"status_verify\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"status_verify()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:BaseEvaluator:status_verify"}, {"id": "{\"name\":\"status_verify\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"status_verify()\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py"}, {"id": "metagpt/provider/base_llm.py:BaseLLM"}, {"id": "{\"name\":\"BaseLLM\",\"package\":\"metagpt/provider/base_llm.py:BaseLLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"Optional[Union[AsyncOpenAI]]\",\"default_\":\"\",\"description\":\"aclient : Optional[Union[AsyncOpenAI]]\",\"compositions\":[\"AsyncOpenAI\"]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"model\":{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]},\"system_prompt\":{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], timeout, stream): str\",\"aggregations\":[]},\"aask_batch\":{\"name\":\"aask_batch\",\"args\":[{\"name\":\"msgs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"msgs: list\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask_batch(msgs: list, timeout): str\",\"aggregations\":[]},\"aask_code\":{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]], timeout): dict\",\"aggregations\":[\"Message\"]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"get_choice_delta_text\":{\"name\":\"get_choice_delta_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_delta_text(rsp: dict): str\",\"aggregations\":[]},\"get_choice_function\":{\"name\":\"get_choice_function\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function(rsp: dict): dict\",\"aggregations\":[]},\"get_choice_function_arguments\":{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: dict): dict\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}},\"compositions\":[\"AsyncOpenAI\",\"CostManager\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:aclient"}, {"id": "{\"name\":\"aclient\",\"type_\":\"Optional[Union[AsyncOpenAI]]\",\"default_\":\"\",\"description\":\"aclient : Optional[Union[AsyncOpenAI]]\",\"compositions\":[\"AsyncOpenAI\"]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:config"}, {"id": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:cost_manager"}, {"id": "{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:model"}, {"id": "{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:system_prompt"}, {"id": "{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:use_system_prompt"}, {"id": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:aask"}, {"id": "{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], timeout, stream): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:aask_batch"}, {"id": "{\"name\":\"aask_batch\",\"args\":[{\"name\":\"msgs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"msgs: list\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask_batch(msgs: list, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:aask_code"}, {"id": "{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]], timeout): dict\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:acompletion"}, {"id": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:acompletion_text"}, {"id": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:get_choice_delta_text"}, {"id": "{\"name\":\"get_choice_delta_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_delta_text(rsp: dict): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function"}, {"id": "{\"name\":\"get_choice_function\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function(rsp: dict): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function_arguments"}, {"id": "{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: dict): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:get_choice_text"}, {"id": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}"}, {"id": "?:AsyncOpenAI"}, {"id": "?:CostManager"}, {"id": "metagpt/strategy/base.py:BaseParser"}, {"id": "{\"name\":\"BaseParser\",\"package\":\"metagpt/strategy/base.py:BaseParser\",\"attributes\":{},\"methods\":{\"propose\":{\"name\":\"propose\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"propose(current_state: str): str\",\"aggregations\":[]},\"sample\":{\"name\":\"sample\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"sample(current_state: str): str\",\"aggregations\":[]},\"value\":{\"name\":\"value\",\"args\":[{\"name\":\"input\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"value(input: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:BaseParser:propose"}, {"id": "{\"name\":\"propose\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"propose(current_state: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:BaseParser:sample"}, {"id": "{\"name\":\"sample\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"sample(current_state: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:BaseParser:value"}, {"id": "{\"name\":\"value\",\"args\":[{\"name\":\"input\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"value(input: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin"}, {"id": "{\"name\":\"BasePostProcessPlugin\",\"package\":\"metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin\",\"attributes\":{\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]},\"run_extract_content_from_output\":{\"name\":\"run_extract_content_from_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"right_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"right_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_extract_content_from_output(content: str, right_key: str): str\",\"aggregations\":[]},\"run_repair_llm_output\":{\"name\":\"run_repair_llm_output\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_repair_llm_output(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]},\"run_repair_llm_raw_output\":{\"name\":\"run_repair_llm_raw_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"req_keys\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"req_keys: list[str]\",\"compositions\":[]},{\"name\":\"repair_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"repair_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_repair_llm_raw_output(content: str, req_keys: list[str], repair_type: str): str\",\"aggregations\":[]},\"run_retry_parse_json_text\":{\"name\":\"run_retry_parse_json_text\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_retry_parse_json_text(content: str): Union[dict, list]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:model"}, {"id": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_extract_content_from_output"}, {"id": "{\"name\":\"run_extract_content_from_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"right_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"right_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_extract_content_from_output(content: str, right_key: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_output"}, {"id": "{\"name\":\"run_repair_llm_output\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_repair_llm_output(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_raw_output"}, {"id": "{\"name\":\"run_repair_llm_raw_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"req_keys\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"req_keys: list[str]\",\"compositions\":[]},{\"name\":\"repair_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"repair_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_repair_llm_raw_output(content: str, req_keys: list[str], repair_type: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_retry_parse_json_text"}, {"id": "{\"name\":\"run_retry_parse_json_text\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_retry_parse_json_text(content: str): Union[dict, list]\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py"}, {"id": "metagpt/document_store/base_store.py:BaseStore"}, {"id": "{\"name\":\"BaseStore\",\"package\":\"metagpt/document_store/base_store.py:BaseStore\",\"attributes\":{},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search()\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py:BaseStore:add"}, {"id": "{\"name\":\"add\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py:BaseStore:search"}, {"id": "{\"name\":\"search\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py:BaseStore:write"}, {"id": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory"}, {"id": "{\"name\":\"BrainMemory\",\"package\":\"metagpt/memory/brain_memory.py:BrainMemory\",\"attributes\":{\"cacheable\":{\"name\":\"cacheable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"cacheable : bool\",\"compositions\":[]},\"historical_summary\":{\"name\":\"historical_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"historical_summary : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"history : List[Message]\",\"compositions\":[\"Message\"]},\"history_text\":{\"name\":\"history_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_text\",\"compositions\":[]},\"is_dirty\":{\"name\":\"is_dirty\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_dirty : bool\",\"compositions\":[]},\"is_history_available\":{\"name\":\"is_history_available\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_history_available\",\"compositions\":[]},\"knowledge\":{\"name\":\"knowledge\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"knowledge : List[Message]\",\"compositions\":[\"Message\"]},\"last_history_id\":{\"name\":\"last_history_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"last_history_id : str\",\"compositions\":[]},\"last_talk\":{\"name\":\"last_talk\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"last_talk : Optional[str]\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}},\"methods\":{\"add_answer\":{\"name\":\"add_answer\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_answer(msg: Message)\",\"aggregations\":[\"Message\"]},\"add_history\":{\"name\":\"add_history\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_history(msg: Message)\",\"aggregations\":[\"Message\"]},\"add_talk\":{\"name\":\"add_talk\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_talk(msg: Message)\",\"aggregations\":[\"Message\"]},\"dumps\":{\"name\":\"dumps\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"dumps(redis_key: str, timeout_sec: int)\",\"aggregations\":[]},\"exists\":{\"name\":\"exists\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"exists(text): bool\",\"aggregations\":[]},\"extract_info\":{\"name\":\"extract_info\",\"args\":[{\"name\":\"input_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"input_string\",\"compositions\":[]},{\"name\":\"pattern\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pattern\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_info(input_string, pattern)\",\"aggregations\":[]},\"get_knowledge\":{\"name\":\"get_knowledge\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_knowledge(): str\",\"aggregations\":[]},\"get_title\":{\"name\":\"get_title\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_title(llm, max_words): str\",\"aggregations\":[]},\"is_related\":{\"name\":\"is_related\",\"args\":[{\"name\":\"text1\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text1\",\"compositions\":[]},{\"name\":\"text2\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text2\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_related(text1, text2, llm)\",\"aggregations\":[]},\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'BrainMemory'\",\"description\":\"'BrainMemory'\",\"compositions\":[\"BrainMemory\"]},\"description\":\"loads(redis_key: str): 'BrainMemory'\",\"aggregations\":[\"BrainMemory\"]},\"pop_last_talk\":{\"name\":\"pop_last_talk\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pop_last_talk()\",\"aggregations\":[]},\"rewrite\":{\"name\":\"rewrite\",\"args\":[{\"name\":\"sentence\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sentence: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rewrite(sentence: str, context: str, llm)\",\"aggregations\":[]},\"set_history_summary\":{\"name\":\"set_history_summary\",\"args\":[{\"name\":\"history_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_summary\",\"compositions\":[]},{\"name\":\"redis_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"redis_key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_history_summary(history_summary, redis_key)\",\"aggregations\":[]},\"split_texts\":{\"name\":\"split_texts\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"window_size\",\"type_\":\"\",\"default_\":\"\",\"description\":\"window_size\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"split_texts(text: str, window_size): List[str]\",\"aggregations\":[]},\"summarize\":{\"name\":\"summarize\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]},{\"name\":\"keep_language\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"keep_language: bool\",\"compositions\":[]},{\"name\":\"limit\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"limit: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize(llm, max_words, keep_language: bool, limit: int)\",\"aggregations\":[]},\"to_int\":{\"name\":\"to_int\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"default_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"default_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_int(v, default_value)\",\"aggregations\":[]},\"to_metagpt_history_format\":{\"name\":\"to_metagpt_history_format\",\"args\":[{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"to_metagpt_history_format(history): str\",\"aggregations\":[]},\"to_redis_key\":{\"name\":\"to_redis_key\",\"args\":[{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix: str\",\"compositions\":[]},{\"name\":\"user_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"user_id: str\",\"compositions\":[]},{\"name\":\"chat_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chat_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_redis_key(prefix: str, user_id: str, chat_id: str)\",\"aggregations\":[]}},\"compositions\":[\"Message\",\"BaseLLM\"],\"aggregations\":[\"BrainMemory\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:cacheable"}, {"id": "{\"name\":\"cacheable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"cacheable : bool\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:historical_summary"}, {"id": "{\"name\":\"historical_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"historical_summary : str\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:history"}, {"id": "{\"name\":\"history\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"history : List[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:history_text"}, {"id": "{\"name\":\"history_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_text\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:is_dirty"}, {"id": "{\"name\":\"is_dirty\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_dirty : bool\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available"}, {"id": "{\"name\":\"is_history_available\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_history_available\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:knowledge"}, {"id": "{\"name\":\"knowledge\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"knowledge : List[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:last_history_id"}, {"id": "{\"name\":\"last_history_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"last_history_id : str\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:last_talk"}, {"id": "{\"name\":\"last_talk\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"last_talk : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:llm"}, {"id": "{\"name\":\"llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:add_answer"}, {"id": "{\"name\":\"add_answer\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_answer(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:add_history"}, {"id": "{\"name\":\"add_history\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_history(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:add_talk"}, {"id": "{\"name\":\"add_talk\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_talk(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:dumps"}, {"id": "{\"name\":\"dumps\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"dumps(redis_key: str, timeout_sec: int)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:exists"}, {"id": "{\"name\":\"exists\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"exists(text): bool\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:extract_info"}, {"id": "{\"name\":\"extract_info\",\"args\":[{\"name\":\"input_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"input_string\",\"compositions\":[]},{\"name\":\"pattern\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pattern\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_info(input_string, pattern)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:get_knowledge"}, {"id": "{\"name\":\"get_knowledge\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_knowledge(): str\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:get_title"}, {"id": "{\"name\":\"get_title\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_title(llm, max_words): str\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:is_related"}, {"id": "{\"name\":\"is_related\",\"args\":[{\"name\":\"text1\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text1\",\"compositions\":[]},{\"name\":\"text2\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text2\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_related(text1, text2, llm)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:loads"}, {"id": "{\"name\":\"loads\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'BrainMemory'\",\"description\":\"'BrainMemory'\",\"compositions\":[\"BrainMemory\"]},\"description\":\"loads(redis_key: str): 'BrainMemory'\",\"aggregations\":[\"BrainMemory\"]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:pop_last_talk"}, {"id": "{\"name\":\"pop_last_talk\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pop_last_talk()\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:rewrite"}, {"id": "{\"name\":\"rewrite\",\"args\":[{\"name\":\"sentence\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sentence: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rewrite(sentence: str, context: str, llm)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:set_history_summary"}, {"id": "{\"name\":\"set_history_summary\",\"args\":[{\"name\":\"history_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_summary\",\"compositions\":[]},{\"name\":\"redis_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"redis_key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_history_summary(history_summary, redis_key)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:split_texts"}, {"id": "{\"name\":\"split_texts\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"window_size\",\"type_\":\"\",\"default_\":\"\",\"description\":\"window_size\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"split_texts(text: str, window_size): List[str]\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:summarize"}, {"id": "{\"name\":\"summarize\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]},{\"name\":\"keep_language\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"keep_language: bool\",\"compositions\":[]},{\"name\":\"limit\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"limit: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize(llm, max_words, keep_language: bool, limit: int)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:to_int"}, {"id": "{\"name\":\"to_int\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"default_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"default_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_int(v, default_value)\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:to_metagpt_history_format"}, {"id": "{\"name\":\"to_metagpt_history_format\",\"args\":[{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"to_metagpt_history_format(history): str\",\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:to_redis_key"}, {"id": "{\"name\":\"to_redis_key\",\"args\":[{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix: str\",\"compositions\":[]},{\"name\":\"user_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"user_id: str\",\"compositions\":[]},{\"name\":\"chat_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chat_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_redis_key(prefix: str, user_id: str, chat_id: str)\",\"aggregations\":[]}"}, {"id": "?:BaseLLM"}, {"id": "?:BrainMemory"}, {"id": "metagpt/configs/browser_config.py"}, {"id": "metagpt/configs/browser_config.py:BrowserConfig"}, {"id": "{\"name\":\"BrowserConfig\",\"package\":\"metagpt/configs/browser_config.py:BrowserConfig\",\"attributes\":{\"browser\":{\"name\":\"browser\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]},\"driver\":{\"name\":\"driver\",\"type_\":\"Literal['chromium','firefox','webkit']\",\"default_\":\"\",\"description\":\"driver : Literal['chromium', 'firefox', 'webkit']\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/browser_config.py:BrowserConfig:browser"}, {"id": "{\"name\":\"browser\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]}"}, {"id": "metagpt/configs/browser_config.py:BrowserConfig:driver"}, {"id": "{\"name\":\"driver\",\"type_\":\"Literal['chromium','firefox','webkit']\",\"default_\":\"\",\"description\":\"driver : Literal['chromium', 'firefox', 'webkit']\",\"compositions\":[]}"}, {"id": "metagpt/configs/browser_config.py:BrowserConfig:engine"}, {"id": "{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}"}, {"id": "metagpt/configs/browser_config.py:BrowserConfig:path"}, {"id": "{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:BugFixContext"}, {"id": "{\"name\":\"BugFixContext\",\"package\":\"metagpt/schema.py:BugFixContext\",\"attributes\":{\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:BugFixContext:filename"}, {"id": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py"}, {"id": "metagpt/config2.py:CLIParams"}, {"id": "{\"name\":\"CLIParams\",\"package\":\"metagpt/config2.py:CLIParams\",\"attributes\":{\"git_reinit\":{\"name\":\"git_reinit\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"git_reinit : bool\",\"compositions\":[]},\"inc\":{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]},\"max_auto_summarize_code\":{\"name\":\"max_auto_summarize_code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_auto_summarize_code : int\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_path : str\",\"compositions\":[]},\"reqa_file\":{\"name\":\"reqa_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reqa_file : str\",\"compositions\":[]}},\"methods\":{\"check_project_path\":{\"name\":\"check_project_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_project_path()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/config2.py:CLIParams:git_reinit"}, {"id": "{\"name\":\"git_reinit\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"git_reinit : bool\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:inc"}, {"id": "{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:max_auto_summarize_code"}, {"id": "{\"name\":\"max_auto_summarize_code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_auto_summarize_code : int\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:project_name"}, {"id": "{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:project_path"}, {"id": "{\"name\":\"project_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_path : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:reqa_file"}, {"id": "{\"name\":\"reqa_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reqa_file : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:CLIParams:check_project_path"}, {"id": "{\"name\":\"check_project_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_project_path()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py"}, {"id": "metagpt/utils/git_repository.py:ChangeType"}, {"id": "{\"name\":\"ChangeType\",\"package\":\"metagpt/utils/git_repository.py:ChangeType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:ChangeType:name"}, {"id": "metagpt/document_store/chromadb_store.py"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore"}, {"id": "{\"name\":\"ChromaStore\",\"package\":\"metagpt/document_store/chromadb_store.py:ChromaStore\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]},\"collection\":{\"name\":\"collection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"collection\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"document\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(document, metadata, _id)\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metadata_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata_filter\",\"compositions\":[]},{\"name\":\"document_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document_filter\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metadata_filter, document_filter)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"documents\",\"type_\":\"\",\"default_\":\"\",\"description\":\"documents\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(documents, metadatas, ids)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:client"}, {"id": "{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:collection"}, {"id": "{\"name\":\"collection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"collection\",\"compositions\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"document\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(document, metadata, _id)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:persist"}, {"id": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metadata_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata_filter\",\"compositions\":[]},{\"name\":\"document_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document_filter\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metadata_filter, document_filter)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:write"}, {"id": "{\"name\":\"write\",\"args\":[{\"name\":\"documents\",\"type_\":\"\",\"default_\":\"\",\"description\":\"documents\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(documents, metadatas, ids)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/anthropic_api.py"}, {"id": "metagpt/provider/anthropic_api.py:Claude2"}, {"id": "{\"name\":\"Claude2\",\"package\":\"metagpt/provider/anthropic_api.py:Claude2\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(prompt: str): str\",\"aggregations\":[]},\"ask\":{\"name\":\"ask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(prompt: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/anthropic_api.py:Claude2:config"}, {"id": "metagpt/provider/anthropic_api.py:Claude2:aask"}, {"id": "{\"name\":\"aask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(prompt: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/anthropic_api.py:Claude2:ask"}, {"id": "{\"name\":\"ask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(prompt: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo"}, {"id": "{\"name\":\"CodeBlockInfo\",\"package\":\"metagpt/repo_parser.py:CodeBlockInfo\",\"attributes\":{\"end_lineno\":{\"name\":\"end_lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"end_lineno : int\",\"compositions\":[]},\"lineno\":{\"name\":\"lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"lineno : int\",\"compositions\":[]},\"properties\":{\"name\":\"properties\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"properties : Dict\",\"compositions\":[]},\"tokens\":{\"name\":\"tokens\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"tokens : List\",\"compositions\":[]},\"type_name\":{\"name\":\"type_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:end_lineno"}, {"id": "{\"name\":\"end_lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"end_lineno : int\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:lineno"}, {"id": "{\"name\":\"lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"lineno : int\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:properties"}, {"id": "{\"name\":\"properties\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"properties : Dict\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:tokens"}, {"id": "{\"name\":\"tokens\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"tokens : List\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:CodeBlockInfo:type_name"}, {"id": "{\"name\":\"type_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_name : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/common.py"}, {"id": "metagpt/utils/common.py:CodeParser"}, {"id": "{\"name\":\"CodeParser\",\"package\":\"metagpt/utils/common.py:CodeParser\",\"attributes\":{},\"methods\":{\"parse_block\":{\"name\":\"parse_block\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_block(block: str, text: str): str\",\"aggregations\":[]},\"parse_blocks\":{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]},\"parse_code\":{\"name\":\"parse_code\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(block: str, text: str, lang: str): str\",\"aggregations\":[]},\"parse_file_list\":{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(block: str, text: str, lang: str): list[str]\",\"aggregations\":[]},\"parse_str\":{\"name\":\"parse_str\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(block: str, text: str, lang: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_block"}, {"id": "{\"name\":\"parse_block\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_block(block: str, text: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_blocks"}, {"id": "{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_code"}, {"id": "{\"name\":\"parse_code\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(block: str, text: str, lang: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_file_list"}, {"id": "{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(block: str, text: str, lang: str): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:CodeParser:parse_str"}, {"id": "{\"name\":\"parse_str\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(block: str, text: str, lang: str)\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext"}, {"id": "{\"name\":\"CodePlanAndChangeContext\",\"package\":\"metagpt/schema.py:CodePlanAndChangeContext\",\"attributes\":{\"design_filename\":{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"prd_filename\":{\"name\":\"prd_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_filename : str\",\"compositions\":[]},\"requirement\":{\"name\":\"requirement\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"requirement : str\",\"compositions\":[]},\"task_filename\":{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodePlanAndChangeContext\",\"description\":\"CodePlanAndChangeContext\",\"compositions\":[\"CodePlanAndChangeContext\"]},\"description\":\"loads(filenames: List): CodePlanAndChangeContext\",\"aggregations\":[\"CodePlanAndChangeContext\"]}},\"compositions\":[],\"aggregations\":[\"CodePlanAndChangeContext\"]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:design_filename"}, {"id": "{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:filename"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:prd_filename"}, {"id": "{\"name\":\"prd_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:requirement"}, {"id": "{\"name\":\"requirement\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"requirement : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:task_filename"}, {"id": "{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodePlanAndChangeContext:loads"}, {"id": "{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodePlanAndChangeContext\",\"description\":\"CodePlanAndChangeContext\",\"compositions\":[\"CodePlanAndChangeContext\"]},\"description\":\"loads(filenames: List): CodePlanAndChangeContext\",\"aggregations\":[\"CodePlanAndChangeContext\"]}"}, {"id": "metagpt/schema.py:CodeSummarizeContext"}, {"id": "{\"name\":\"CodeSummarizeContext\",\"package\":\"metagpt/schema.py:CodeSummarizeContext\",\"attributes\":{\"codes_filenames\":{\"name\":\"codes_filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"codes_filenames : List[str]\",\"compositions\":[]},\"design_filename\":{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]},\"reason\":{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]},\"task_filename\":{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeSummarizeContext\",\"description\":\"CodeSummarizeContext\",\"compositions\":[\"CodeSummarizeContext\"]},\"description\":\"loads(filenames: List): CodeSummarizeContext\",\"aggregations\":[\"CodeSummarizeContext\"]}},\"compositions\":[],\"aggregations\":[\"CodeSummarizeContext\"]}"}, {"id": "metagpt/schema.py:CodeSummarizeContext:codes_filenames"}, {"id": "{\"name\":\"codes_filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"codes_filenames : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodeSummarizeContext:design_filename"}, {"id": "metagpt/schema.py:CodeSummarizeContext:reason"}, {"id": "{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:CodeSummarizeContext:task_filename"}, {"id": "metagpt/schema.py:CodeSummarizeContext:loads"}, {"id": "{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeSummarizeContext\",\"description\":\"CodeSummarizeContext\",\"compositions\":[\"CodeSummarizeContext\"]},\"description\":\"loads(filenames: List): CodeSummarizeContext\",\"aggregations\":[\"CodeSummarizeContext\"]}"}, {"id": "metagpt/schema.py:CodingContext"}, {"id": "{\"name\":\"CodingContext\",\"package\":\"metagpt/schema.py:CodingContext\",\"attributes\":{\"code_doc\":{\"name\":\"code_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"design_doc\":{\"name\":\"design_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"design_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"task_doc\":{\"name\":\"task_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"task_doc : Optional[Document]\",\"compositions\":[\"Document\"]}},\"methods\":{},\"compositions\":[\"Document\"],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:CodingContext:code_doc"}, {"id": "{\"name\":\"code_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"id": "metagpt/schema.py:CodingContext:design_doc"}, {"id": "{\"name\":\"design_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"design_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"id": "metagpt/schema.py:CodingContext:filename"}, {"id": "metagpt/schema.py:CodingContext:task_doc"}, {"id": "{\"name\":\"task_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"task_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"id": "?:Document"}, {"id": "metagpt/actions/research.py"}, {"id": "metagpt/actions/research.py:CollectLinks"}, {"id": "{\"name\":\"CollectLinks\",\"package\":\"metagpt/actions/research.py:CollectLinks\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"rank_func\":{\"name\":\"rank_func\",\"type_\":\"Optional[Callable[[list[str]],None]]\",\"default_\":\"\",\"description\":\"rank_func : Optional[Callable[[list[str]], None]]\",\"compositions\":[\"Callable\"]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"decomposition_nums\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"decomposition_nums: int\",\"compositions\":[]},{\"name\":\"url_per_query\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"url_per_query: int\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\\\\|None\",\"default_\":\"\",\"description\":\"system_text: str \\\\| None\",\"compositions\":[\"str\\\\\"]}],\"return_args\":{\"type_\":\"dict[str,list[str]]\",\"description\":\"dict[str, list[str]]\",\"compositions\":[]},\"description\":\"run(topic: str, decomposition_nums: int, url_per_query: int, system_text: str \\\\| None): dict[str, list[str]]\",\"aggregations\":[\"str\\\\\"]}},\"compositions\":[\"Callable\"],\"aggregations\":[\"str\\\\\"]}"}, {"id": "metagpt/actions/research.py:CollectLinks:desc"}, {"id": "metagpt/actions/research.py:CollectLinks:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/research.py:CollectLinks:name"}, {"id": "metagpt/actions/research.py:CollectLinks:rank_func"}, {"id": "{\"name\":\"rank_func\",\"type_\":\"Optional[Callable[[list[str]],None]]\",\"default_\":\"\",\"description\":\"rank_func : Optional[Callable[[list[str]], None]]\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/actions/research.py:CollectLinks:search_engine"}, {"id": "{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}"}, {"id": "metagpt/actions/research.py:CollectLinks:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"decomposition_nums\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"decomposition_nums: int\",\"compositions\":[]},{\"name\":\"url_per_query\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"url_per_query: int\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\\\\|None\",\"default_\":\"\",\"description\":\"system_text: str \\\\| None\",\"compositions\":[\"str\\\\\"]}],\"return_args\":{\"type_\":\"dict[str,list[str]]\",\"description\":\"dict[str, list[str]]\",\"compositions\":[]},\"description\":\"run(topic: str, decomposition_nums: int, url_per_query: int, system_text: str \\\\| None): dict[str, list[str]]\",\"aggregations\":[\"str\\\\\"]}"}, {"id": "?:Callable"}, {"id": "?:str\\"}, {"id": "metagpt/learn/skill_loader.py"}, {"id": "metagpt/learn/skill_loader.py:Components"}, {"id": "{\"name\":\"Components\",\"package\":\"metagpt/learn/skill_loader.py:Components\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/research.py:ConductResearch"}, {"id": "{\"name\":\"ConductResearch\",\"package\":\"metagpt/actions/research.py:ConductResearch\",\"attributes\":{},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str, content: str, system_text: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/research.py:ConductResearch:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str, content: str, system_text: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/config2.py:Config"}, {"id": "{\"name\":\"Config\",\"package\":\"metagpt/config2.py:Config\",\"attributes\":{\"AZURE_TTS_REGION\":{\"name\":\"AZURE_TTS_REGION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"AZURE_TTS_REGION : str\",\"compositions\":[]},\"AZURE_TTS_SUBSCRIPTION_KEY\":{\"name\":\"AZURE_TTS_SUBSCRIPTION_KEY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"AZURE_TTS_SUBSCRIPTION_KEY : str\",\"compositions\":[]},\"IFLYTEK_API_KEY\":{\"name\":\"IFLYTEK_API_KEY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_API_KEY : str\",\"compositions\":[]},\"IFLYTEK_API_SECRET\":{\"name\":\"IFLYTEK_API_SECRET\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_API_SECRET : str\",\"compositions\":[]},\"IFLYTEK_APP_ID\":{\"name\":\"IFLYTEK_APP_ID\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_APP_ID : str\",\"compositions\":[]},\"METAGPT_TEXT_TO_IMAGE_MODEL_URL\":{\"name\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL : str\",\"compositions\":[]},\"browser\":{\"name\":\"browser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"browser\",\"compositions\":[]},\"code_review_k_times\":{\"name\":\"code_review_k_times\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code_review_k_times : int\",\"compositions\":[]},\"enable_longterm_memory\":{\"name\":\"enable_longterm_memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"enable_longterm_memory : bool\",\"compositions\":[]},\"inc\":{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"llm_for_researcher_report\":{\"name\":\"llm_for_researcher_report\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"llm_for_researcher_report : str\",\"compositions\":[]},\"llm_for_researcher_summary\":{\"name\":\"llm_for_researcher_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"llm_for_researcher_summary : str\",\"compositions\":[]},\"max_auto_summarize_code\":{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]},\"mermaid\":{\"name\":\"mermaid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mermaid\",\"compositions\":[]},\"mermaid_engine\":{\"name\":\"mermaid_engine\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_engine : str\",\"compositions\":[]},\"mmdc\":{\"name\":\"mmdc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mmdc : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"Literal['json','markdown','raw']\",\"default_\":\"\",\"description\":\"prompt_schema : Literal['json', 'markdown', 'raw']\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]},\"puppeteer_config\":{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]},\"pyppeteer_executable_path\":{\"name\":\"pyppeteer_executable_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"pyppeteer_executable_path : str\",\"compositions\":[]},\"redis\":{\"name\":\"redis\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"redis : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]},\"redis_key\":{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key : str\",\"compositions\":[]},\"repair_llm_output\":{\"name\":\"repair_llm_output\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"repair_llm_output : bool\",\"compositions\":[]},\"reqa_file\":{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},\"s3\":{\"name\":\"s3\",\"type_\":\"Optional[S3Config]\",\"default_\":\"\",\"description\":\"s3 : Optional[S3Config]\",\"compositions\":[\"S3Config\"]},\"search\":{\"name\":\"search\",\"type_\":\"Optional[SearchConfig]\",\"default_\":\"\",\"description\":\"search : Optional[SearchConfig]\",\"compositions\":[\"SearchConfig\"]},\"workspace\":{\"name\":\"workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workspace\",\"compositions\":[]}},\"methods\":{\"default\":{\"name\":\"default\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"default()\",\"aggregations\":[]},\"from_home\":{\"name\":\"from_home\",\"args\":[{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_home(path)\",\"aggregations\":[]},\"get_azure_llm\":{\"name\":\"get_azure_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_azure_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]},\"get_openai_llm\":{\"name\":\"get_openai_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_openai_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]},\"update_via_cli\":{\"name\":\"update_via_cli\",\"args\":[{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},{\"name\":\"inc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"inc\",\"compositions\":[]},{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code)\",\"aggregations\":[]}},\"compositions\":[\"RedisConfig\",\"S3Config\",\"SearchConfig\"],\"aggregations\":[\"LLMConfig\"]}"}, {"id": "metagpt/config2.py:Config:AZURE_TTS_REGION"}, {"id": "{\"name\":\"AZURE_TTS_REGION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"AZURE_TTS_REGION : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:AZURE_TTS_SUBSCRIPTION_KEY"}, {"id": "{\"name\":\"AZURE_TTS_SUBSCRIPTION_KEY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"AZURE_TTS_SUBSCRIPTION_KEY : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:IFLYTEK_API_KEY"}, {"id": "{\"name\":\"IFLYTEK_API_KEY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_API_KEY : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:IFLYTEK_API_SECRET"}, {"id": "{\"name\":\"IFLYTEK_API_SECRET\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_API_SECRET : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:IFLYTEK_APP_ID"}, {"id": "{\"name\":\"IFLYTEK_APP_ID\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_APP_ID : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:METAGPT_TEXT_TO_IMAGE_MODEL_URL"}, {"id": "{\"name\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:browser"}, {"id": "{\"name\":\"browser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"browser\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:code_review_k_times"}, {"id": "{\"name\":\"code_review_k_times\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code_review_k_times : int\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:enable_longterm_memory"}, {"id": "{\"name\":\"enable_longterm_memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"enable_longterm_memory : bool\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:inc"}, {"id": "metagpt/config2.py:Config:language"}, {"id": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:llm"}, {"id": "metagpt/config2.py:Config:llm_for_researcher_report"}, {"id": "{\"name\":\"llm_for_researcher_report\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"llm_for_researcher_report : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:llm_for_researcher_summary"}, {"id": "{\"name\":\"llm_for_researcher_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"llm_for_researcher_summary : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:max_auto_summarize_code"}, {"id": "{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:mermaid"}, {"id": "{\"name\":\"mermaid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mermaid\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:mermaid_engine"}, {"id": "{\"name\":\"mermaid_engine\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_engine : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:mmdc"}, {"id": "{\"name\":\"mmdc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mmdc : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:project_name"}, {"id": "metagpt/config2.py:Config:project_path"}, {"id": "metagpt/config2.py:Config:prompt_schema"}, {"id": "{\"name\":\"prompt_schema\",\"type_\":\"Literal['json','markdown','raw']\",\"default_\":\"\",\"description\":\"prompt_schema : Literal['json', 'markdown', 'raw']\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:proxy"}, {"id": "{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:puppeteer_config"}, {"id": "{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:pyppeteer_executable_path"}, {"id": "{\"name\":\"pyppeteer_executable_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"pyppeteer_executable_path : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:redis"}, {"id": "{\"name\":\"redis\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"redis : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}"}, {"id": "metagpt/config2.py:Config:redis_key"}, {"id": "{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key : str\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:repair_llm_output"}, {"id": "{\"name\":\"repair_llm_output\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"repair_llm_output : bool\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:reqa_file"}, {"id": "{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:s3"}, {"id": "{\"name\":\"s3\",\"type_\":\"Optional[S3Config]\",\"default_\":\"\",\"description\":\"s3 : Optional[S3Config]\",\"compositions\":[\"S3Config\"]}"}, {"id": "metagpt/config2.py:Config:search"}, {"id": "{\"name\":\"search\",\"type_\":\"Optional[SearchConfig]\",\"default_\":\"\",\"description\":\"search : Optional[SearchConfig]\",\"compositions\":[\"SearchConfig\"]}"}, {"id": "metagpt/config2.py:Config:workspace"}, {"id": "{\"name\":\"workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workspace\",\"compositions\":[]}"}, {"id": "metagpt/config2.py:Config:default"}, {"id": "{\"name\":\"default\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"default()\",\"aggregations\":[]}"}, {"id": "metagpt/config2.py:Config:from_home"}, {"id": "{\"name\":\"from_home\",\"args\":[{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_home(path)\",\"aggregations\":[]}"}, {"id": "metagpt/config2.py:Config:get_azure_llm"}, {"id": "{\"name\":\"get_azure_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_azure_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]}"}, {"id": "metagpt/config2.py:Config:get_openai_llm"}, {"id": "{\"name\":\"get_openai_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_openai_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]}"}, {"id": "metagpt/config2.py:Config:update_via_cli"}, {"id": "{\"name\":\"update_via_cli\",\"args\":[{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},{\"name\":\"inc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"inc\",\"compositions\":[]},{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code)\",\"aggregations\":[]}"}, {"id": "?:RedisConfig"}, {"id": "?:S3Config"}, {"id": "?:SearchConfig"}, {"id": "?:LLMConfig"}, {"id": "metagpt/tools/openai_text_to_embedding.py"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config"}, {"id": "{\"name\":\"Config\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config\",\"attributes\":{\"alias\":{\"name\":\"alias\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"alias : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config:alias"}, {"id": "{\"name\":\"alias\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"alias : dict\",\"compositions\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:Config"}, {"id": "{\"name\":\"Config\",\"package\":\"metagpt/memory/brain_memory.py:BrainMemory:Config\",\"attributes\":{\"arbitrary_types_allowed\":{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:Config:arbitrary_types_allowed"}, {"id": "{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:Config"}, {"id": "{\"name\":\"Config\",\"package\":\"metagpt/strategy/tot.py:TreeofThought:Config\",\"attributes\":{\"arbitrary_types_allowed\":{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:Config:arbitrary_types_allowed"}, {"id": "metagpt/context.py:Context"}, {"id": "{\"name\":\"Context\",\"package\":\"metagpt/context.py:Context\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"Optional[GitRepository]\",\"default_\":\"\",\"description\":\"git_repo : Optional[GitRepository]\",\"compositions\":[\"GitRepository\"]},\"kwargs\":{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"Optional[ProjectRepo]\",\"default_\":\"\",\"description\":\"repo : Optional[ProjectRepo]\",\"compositions\":[\"ProjectRepo\"]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"src_workspace : Optional[Path]\",\"compositions\":[\"Path\"]}},\"methods\":{\"llm\":{\"name\":\"llm\",\"args\":[],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm(): BaseLLM\",\"aggregations\":[\"BaseLLM\"]},\"llm_with_cost_manager_from_llm_config\":{\"name\":\"llm_with_cost_manager_from_llm_config\",\"args\":[{\"name\":\"llm_config\",\"type_\":\"LLMConfig\",\"default_\":\"\",\"description\":\"llm_config: LLMConfig\",\"compositions\":[\"LLMConfig\"]}],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm_with_cost_manager_from_llm_config(llm_config: LLMConfig): BaseLLM\",\"aggregations\":[\"BaseLLM\",\"LLMConfig\"]},\"new_environ\":{\"name\":\"new_environ\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_environ()\",\"aggregations\":[]}},\"compositions\":[\"GitRepository\",\"ProjectRepo\",\"Path\"],\"aggregations\":[\"BaseLLM\",\"LLMConfig\"]}"}, {"id": "metagpt/context.py:Context:config"}, {"id": "metagpt/context.py:Context:cost_manager"}, {"id": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"id": "metagpt/context.py:Context:git_repo"}, {"id": "{\"name\":\"git_repo\",\"type_\":\"Optional[GitRepository]\",\"default_\":\"\",\"description\":\"git_repo : Optional[GitRepository]\",\"compositions\":[\"GitRepository\"]}"}, {"id": "metagpt/context.py:Context:kwargs"}, {"id": "{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}"}, {"id": "metagpt/context.py:Context:model_config"}, {"id": "metagpt/context.py:Context:repo"}, {"id": "{\"name\":\"repo\",\"type_\":\"Optional[ProjectRepo]\",\"default_\":\"\",\"description\":\"repo : Optional[ProjectRepo]\",\"compositions\":[\"ProjectRepo\"]}"}, {"id": "metagpt/context.py:Context:src_workspace"}, {"id": "{\"name\":\"src_workspace\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"src_workspace : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/context.py:Context:llm"}, {"id": "{\"name\":\"llm\",\"args\":[],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm(): BaseLLM\",\"aggregations\":[\"BaseLLM\"]}"}, {"id": "metagpt/context.py:Context:llm_with_cost_manager_from_llm_config"}, {"id": "{\"name\":\"llm_with_cost_manager_from_llm_config\",\"args\":[{\"name\":\"llm_config\",\"type_\":\"LLMConfig\",\"default_\":\"\",\"description\":\"llm_config: LLMConfig\",\"compositions\":[\"LLMConfig\"]}],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm_with_cost_manager_from_llm_config(llm_config: LLMConfig): BaseLLM\",\"aggregations\":[\"BaseLLM\",\"LLMConfig\"]}"}, {"id": "metagpt/context.py:Context:new_environ"}, {"id": "{\"name\":\"new_environ\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_environ()\",\"aggregations\":[]}"}, {"id": "?:GitRepository"}, {"id": "?:ProjectRepo"}, {"id": "?:Path"}, {"id": "metagpt/context_mixin.py"}, {"id": "metagpt/context_mixin.py:ContextMixin"}, {"id": "{\"name\":\"ContextMixin\",\"package\":\"metagpt/context_mixin.py:ContextMixin\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"private_config\":{\"name\":\"private_config\",\"type_\":\"Optional[Config]\",\"default_\":\"\",\"description\":\"private_config : Optional[Config]\",\"compositions\":[\"Config\"]},\"private_context\":{\"name\":\"private_context\",\"type_\":\"Optional[Context]\",\"default_\":\"\",\"description\":\"private_context : Optional[Context]\",\"compositions\":[\"Context\"]},\"private_llm\":{\"name\":\"private_llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"private_llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}},\"methods\":{\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(k, v, override)\",\"aggregations\":[]},\"set_config\":{\"name\":\"set_config\",\"args\":[{\"name\":\"config\",\"type_\":\"Config\",\"default_\":\"\",\"description\":\"config: Config\",\"compositions\":[\"Config\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_config(config: Config, override)\",\"aggregations\":[\"Config\"]},\"set_context\":{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context: Context, override)\",\"aggregations\":[\"Context\"]},\"set_llm\":{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"BaseLLM\",\"default_\":\"\",\"description\":\"llm: BaseLLM\",\"compositions\":[\"BaseLLM\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm: BaseLLM, override)\",\"aggregations\":[\"BaseLLM\"]}},\"compositions\":[\"Config\",\"Context\",\"BaseLLM\"],\"aggregations\":[]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:config"}, {"id": "metagpt/context_mixin.py:ContextMixin:context"}, {"id": "{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:llm"}, {"id": "metagpt/context_mixin.py:ContextMixin:model_config"}, {"id": "metagpt/context_mixin.py:ContextMixin:private_config"}, {"id": "{\"name\":\"private_config\",\"type_\":\"Optional[Config]\",\"default_\":\"\",\"description\":\"private_config : Optional[Config]\",\"compositions\":[\"Config\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:private_context"}, {"id": "{\"name\":\"private_context\",\"type_\":\"Optional[Context]\",\"default_\":\"\",\"description\":\"private_context : Optional[Context]\",\"compositions\":[\"Context\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:private_llm"}, {"id": "{\"name\":\"private_llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"private_llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:set"}, {"id": "{\"name\":\"set\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(k, v, override)\",\"aggregations\":[]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:set_config"}, {"id": "{\"name\":\"set_config\",\"args\":[{\"name\":\"config\",\"type_\":\"Config\",\"default_\":\"\",\"description\":\"config: Config\",\"compositions\":[\"Config\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_config(config: Config, override)\",\"aggregations\":[\"Config\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:set_context"}, {"id": "{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context: Context, override)\",\"aggregations\":[\"Context\"]}"}, {"id": "metagpt/context_mixin.py:ContextMixin:set_llm"}, {"id": "{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"BaseLLM\",\"default_\":\"\",\"description\":\"llm: BaseLLM\",\"compositions\":[\"BaseLLM\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm: BaseLLM, override)\",\"aggregations\":[\"BaseLLM\"]}"}, {"id": "?:Config"}, {"id": "?:Context"}, {"id": "metagpt/utils/cost_manager.py"}, {"id": "metagpt/utils/cost_manager.py:CostManager"}, {"id": "{\"name\":\"CostManager\",\"package\":\"metagpt/utils/cost_manager.py:CostManager\",\"attributes\":{\"max_budget\":{\"name\":\"max_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"max_budget : float\",\"compositions\":[]},\"total_budget\":{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]},\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]},\"get_total_completion_tokens\":{\"name\":\"get_total_completion_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_completion_tokens()\",\"aggregations\":[]},\"get_total_cost\":{\"name\":\"get_total_cost\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_cost()\",\"aggregations\":[]},\"get_total_prompt_tokens\":{\"name\":\"get_total_prompt_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_prompt_tokens()\",\"aggregations\":[]},\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:max_budget"}, {"id": "{\"name\":\"max_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"max_budget : float\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:total_budget"}, {"id": "{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:total_completion_tokens"}, {"id": "{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:total_cost"}, {"id": "{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:total_prompt_tokens"}, {"id": "{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:get_costs"}, {"id": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:get_total_completion_tokens"}, {"id": "{\"name\":\"get_total_completion_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_completion_tokens()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:get_total_cost"}, {"id": "{\"name\":\"get_total_cost\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_cost()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:get_total_prompt_tokens"}, {"id": "{\"name\":\"get_total_prompt_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_prompt_tokens()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:CostManager:update_cost"}, {"id": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}"}, {"id": "?:Costs"}, {"id": "metagpt/utils/cost_manager.py:Costs"}, {"id": "{\"name\":\"Costs\",\"package\":\"metagpt/utils/cost_manager.py:Costs\",\"attributes\":{\"total_budget\":{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]},\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:Costs:total_budget"}, {"id": "metagpt/utils/cost_manager.py:Costs:total_completion_tokens"}, {"id": "metagpt/utils/cost_manager.py:Costs:total_cost"}, {"id": "metagpt/utils/cost_manager.py:Costs:total_prompt_tokens"}, {"id": "metagpt/utils/custom_decoder.py"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder"}, {"id": "{\"name\":\"CustomDecoder\",\"package\":\"metagpt/utils/custom_decoder.py:CustomDecoder\",\"attributes\":{\"parse_object\":{\"name\":\"parse_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_object\",\"compositions\":[]},\"parse_string\":{\"name\":\"parse_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_string\",\"compositions\":[]},\"scan_once\":{\"name\":\"scan_once\",\"type_\":\"\",\"default_\":\"\",\"description\":\"scan_once\",\"compositions\":[]}},\"methods\":{\"decode\":{\"name\":\"decode\",\"args\":[{\"name\":\"s\",\"type_\":\"\",\"default_\":\"\",\"description\":\"s\",\"compositions\":[]},{\"name\":\"_w\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_w\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"decode(s, _w)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_object"}, {"id": "{\"name\":\"parse_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_object\",\"compositions\":[]}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_string"}, {"id": "{\"name\":\"parse_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_string\",\"compositions\":[]}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:scan_once"}, {"id": "{\"name\":\"scan_once\",\"type_\":\"\",\"default_\":\"\",\"description\":\"scan_once\",\"compositions\":[]}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:decode"}, {"id": "{\"name\":\"decode\",\"args\":[{\"name\":\"s\",\"type_\":\"\",\"default_\":\"\",\"description\":\"s\",\"compositions\":[]},{\"name\":\"_w\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_w\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"decode(s, _w)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/customer_service.py"}, {"id": "metagpt/roles/customer_service.py:CustomerService"}, {"id": "{\"name\":\"CustomerService\",\"package\":\"metagpt/roles/customer_service.py:CustomerService\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}},\"methods\":{},\"compositions\":[\"BaseStore\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/customer_service.py:CustomerService:desc"}, {"id": "metagpt/roles/customer_service.py:CustomerService:name"}, {"id": "metagpt/roles/customer_service.py:CustomerService:profile"}, {"id": "metagpt/roles/customer_service.py:CustomerService:store"}, {"id": "{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}"}, {"id": "?:BaseStore"}, {"id": "metagpt/tools/search_engine_ddg.py"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper"}, {"id": "{\"name\":\"DDGAPIWrapper\",\"package\":\"metagpt/tools/search_engine_ddg.py:DDGAPIWrapper\",\"attributes\":{\"ddgs\":{\"name\":\"ddgs\",\"type_\":\"DDGS\",\"default_\":\"\",\"description\":\"ddgs : DDGS\",\"compositions\":[\"DDGS\"]},\"executor\":{\"name\":\"executor\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executor : NoneType\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"loop : NoneType\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True], focus: list[str] \\\\| None): str\",\"aggregations\":[\"\\\\\"]}},\"compositions\":[\"DDGS\"],\"aggregations\":[\"\\\\\"]}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:ddgs"}, {"id": "{\"name\":\"ddgs\",\"type_\":\"DDGS\",\"default_\":\"\",\"description\":\"ddgs : DDGS\",\"compositions\":[\"DDGS\"]}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:executor"}, {"id": "{\"name\":\"executor\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executor : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:loop"}, {"id": "{\"name\":\"loop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"loop : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True], focus: list[str] \\\\| None): str\",\"aggregations\":[\"\\\\\"]}"}, {"id": "?:DDGS"}, {"id": "?:\\"}, {"id": "metagpt/strategy/tot.py:DFSSolver"}, {"id": "{\"name\":\"DFSSolver\",\"package\":\"metagpt/strategy/tot.py:DFSSolver\",\"attributes\":{\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]},{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt, root)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:DFSSolver:thought_tree"}, {"id": "metagpt/strategy/tot.py:DFSSolver:solve"}, {"id": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]},{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt, root)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py"}, {"id": "metagpt/tools/search_engine_meilisearch.py:DataSource"}, {"id": "{\"name\":\"DataSource\",\"package\":\"metagpt/tools/search_engine_meilisearch.py:DataSource\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:DataSource:name"}, {"id": "metagpt/tools/search_engine_meilisearch.py:DataSource:url"}, {"id": "{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/debug_error.py"}, {"id": "metagpt/actions/debug_error.py:DebugError"}, {"id": "{\"name\":\"DebugError\",\"package\":\"metagpt/actions/debug_error.py:DebugError\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/debug_error.py:DebugError:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"id": "metagpt/actions/debug_error.py:DebugError:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/dependency_file.py"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile"}, {"id": "{\"name\":\"DependencyFile\",\"package\":\"metagpt/utils/dependency_file.py:DependencyFile\",\"attributes\":{\"exists\":{\"name\":\"exists\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exists\",\"compositions\":[]}},\"methods\":{\"delete_file\":{\"name\":\"delete_file\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_file()\",\"aggregations\":[]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(filename: Path \\\\| str, persist)\",\"aggregations\":[\"Path\\\\\"]},\"load\":{\"name\":\"load\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load()\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]},\"update\":{\"name\":\"update\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"dependencies\",\"type_\":\"Set[Path\\\\|str]\",\"default_\":\"\",\"description\":\"dependencies: Set[Path \\\\| str]\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update(filename: Path \\\\| str, dependencies: Set[Path \\\\| str], persist)\",\"aggregations\":[\"Path\\\\\"]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:exists"}, {"id": "{\"name\":\"exists\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exists\",\"compositions\":[]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:delete_file"}, {"id": "{\"name\":\"delete_file\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_file()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(filename: Path \\\\| str, persist)\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:load"}, {"id": "{\"name\":\"load\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:save"}, {"id": "{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:update"}, {"id": "{\"name\":\"update\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"dependencies\",\"type_\":\"Set[Path\\\\|str]\",\"default_\":\"\",\"description\":\"dependencies: Set[Path \\\\| str]\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update(filename: Path \\\\| str, dependencies: Set[Path \\\\| str], persist)\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "?:Path\\"}, {"id": "metagpt/actions/design_api_review.py"}, {"id": "metagpt/actions/design_api_review.py:DesignReview"}, {"id": "{\"name\":\"DesignReview\",\"package\":\"metagpt/actions/design_api_review.py:DesignReview\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},{\"name\":\"api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_design\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd, api_design)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/design_api_review.py:DesignReview:i_context"}, {"id": "metagpt/actions/design_api_review.py:DesignReview:name"}, {"id": "metagpt/actions/design_api_review.py:DesignReview:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},{\"name\":\"api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_design\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd, api_design)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository"}, {"id": "{\"name\":\"DiGraphRepository\",\"package\":\"metagpt/utils/di_graph_repository.py:DiGraphRepository\",\"attributes\":{\"pathname\":{\"name\":\"pathname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pathname\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]},\"root\":{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]},\"insert\":{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]},\"json\":{\"name\":\"json\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"json(): str\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(pathname: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"load_from\":{\"name\":\"load_from\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"GraphRepository\",\"description\":\"GraphRepository\",\"compositions\":[\"GraphRepository\"]},\"description\":\"load_from(pathname: str \\\\| Path): GraphRepository\",\"aggregations\":[\"GraphRepository\",\"str\\\\\",\"Path\"]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"select\":{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\",\"GraphRepository\",\"SPO\"]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname"}, {"id": "{\"name\":\"pathname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pathname\",\"compositions\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root"}, {"id": "{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:insert"}, {"id": "{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:json"}, {"id": "{\"name\":\"json\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"json(): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load"}, {"id": "{\"name\":\"load\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(pathname: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load_from"}, {"id": "{\"name\":\"load_from\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"GraphRepository\",\"description\":\"GraphRepository\",\"compositions\":[\"GraphRepository\"]},\"description\":\"load_from(pathname: str \\\\| Path): GraphRepository\",\"aggregations\":[\"GraphRepository\",\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:save"}, {"id": "{\"name\":\"save\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:select"}, {"id": "{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}"}, {"id": "?:GraphRepository"}, {"id": "?:SPO"}, {"id": "metagpt/utils/project_repo.py"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories"}, {"id": "{\"name\":\"DocFileRepositories\",\"package\":\"metagpt/utils/project_repo.py:DocFileRepositories\",\"attributes\":{\"class_view\":{\"name\":\"class_view\",\"type_\":\"\",\"default_\":\"\",\"description\":\"class_view\",\"compositions\":[]},\"code_plan_and_change\":{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]},\"code_summary\":{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]},\"graph_repo\":{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},\"system_design\":{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]},\"task\":{\"name\":\"task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:class_view"}, {"id": "{\"name\":\"class_view\",\"type_\":\"\",\"default_\":\"\",\"description\":\"class_view\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:code_plan_and_change"}, {"id": "{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:code_summary"}, {"id": "{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:graph_repo"}, {"id": "{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:prd"}, {"id": "{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:system_design"}, {"id": "{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:task"}, {"id": "{\"name\":\"task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task\",\"compositions\":[]}"}, {"id": "metagpt/utils/pycst.py"}, {"id": "metagpt/utils/pycst.py:DocstringCollector"}, {"id": "{\"name\":\"DocstringCollector\",\"package\":\"metagpt/utils/pycst.py:DocstringCollector\",\"attributes\":{\"docstrings\":{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]},\"stack\":{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}},\"methods\":{\"leave_ClassDef\":{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_ClassDef(node: cst.ClassDef): None\",\"aggregations\":[\"cst.ClassDef\"]},\"leave_FunctionDef\":{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_FunctionDef(node: cst.FunctionDef): None\",\"aggregations\":[\"cst.FunctionDef\"]},\"leave_Module\":{\"name\":\"leave_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_Module(node: cst.Module): None\",\"aggregations\":[\"cst.Module\"]},\"visit_ClassDef\":{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"cst.ClassDef\",\"bool\\\\\"]},\"visit_FunctionDef\":{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]},\"visit_Module\":{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}},\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"],\"aggregations\":[\"cst.ClassDef\",\"cst.FunctionDef\",\"cst.Module\",\"bool\\\\\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:docstrings"}, {"id": "{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:stack"}, {"id": "{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:leave_ClassDef"}, {"id": "{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_ClassDef(node: cst.ClassDef): None\",\"aggregations\":[\"cst.ClassDef\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:leave_FunctionDef"}, {"id": "{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_FunctionDef(node: cst.FunctionDef): None\",\"aggregations\":[\"cst.FunctionDef\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:leave_Module"}, {"id": "{\"name\":\"leave_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_Module(node: cst.Module): None\",\"aggregations\":[\"cst.Module\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:visit_ClassDef"}, {"id": "{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"cst.ClassDef\",\"bool\\\\\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:visit_FunctionDef"}, {"id": "{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:visit_Module"}, {"id": "{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}"}, {"id": "?:..."}, {"id": "?:cst.SimpleStatementLine"}, {"id": "?:tuple"}, {"id": "?:cst.ClassDef"}, {"id": "?:cst.FunctionDef"}, {"id": "?:cst.Module"}, {"id": "?:bool\\"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer"}, {"id": "{\"name\":\"DocstringTransformer\",\"package\":\"metagpt/utils/pycst.py:DocstringTransformer\",\"attributes\":{\"docstrings\":{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]},\"stack\":{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}},\"methods\":{\"leave_ClassDef\":{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"original_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"updated_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_ClassDef(original_node: cst.ClassDef, updated_node: cst.ClassDef): cst.CSTNode\",\"aggregations\":[\"cst.ClassDef\",\"cst.CSTNode\"]},\"leave_FunctionDef\":{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"original_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"updated_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_FunctionDef(original_node: cst.FunctionDef, updated_node: cst.FunctionDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.FunctionDef\"]},\"leave_Module\":{\"name\":\"leave_Module\",\"args\":[{\"name\":\"original_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"original_node: Module\",\"compositions\":[\"Module\"]},{\"name\":\"updated_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"updated_node: Module\",\"compositions\":[\"Module\"]}],\"return_args\":{\"type_\":\"Module\",\"description\":\"Module\",\"compositions\":[\"Module\"]},\"description\":\"leave_Module(original_node: Module, updated_node: Module): Module\",\"aggregations\":[\"Module\"]},\"visit_ClassDef\":{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"cst.ClassDef\",\"bool\\\\\"]},\"visit_FunctionDef\":{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]},\"visit_Module\":{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}},\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"],\"aggregations\":[\"cst.ClassDef\",\"cst.CSTNode\",\"cst.FunctionDef\",\"Module\",\"bool\\\\\",\"cst.Module\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:docstrings"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:stack"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:leave_ClassDef"}, {"id": "{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"original_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"updated_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_ClassDef(original_node: cst.ClassDef, updated_node: cst.ClassDef): cst.CSTNode\",\"aggregations\":[\"cst.ClassDef\",\"cst.CSTNode\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:leave_FunctionDef"}, {"id": "{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"original_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"updated_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_FunctionDef(original_node: cst.FunctionDef, updated_node: cst.FunctionDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.FunctionDef\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:leave_Module"}, {"id": "{\"name\":\"leave_Module\",\"args\":[{\"name\":\"original_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"original_node: Module\",\"compositions\":[\"Module\"]},{\"name\":\"updated_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"updated_node: Module\",\"compositions\":[\"Module\"]}],\"return_args\":{\"type_\":\"Module\",\"description\":\"Module\",\"compositions\":[\"Module\"]},\"description\":\"leave_Module(original_node: Module, updated_node: Module): Module\",\"aggregations\":[\"Module\"]}"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:visit_ClassDef"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:visit_FunctionDef"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:visit_Module"}, {"id": "?:cst.CSTNode"}, {"id": "?:Module"}, {"id": "metagpt/document.py"}, {"id": "metagpt/document.py:Document"}, {"id": "{\"name\":\"Document\",\"package\":\"metagpt/document.py:Document\",\"attributes\":{\"author\":{\"name\":\"author\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"author : str\",\"compositions\":[]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]},\"reviews\":{\"name\":\"reviews\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"reviews : list\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}},\"methods\":{\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]},\"from_text\":{\"name\":\"from_text\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_text(text: str, path: Optional[Path])\",\"aggregations\":[\"Path\"]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"to_path\":{\"name\":\"to_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path(path: Optional[Path])\",\"aggregations\":[\"Path\"]}},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"id": "metagpt/document.py:Document:author"}, {"id": "{\"name\":\"author\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"author : str\",\"compositions\":[]}"}, {"id": "metagpt/document.py:Document:content"}, {"id": "metagpt/document.py:Document:name"}, {"id": "metagpt/document.py:Document:path"}, {"id": "{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/document.py:Document:reviews"}, {"id": "{\"name\":\"reviews\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"reviews : list\",\"compositions\":[]}"}, {"id": "metagpt/document.py:Document:status"}, {"id": "{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}"}, {"id": "metagpt/document.py:Document:from_path"}, {"id": "{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/document.py:Document:from_text"}, {"id": "{\"name\":\"from_text\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_text(text: str, path: Optional[Path])\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/document.py:Document:persist"}, {"id": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"id": "metagpt/document.py:Document:to_path"}, {"id": "{\"name\":\"to_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path(path: Optional[Path])\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/schema.py:Document"}, {"id": "{\"name\":\"Document\",\"package\":\"metagpt/schema.py:Document\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"root_path\":{\"name\":\"root_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"root_path : str\",\"compositions\":[]},\"root_relative_path\":{\"name\":\"root_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_relative_path\",\"compositions\":[]}},\"methods\":{\"get_meta\":{\"name\":\"get_meta\",\"args\":[],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"get_meta(): Document\",\"aggregations\":[\"Document\"]}},\"compositions\":[],\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/schema.py:Document:content"}, {"id": "metagpt/schema.py:Document:filename"}, {"id": "metagpt/schema.py:Document:root_path"}, {"id": "{\"name\":\"root_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"root_path : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Document:root_relative_path"}, {"id": "{\"name\":\"root_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_relative_path\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Document:get_meta"}, {"id": "{\"name\":\"get_meta\",\"args\":[],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"get_meta(): Document\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/document.py:DocumentStatus"}, {"id": "{\"name\":\"DocumentStatus\",\"package\":\"metagpt/document.py:DocumentStatus\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document.py:DocumentStatus:name"}, {"id": "metagpt/schema.py:Documents"}, {"id": "{\"name\":\"Documents\",\"package\":\"metagpt/schema.py:Documents\",\"attributes\":{\"docs\":{\"name\":\"docs\",\"type_\":\"Dict[str,Document]\",\"default_\":\"\",\"description\":\"docs : Dict[str, Document]\",\"compositions\":[\"Document\"]}},\"methods\":{\"from_iterable\":{\"name\":\"from_iterable\",\"args\":[{\"name\":\"documents\",\"type_\":\"Iterable[Document]\",\"default_\":\"\",\"description\":\"documents: Iterable[Document]\",\"compositions\":[\"Document\",\"Iterable\"]}],\"return_args\":{\"type_\":\"Documents\",\"description\":\"Documents\",\"compositions\":[\"Documents\"]},\"description\":\"from_iterable(documents: Iterable[Document]): Documents\",\"aggregations\":[\"Documents\",\"Iterable\",\"Document\"]},\"to_action_output\":{\"name\":\"to_action_output\",\"args\":[],\"return_args\":{\"type_\":\"'ActionOutput'\",\"description\":\"'ActionOutput'\",\"compositions\":[\"ActionOutput\"]},\"description\":\"to_action_output(): 'ActionOutput'\",\"aggregations\":[\"ActionOutput\"]}},\"compositions\":[\"Document\"],\"aggregations\":[\"Documents\",\"Iterable\",\"ActionOutput\"]}"}, {"id": "metagpt/schema.py:Documents:docs"}, {"id": "{\"name\":\"docs\",\"type_\":\"Dict[str,Document]\",\"default_\":\"\",\"description\":\"docs : Dict[str, Document]\",\"compositions\":[\"Document\"]}"}, {"id": "metagpt/schema.py:Documents:from_iterable"}, {"id": "{\"name\":\"from_iterable\",\"args\":[{\"name\":\"documents\",\"type_\":\"Iterable[Document]\",\"default_\":\"\",\"description\":\"documents: Iterable[Document]\",\"compositions\":[\"Document\",\"Iterable\"]}],\"return_args\":{\"type_\":\"Documents\",\"description\":\"Documents\",\"compositions\":[\"Documents\"]},\"description\":\"from_iterable(documents: Iterable[Document]): Documents\",\"aggregations\":[\"Documents\",\"Iterable\",\"Document\"]}"}, {"id": "metagpt/schema.py:Documents:to_action_output"}, {"id": "{\"name\":\"to_action_output\",\"args\":[],\"return_args\":{\"type_\":\"'ActionOutput'\",\"description\":\"'ActionOutput'\",\"compositions\":[\"ActionOutput\"]},\"description\":\"to_action_output(): 'ActionOutput'\",\"aggregations\":[\"ActionOutput\"]}"}, {"id": "?:Documents"}, {"id": "?:Iterable"}, {"id": "?:ActionOutput"}, {"id": "metagpt/repo_parser.py:DotClassAttribute"}, {"id": "{\"name\":\"DotClassAttribute\",\"package\":\"metagpt/repo_parser.py:DotClassAttribute\",\"attributes\":{\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"default_\":{\"name\":\"default_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_ : str\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"type_\":{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassAttribute'\",\"description\":\"'DotClassAttribute'\",\"compositions\":[\"DotClassAttribute\"]},\"description\":\"parse(v: str): 'DotClassAttribute'\",\"aggregations\":[\"DotClassAttribute\"]},\"parse_compositions\":{\"name\":\"parse_compositions\",\"args\":[{\"name\":\"types_part\",\"type_\":\"\",\"default_\":\"\",\"description\":\"types_part\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_compositions(types_part): List[str]\",\"aggregations\":[]},\"remove_white_spaces\":{\"name\":\"remove_white_spaces\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove_white_spaces(v: str)\",\"aggregations\":[]},\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"DotClassAttribute\"]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:compositions"}, {"id": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:default_"}, {"id": "{\"name\":\"default_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_ : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:description"}, {"id": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:name"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:type_"}, {"id": "{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:parse"}, {"id": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassAttribute'\",\"description\":\"'DotClassAttribute'\",\"compositions\":[\"DotClassAttribute\"]},\"description\":\"parse(v: str): 'DotClassAttribute'\",\"aggregations\":[\"DotClassAttribute\"]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:parse_compositions"}, {"id": "{\"name\":\"parse_compositions\",\"args\":[{\"name\":\"types_part\",\"type_\":\"\",\"default_\":\"\",\"description\":\"types_part\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_compositions(types_part): List[str]\",\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:remove_white_spaces"}, {"id": "{\"name\":\"remove_white_spaces\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove_white_spaces(v: str)\",\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:sort"}, {"id": "{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}"}, {"id": "?:DotClassAttribute"}, {"id": "metagpt/repo_parser.py:DotClassInfo"}, {"id": "{\"name\":\"DotClassInfo\",\"package\":\"metagpt/repo_parser.py:DotClassInfo\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"attributes\":{\"name\":\"attributes\",\"type_\":\"Dict[str,DotClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : Dict[str, DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]},\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"methods\":{\"name\":\"methods\",\"type_\":\"Dict[str,DotClassMethod]\",\"default_\":\"\",\"description\":\"methods : Dict[str, DotClassMethod]\",\"compositions\":[\"DotClassMethod\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"package\":{\"name\":\"package\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"package : Optional[str]\",\"compositions\":[]}},\"methods\":{\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[\"DotClassAttribute\",\"DotClassMethod\"],\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:aggregations"}, {"id": "{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:attributes"}, {"id": "{\"name\":\"attributes\",\"type_\":\"Dict[str,DotClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : Dict[str, DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:compositions"}, {"id": "metagpt/repo_parser.py:DotClassInfo:methods"}, {"id": "{\"name\":\"methods\",\"type_\":\"Dict[str,DotClassMethod]\",\"default_\":\"\",\"description\":\"methods : Dict[str, DotClassMethod]\",\"compositions\":[\"DotClassMethod\"]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:name"}, {"id": "metagpt/repo_parser.py:DotClassInfo:package"}, {"id": "{\"name\":\"package\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"package : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassInfo:sort"}, {"id": "?:DotClassMethod"}, {"id": "metagpt/repo_parser.py:DotClassMethod"}, {"id": "{\"name\":\"DotClassMethod\",\"package\":\"metagpt/repo_parser.py:DotClassMethod\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"args\":{\"name\":\"args\",\"type_\":\"List[DotClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"return_args\":{\"name\":\"return_args\",\"type_\":\"Optional[DotReturn]\",\"default_\":\"\",\"description\":\"return_args : Optional[DotReturn]\",\"compositions\":[\"DotReturn\"]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassMethod'\",\"description\":\"'DotClassMethod'\",\"compositions\":[\"DotClassMethod\"]},\"description\":\"parse(v: str): 'DotClassMethod'\",\"aggregations\":[\"DotClassMethod\"]}},\"compositions\":[\"DotClassAttribute\",\"DotReturn\"],\"aggregations\":[\"DotClassMethod\"]}"}, {"id": "metagpt/repo_parser.py:DotClassMethod:aggregations"}, {"id": "metagpt/repo_parser.py:DotClassMethod:args"}, {"id": "{\"name\":\"args\",\"type_\":\"List[DotClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]}"}, {"id": "metagpt/repo_parser.py:DotClassMethod:description"}, {"id": "metagpt/repo_parser.py:DotClassMethod:name"}, {"id": "metagpt/repo_parser.py:DotClassMethod:return_args"}, {"id": "{\"name\":\"return_args\",\"type_\":\"Optional[DotReturn]\",\"default_\":\"\",\"description\":\"return_args : Optional[DotReturn]\",\"compositions\":[\"DotReturn\"]}"}, {"id": "metagpt/repo_parser.py:DotClassMethod:parse"}, {"id": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassMethod'\",\"description\":\"'DotClassMethod'\",\"compositions\":[\"DotClassMethod\"]},\"description\":\"parse(v: str): 'DotClassMethod'\",\"aggregations\":[\"DotClassMethod\"]}"}, {"id": "?:DotReturn"}, {"id": "metagpt/repo_parser.py:DotClassRelationship"}, {"id": "{\"name\":\"DotClassRelationship\",\"package\":\"metagpt/repo_parser.py:DotClassRelationship\",\"attributes\":{\"dest\":{\"name\":\"dest\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dest : str\",\"compositions\":[]},\"label\":{\"name\":\"label\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"label : Optional[str]\",\"compositions\":[]},\"relationship\":{\"name\":\"relationship\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"relationship : str\",\"compositions\":[]},\"src\":{\"name\":\"src\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"src : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassRelationship:dest"}, {"id": "{\"name\":\"dest\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dest : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassRelationship:label"}, {"id": "{\"name\":\"label\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"label : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassRelationship:relationship"}, {"id": "{\"name\":\"relationship\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"relationship : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotClassRelationship:src"}, {"id": "{\"name\":\"src\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"src : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:DotReturn"}, {"id": "{\"name\":\"DotReturn\",\"package\":\"metagpt/repo_parser.py:DotReturn\",\"attributes\":{\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"type_\":{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotReturn'\\\\|None\",\"description\":\"'DotReturn' \\\\| None\",\"compositions\":[\"DotReturn\\\\\"]},\"description\":\"parse(v: str): 'DotReturn' \\\\| None\",\"aggregations\":[\"DotReturn\\\\\"]},\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"DotReturn\\\\\"]}"}, {"id": "metagpt/repo_parser.py:DotReturn:compositions"}, {"id": "metagpt/repo_parser.py:DotReturn:description"}, {"id": "metagpt/repo_parser.py:DotReturn:type_"}, {"id": "metagpt/repo_parser.py:DotReturn:parse"}, {"id": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotReturn'\\\\|None\",\"description\":\"'DotReturn' \\\\| None\",\"compositions\":[\"DotReturn\\\\\"]},\"description\":\"parse(v: str): 'DotReturn' \\\\| None\",\"aggregations\":[\"DotReturn\\\\\"]}"}, {"id": "metagpt/repo_parser.py:DotReturn:sort"}, {"id": "?:DotReturn\\"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Embedding"}, {"id": "{\"name\":\"Embedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:Embedding\",\"attributes\":{\"embedding\":{\"name\":\"embedding\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"embedding : List[float]\",\"compositions\":[]},\"index\":{\"name\":\"index\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"index : int\",\"compositions\":[]},\"object\":{\"name\":\"object\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Embedding:embedding"}, {"id": "{\"name\":\"embedding\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"embedding : List[float]\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Embedding:index"}, {"id": "{\"name\":\"index\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"index : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Embedding:object"}, {"id": "{\"name\":\"object\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py"}, {"id": "metagpt/roles/engineer.py:Engineer"}, {"id": "{\"name\":\"Engineer\",\"package\":\"metagpt/roles/engineer.py:Engineer\",\"attributes\":{\"action_description\":{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]},\"code_todos\":{\"name\":\"code_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"code_todos : list\",\"compositions\":[]},\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"n_borg\":{\"name\":\"n_borg\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_borg : int\",\"compositions\":[]},\"n_summarize\":{\"name\":\"n_summarize\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_summarize : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"next_todo_action\":{\"name\":\"next_todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"next_todo_action : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]},\"summarize_todos\":{\"name\":\"summarize_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"summarize_todos : list\",\"compositions\":[]},\"use_code_review\":{\"name\":\"use_code_review\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_code_review : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:action_description"}, {"id": "{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:code_todos"}, {"id": "{\"name\":\"code_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"code_todos : list\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:constraints"}, {"id": "metagpt/roles/engineer.py:Engineer:goal"}, {"id": "metagpt/roles/engineer.py:Engineer:n_borg"}, {"id": "{\"name\":\"n_borg\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_borg : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:n_summarize"}, {"id": "{\"name\":\"n_summarize\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_summarize : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:name"}, {"id": "metagpt/roles/engineer.py:Engineer:next_todo_action"}, {"id": "{\"name\":\"next_todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"next_todo_action : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:profile"}, {"id": "metagpt/roles/engineer.py:Engineer:src_workspace"}, {"id": "{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:summarize_todos"}, {"id": "{\"name\":\"summarize_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"summarize_todos : list\",\"compositions\":[]}"}, {"id": "metagpt/roles/engineer.py:Engineer:use_code_review"}, {"id": "{\"name\":\"use_code_review\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_code_review : bool\",\"compositions\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:EnronTemplate"}, {"id": "{\"name\":\"EnronTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:EnronTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"subj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen(subj)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:EnronTemplate:gen"}, {"id": "{\"name\":\"gen\",\"args\":[{\"name\":\"subj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen(subj)\",\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Entity"}, {"id": "{\"name\":\"Entity\",\"package\":\"metagpt/learn/skill_loader.py:Entity\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"name : Optional[str]\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"List[Skill]\",\"default_\":\"\",\"description\":\"skills : List[Skill]\",\"compositions\":[\"Skill\"]}},\"methods\":{},\"compositions\":[\"Skill\"],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Entity:name"}, {"id": "{\"name\":\"name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"name : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Entity:skills"}, {"id": "{\"name\":\"skills\",\"type_\":\"List[Skill]\",\"default_\":\"\",\"description\":\"skills : List[Skill]\",\"compositions\":[\"Skill\"]}"}, {"id": "?:Skill"}, {"id": "metagpt/environment.py"}, {"id": "metagpt/environment.py:Environment"}, {"id": "{\"name\":\"Environment\",\"package\":\"metagpt/environment.py:Environment\",\"attributes\":{\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history : str\",\"compositions\":[]},\"is_idle\":{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]},\"member_addrs\":{\"name\":\"member_addrs\",\"type_\":\"dict[Role,Set]\",\"default_\":\"\",\"description\":\"member_addrs : dict[Role, Set]\",\"compositions\":[\"Role\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"roles\":{\"name\":\"roles\",\"type_\":\"dict[str,SerializeAsAny[Role]]\",\"default_\":\"\",\"description\":\"roles : dict[str, SerializeAsAny[Role]]\",\"compositions\":[\"Role\",\"SerializeAsAny\"]}},\"methods\":{\"add_role\":{\"name\":\"add_role\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_role(role: Role)\",\"aggregations\":[\"Role\"]},\"add_roles\":{\"name\":\"add_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Role]\",\"default_\":\"\",\"description\":\"roles: Iterable[Role]\",\"compositions\":[\"Iterable\",\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_roles(roles: Iterable[Role])\",\"aggregations\":[\"Role\",\"Iterable\"]},\"archive\":{\"name\":\"archive\",\"args\":[{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(auto_archive)\",\"aggregations\":[]},\"get_addresses\":{\"name\":\"get_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_addresses(obj)\",\"aggregations\":[]},\"get_role\":{\"name\":\"get_role\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Role\",\"description\":\"Role\",\"compositions\":[\"Role\"]},\"description\":\"get_role(name: str): Role\",\"aggregations\":[\"Role\"]},\"get_roles\":{\"name\":\"get_roles\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,Role]\",\"description\":\"dict[str, Role]\",\"compositions\":[\"Role\"]},\"description\":\"get_roles(): dict[str, Role]\",\"aggregations\":[\"Role\"]},\"init_roles\":{\"name\":\"init_roles\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_roles()\",\"aggregations\":[]},\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"peekable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"peekable: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"publish_message(message: Message, peekable: bool): bool\",\"aggregations\":[\"Message\"]},\"role_names\":{\"name\":\"role_names\",\"args\":[],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"role_names(): list[str]\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]},\"set_addresses\":{\"name\":\"set_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]},{\"name\":\"addresses\",\"type_\":\"\",\"default_\":\"\",\"description\":\"addresses\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(obj, addresses)\",\"aggregations\":[]}},\"compositions\":[\"Role\",\"SerializeAsAny\"],\"aggregations\":[\"Iterable\",\"Message\"]}"}, {"id": "metagpt/environment.py:Environment:context"}, {"id": "metagpt/environment.py:Environment:desc"}, {"id": "metagpt/environment.py:Environment:history"}, {"id": "{\"name\":\"history\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history : str\",\"compositions\":[]}"}, {"id": "metagpt/environment.py:Environment:is_idle"}, {"id": "{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]}"}, {"id": "metagpt/environment.py:Environment:member_addrs"}, {"id": "{\"name\":\"member_addrs\",\"type_\":\"dict[Role,Set]\",\"default_\":\"\",\"description\":\"member_addrs : dict[Role, Set]\",\"compositions\":[\"Role\"]}"}, {"id": "metagpt/environment.py:Environment:model_config"}, {"id": "metagpt/environment.py:Environment:roles"}, {"id": "{\"name\":\"roles\",\"type_\":\"dict[str,SerializeAsAny[Role]]\",\"default_\":\"\",\"description\":\"roles : dict[str, SerializeAsAny[Role]]\",\"compositions\":[\"Role\",\"SerializeAsAny\"]}"}, {"id": "metagpt/environment.py:Environment:add_role"}, {"id": "{\"name\":\"add_role\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_role(role: Role)\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/environment.py:Environment:add_roles"}, {"id": "{\"name\":\"add_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Role]\",\"default_\":\"\",\"description\":\"roles: Iterable[Role]\",\"compositions\":[\"Iterable\",\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_roles(roles: Iterable[Role])\",\"aggregations\":[\"Role\",\"Iterable\"]}"}, {"id": "metagpt/environment.py:Environment:archive"}, {"id": "{\"name\":\"archive\",\"args\":[{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(auto_archive)\",\"aggregations\":[]}"}, {"id": "metagpt/environment.py:Environment:get_addresses"}, {"id": "{\"name\":\"get_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_addresses(obj)\",\"aggregations\":[]}"}, {"id": "metagpt/environment.py:Environment:get_role"}, {"id": "{\"name\":\"get_role\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Role\",\"description\":\"Role\",\"compositions\":[\"Role\"]},\"description\":\"get_role(name: str): Role\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/environment.py:Environment:get_roles"}, {"id": "{\"name\":\"get_roles\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,Role]\",\"description\":\"dict[str, Role]\",\"compositions\":[\"Role\"]},\"description\":\"get_roles(): dict[str, Role]\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/environment.py:Environment:init_roles"}, {"id": "{\"name\":\"init_roles\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_roles()\",\"aggregations\":[]}"}, {"id": "metagpt/environment.py:Environment:publish_message"}, {"id": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"peekable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"peekable: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"publish_message(message: Message, peekable: bool): bool\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/environment.py:Environment:role_names"}, {"id": "{\"name\":\"role_names\",\"args\":[],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"role_names(): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/environment.py:Environment:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]}"}, {"id": "metagpt/environment.py:Environment:set_addresses"}, {"id": "{\"name\":\"set_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]},{\"name\":\"addresses\",\"type_\":\"\",\"default_\":\"\",\"description\":\"addresses\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(obj, addresses)\",\"aggregations\":[]}"}, {"id": "?:Role"}, {"id": "?:SerializeAsAny"}, {"id": "metagpt/learn/skill_loader.py:Example"}, {"id": "{\"name\":\"Example\",\"package\":\"metagpt/learn/skill_loader.py:Example\",\"attributes\":{\"answer\":{\"name\":\"answer\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"answer : str\",\"compositions\":[]},\"ask\":{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Example:answer"}, {"id": "{\"name\":\"answer\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"answer : str\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Example:ask"}, {"id": "metagpt/actions/execute_task.py"}, {"id": "metagpt/actions/execute_task.py:ExecuteTask"}, {"id": "{\"name\":\"ExecuteTask\",\"package\":\"metagpt/actions/execute_task.py:ExecuteTask\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"i_context : list[Message]\",\"compositions\":[\"Message\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/execute_task.py:ExecuteTask:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"i_context : list[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/actions/execute_task.py:ExecuteTask:name"}, {"id": "metagpt/actions/execute_task.py:ExecuteTask:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore"}, {"id": "{\"name\":\"FaissStore\",\"package\":\"metagpt/document_store/faiss_store.py:FaissStore\",\"attributes\":{\"content_col\":{\"name\":\"content_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content_col : str\",\"compositions\":[]},\"embedding\":{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]},\"meta_col\":{\"name\":\"meta_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"meta_col : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"texts\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"texts: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"add(texts: list[str]): list[str]\",\"aggregations\":[]},\"asearch\":{\"name\":\"asearch\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"asearch()\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete()\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"expand_cols\",\"type_\":\"\",\"default_\":\"\",\"description\":\"expand_cols\",\"compositions\":[]},{\"name\":\"sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, expand_cols, sep)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[\"OpenAIEmbeddings\"],\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:content_col"}, {"id": "{\"name\":\"content_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content_col : str\",\"compositions\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:embedding"}, {"id": "{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:meta_col"}, {"id": "{\"name\":\"meta_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"meta_col : str\",\"compositions\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:store"}, {"id": "{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"texts\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"texts: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"add(texts: list[str]): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:asearch"}, {"id": "{\"name\":\"asearch\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"asearch()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:delete"}, {"id": "{\"name\":\"delete\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete()\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:persist"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"expand_cols\",\"type_\":\"\",\"default_\":\"\",\"description\":\"expand_cols\",\"compositions\":[]},{\"name\":\"sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, expand_cols, sep)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:write"}, {"id": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"id": "?:OpenAIEmbeddings"}, {"id": "metagpt/utils/file.py"}, {"id": "metagpt/utils/file.py:File"}, {"id": "{\"name\":\"File\",\"package\":\"metagpt/utils/file.py:File\",\"attributes\":{\"CHUNK_SIZE\":{\"name\":\"CHUNK_SIZE\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"CHUNK_SIZE : int\",\"compositions\":[]}},\"methods\":{\"read\":{\"name\":\"read\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"chunk_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"chunk_size: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"read(file_path: Path, chunk_size: int): bytes\",\"aggregations\":[\"bytes\",\"Path\"]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"root_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"root_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"bytes\",\"default_\":\"\",\"description\":\"content: bytes\",\"compositions\":[\"bytes\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"write(root_path: Path, filename: str, content: bytes): Path\",\"aggregations\":[\"bytes\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"bytes\",\"Path\"]}"}, {"id": "metagpt/utils/file.py:File:CHUNK_SIZE"}, {"id": "{\"name\":\"CHUNK_SIZE\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"CHUNK_SIZE : int\",\"compositions\":[]}"}, {"id": "metagpt/utils/file.py:File:read"}, {"id": "{\"name\":\"read\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"chunk_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"chunk_size: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"read(file_path: Path, chunk_size: int): bytes\",\"aggregations\":[\"bytes\",\"Path\"]}"}, {"id": "metagpt/utils/file.py:File:write"}, {"id": "{\"name\":\"write\",\"args\":[{\"name\":\"root_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"root_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"bytes\",\"default_\":\"\",\"description\":\"content: bytes\",\"compositions\":[\"bytes\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"write(root_path: Path, filename: str, content: bytes): Path\",\"aggregations\":[\"bytes\",\"Path\"]}"}, {"id": "?:bytes"}, {"id": "metagpt/utils/file_repository.py"}, {"id": "metagpt/utils/file_repository.py:FileRepository"}, {"id": "{\"name\":\"FileRepository\",\"package\":\"metagpt/utils/file_repository.py:FileRepository\",\"attributes\":{\"all_files\":{\"name\":\"all_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_files\",\"compositions\":[]},\"changed_files\":{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]},\"root_path\":{\"name\":\"root_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_path\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(filename: Path \\\\| str)\",\"aggregations\":[\"Path\\\\\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Document\\\\|None\",\"description\":\"Document \\\\| None\",\"compositions\":[\"Document\\\\\"]},\"description\":\"get(filename: Path \\\\| str): Document \\\\| None\",\"aggregations\":[\"Path\\\\\",\"Document\\\\\"]},\"get_all\":{\"name\":\"get_all\",\"args\":[{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[Document]\",\"description\":\"List[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_all(filter_ignored): List[Document]\",\"aggregations\":[\"Document\"]},\"get_change_dir_files\":{\"name\":\"get_change_dir_files\",\"args\":[{\"name\":\"dir\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"dir: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_change_dir_files(dir: Path \\\\| str): List\",\"aggregations\":[\"Path\\\\\"]},\"get_changed_dependency\":{\"name\":\"get_changed_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_changed_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]},\"get_dependency\":{\"name\":\"get_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]},\"new_filename\":{\"name\":\"new_filename\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_filename()\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"save(filename: Path \\\\| str, content, dependencies: List[str]): Document\",\"aggregations\":[\"Path\\\\\",\"Document\"]},\"save_doc\":{\"name\":\"save_doc\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_doc(doc: Document, dependencies: List[str])\",\"aggregations\":[\"Document\"]},\"save_pdf\":{\"name\":\"save_pdf\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"with_suffix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"with_suffix: str\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_pdf(doc: Document, with_suffix: str, dependencies: List[str])\",\"aggregations\":[\"Document\"]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\",\"Document\\\\\",\"Document\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:all_files"}, {"id": "{\"name\":\"all_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_files\",\"compositions\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:changed_files"}, {"id": "{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:root_path"}, {"id": "{\"name\":\"root_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_path\",\"compositions\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:workdir"}, {"id": "{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(filename: Path \\\\| str)\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Document\\\\|None\",\"description\":\"Document \\\\| None\",\"compositions\":[\"Document\\\\\"]},\"description\":\"get(filename: Path \\\\| str): Document \\\\| None\",\"aggregations\":[\"Path\\\\\",\"Document\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get_all"}, {"id": "{\"name\":\"get_all\",\"args\":[{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[Document]\",\"description\":\"List[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_all(filter_ignored): List[Document]\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get_change_dir_files"}, {"id": "{\"name\":\"get_change_dir_files\",\"args\":[{\"name\":\"dir\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"dir: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_change_dir_files(dir: Path \\\\| str): List\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get_changed_dependency"}, {"id": "{\"name\":\"get_changed_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_changed_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:get_dependency"}, {"id": "{\"name\":\"get_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:new_filename"}, {"id": "{\"name\":\"new_filename\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_filename()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:save"}, {"id": "{\"name\":\"save\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"save(filename: Path \\\\| str, content, dependencies: List[str]): Document\",\"aggregations\":[\"Path\\\\\",\"Document\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:save_doc"}, {"id": "{\"name\":\"save_doc\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_doc(doc: Document, dependencies: List[str])\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:save_pdf"}, {"id": "{\"name\":\"save_pdf\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"with_suffix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"with_suffix: str\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_pdf(doc: Document, with_suffix: str, dependencies: List[str])\",\"aggregations\":[\"Document\"]}"}, {"id": "?:Document\\"}, {"id": "metagpt/provider/fireworks_api.py"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager"}, {"id": "{\"name\":\"FireworksCostManager\",\"package\":\"metagpt/provider/fireworks_api.py:FireworksCostManager\",\"attributes\":{\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_cost\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{\"model_grade_token_costs\":{\"name\":\"model_grade_token_costs\",\"args\":[{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,float]\",\"description\":\"dict[str, float]\",\"compositions\":[]},\"description\":\"model_grade_token_costs(model: str): dict[str, float]\",\"aggregations\":[]},\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens: int\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"completion_tokens: int\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens: int, completion_tokens: int, model: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_completion_tokens"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_cost"}, {"id": "{\"name\":\"total_cost\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_cost\",\"compositions\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_prompt_tokens"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:model_grade_token_costs"}, {"id": "{\"name\":\"model_grade_token_costs\",\"args\":[{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,float]\",\"description\":\"dict[str, float]\",\"compositions\":[]},\"description\":\"model_grade_token_costs(model: str): dict[str, float]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksCostManager:update_cost"}, {"id": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens: int\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"completion_tokens: int\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens: int, completion_tokens: int, model: str)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM"}, {"id": "{\"name\":\"FireworksLLM\",\"package\":\"metagpt/provider/fireworks_api.py:FireworksLLM\",\"attributes\":{\"auto_max_tokens\":{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}},\"methods\":{\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:auto_max_tokens"}, {"id": "{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:acompletion_text"}, {"id": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:get_costs"}, {"id": "metagpt/actions/fix_bug.py"}, {"id": "metagpt/actions/fix_bug.py:FixBug"}, {"id": "{\"name\":\"FixBug\",\"package\":\"metagpt/actions/fix_bug.py:FixBug\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/fix_bug.py:FixBug:name"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator"}, {"id": "{\"name\":\"GPTPromptGenerator\",\"package\":\"metagpt/tools/prompt_writer.py:GPTPromptGenerator\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"example\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"example: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"style: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[list[str],str]\",\"description\":\"Union[list[str], str]\",\"compositions\":[]},\"description\":\"gen(example: str, style: str): Union[list[str], str]\",\"aggregations\":[]},\"gen_chatbot_style\":{\"name\":\"gen_chatbot_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_chatbot_style(example)\",\"aggregations\":[]},\"gen_instruction_style\":{\"name\":\"gen_instruction_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_instruction_style(example)\",\"aggregations\":[]},\"gen_query_style\":{\"name\":\"gen_query_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_query_style(example)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen"}, {"id": "{\"name\":\"gen\",\"args\":[{\"name\":\"example\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"example: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"style: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[list[str],str]\",\"description\":\"Union[list[str], str]\",\"compositions\":[]},\"description\":\"gen(example: str, style: str): Union[list[str], str]\",\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_chatbot_style"}, {"id": "{\"name\":\"gen_chatbot_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_chatbot_style(example)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_instruction_style"}, {"id": "{\"name\":\"gen_instruction_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_instruction_style(example)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_query_style"}, {"id": "{\"name\":\"gen_query_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_query_style(example)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/google_gemini_api.py"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel"}, {"id": "{\"name\":\"GeminiGenerativeModel\",\"package\":\"metagpt/provider/google_gemini_api.py:GeminiGenerativeModel\",\"attributes\":{},\"methods\":{\"count_tokens\":{\"name\":\"count_tokens\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]},\"count_tokens_async\":{\"name\":\"count_tokens_async\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens_async(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]}},\"compositions\":[],\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens"}, {"id": "{\"name\":\"count_tokens\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens_async"}, {"id": "{\"name\":\"count_tokens_async\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens_async(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]}"}, {"id": "?:content_types.ContentsType"}, {"id": "?:glm.CountTokensResponse"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM"}, {"id": "{\"name\":\"GeminiLLM\",\"package\":\"metagpt/provider/google_gemini_api.py:GeminiLLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"aget_usage\":{\"name\":\"aget_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aget_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]},\"completion\":{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'GenerateContentResponse'\",\"description\":\"'GenerateContentResponse'\",\"compositions\":[\"GenerateContentResponse\"]},\"description\":\"completion(messages: list[dict]): 'GenerateContentResponse'\",\"aggregations\":[\"GenerateContentResponse\"]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"GenerateContentResponse\",\"default_\":\"\",\"description\":\"resp: GenerateContentResponse\",\"compositions\":[\"GenerateContentResponse\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: GenerateContentResponse): str\",\"aggregations\":[\"GenerateContentResponse\"]},\"get_usage\":{\"name\":\"get_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"GenerateContentResponse\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:config"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:model"}, {"id": "{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:use_system_prompt"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion"}, {"id": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion_text"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:aget_usage"}, {"id": "{\"name\":\"aget_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aget_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:completion"}, {"id": "{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'GenerateContentResponse'\",\"description\":\"'GenerateContentResponse'\",\"compositions\":[\"GenerateContentResponse\"]},\"description\":\"completion(messages: list[dict]): 'GenerateContentResponse'\",\"aggregations\":[\"GenerateContentResponse\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_choice_text"}, {"id": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"GenerateContentResponse\",\"default_\":\"\",\"description\":\"resp: GenerateContentResponse\",\"compositions\":[\"GenerateContentResponse\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: GenerateContentResponse): str\",\"aggregations\":[\"GenerateContentResponse\"]}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_usage"}, {"id": "{\"name\":\"get_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}"}, {"id": "?:GenerateContentResponse"}, {"id": "metagpt/provider/general_api_requestor.py"}, {"id": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor"}, {"id": "{\"name\":\"GeneralAPIRequestor\",\"package\":\"metagpt/provider/general_api_requestor.py:GeneralAPIRequestor\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/generate_questions.py"}, {"id": "metagpt/actions/generate_questions.py:GenerateQuestions"}, {"id": "{\"name\":\"GenerateQuestions\",\"package\":\"metagpt/actions/generate_questions.py:GenerateQuestions\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionNode\",\"description\":\"ActionNode\",\"compositions\":[\"ActionNode\"]},\"description\":\"run(context): ActionNode\",\"aggregations\":[\"ActionNode\"]}},\"compositions\":[],\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/generate_questions.py:GenerateQuestions:name"}, {"id": "metagpt/actions/generate_questions.py:GenerateQuestions:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionNode\",\"description\":\"ActionNode\",\"compositions\":[\"ActionNode\"]},\"description\":\"run(context): ActionNode\",\"aggregations\":[\"ActionNode\"]}"}, {"id": "metagpt/actions/invoice_ocr.py"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable"}, {"id": "{\"name\":\"GenerateTable\",\"package\":\"metagpt/actions/invoice_ocr.py:GenerateTable\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"ocr_results\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_results: list\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(ocr_results: list, filename: str): dict[str, str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable:i_context"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable:language"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable:name"}, {"id": "metagpt/actions/invoice_ocr.py:GenerateTable:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"ocr_results\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_results: list\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(ocr_results: list, filename: str): dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb"}, {"id": "{\"name\":\"GetMessageFromWeb\",\"package\":\"metagpt/provider/spark_api.py:GetMessageFromWeb\",\"attributes\":{\"domain\":{\"name\":\"domain\",\"type_\":\"\",\"default_\":\"\",\"description\":\"domain\",\"compositions\":[]},\"ret\":{\"name\":\"ret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ret : str\",\"compositions\":[]},\"spark_api_key\":{\"name\":\"spark_api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_key\",\"compositions\":[]},\"spark_api_secret\":{\"name\":\"spark_api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_secret\",\"compositions\":[]},\"spark_appid\":{\"name\":\"spark_appid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_appid\",\"compositions\":[]},\"spark_url\":{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]},\"text\":{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}},\"methods\":{\"gen_params\":{\"name\":\"gen_params\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_params()\",\"aggregations\":[]},\"on_close\":{\"name\":\"on_close\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"one\",\"type_\":\"\",\"default_\":\"\",\"description\":\"one\",\"compositions\":[]},{\"name\":\"two\",\"type_\":\"\",\"default_\":\"\",\"description\":\"two\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_close(ws, one, two)\",\"aggregations\":[]},\"on_error\":{\"name\":\"on_error\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"error\",\"type_\":\"\",\"default_\":\"\",\"description\":\"error\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_error(ws, error)\",\"aggregations\":[]},\"on_message\":{\"name\":\"on_message\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_message(ws, message)\",\"aggregations\":[]},\"on_open\":{\"name\":\"on_open\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_open(ws)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"send\":{\"name\":\"send\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"send(ws)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:domain"}, {"id": "{\"name\":\"domain\",\"type_\":\"\",\"default_\":\"\",\"description\":\"domain\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:ret"}, {"id": "{\"name\":\"ret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ret : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_key"}, {"id": "{\"name\":\"spark_api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_key\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_secret"}, {"id": "{\"name\":\"spark_api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_secret\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_appid"}, {"id": "{\"name\":\"spark_appid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_appid\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_url"}, {"id": "{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:text"}, {"id": "{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:gen_params"}, {"id": "{\"name\":\"gen_params\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_params()\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_close"}, {"id": "{\"name\":\"on_close\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"one\",\"type_\":\"\",\"default_\":\"\",\"description\":\"one\",\"compositions\":[]},{\"name\":\"two\",\"type_\":\"\",\"default_\":\"\",\"description\":\"two\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_close(ws, one, two)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_error"}, {"id": "{\"name\":\"on_error\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"error\",\"type_\":\"\",\"default_\":\"\",\"description\":\"error\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_error(ws, error)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_message"}, {"id": "{\"name\":\"on_message\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_message(ws, message)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_open"}, {"id": "{\"name\":\"on_open\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_open(ws)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:run"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:send"}, {"id": "{\"name\":\"send\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"send(ws)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository"}, {"id": "{\"name\":\"GitRepository\",\"package\":\"metagpt/utils/git_repository.py:GitRepository\",\"attributes\":{\"changed_files\":{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]},\"is_valid\":{\"name\":\"is_valid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_valid\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"add_change\":{\"name\":\"add_change\",\"args\":[{\"name\":\"files\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"files: Dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_change(files: Dict)\",\"aggregations\":[]},\"archive\":{\"name\":\"archive\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(comments)\",\"aggregations\":[]},\"commit\":{\"name\":\"commit\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"commit(comments)\",\"aggregations\":[]},\"delete_repository\":{\"name\":\"delete_repository\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_repository()\",\"aggregations\":[]},\"filter_gitignore\":{\"name\":\"filter_gitignore\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"filenames: List[str]\",\"compositions\":[]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"filter_gitignore(filenames: List[str], root_relative_path: Path \\\\| str): List[str]\",\"aggregations\":[\"Path\\\\\"]},\"get_dependency\":{\"name\":\"get_dependency\",\"args\":[],\"return_args\":{\"type_\":\"DependencyFile\",\"description\":\"DependencyFile\",\"compositions\":[\"DependencyFile\"]},\"description\":\"get_dependency(): DependencyFile\",\"aggregations\":[\"DependencyFile\"]},\"get_files\":{\"name\":\"get_files\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_files(relative_path: Path \\\\| str, root_relative_path: Path \\\\| str, filter_ignored): List\",\"aggregations\":[\"Path\\\\\"]},\"is_git_dir\":{\"name\":\"is_git_dir\",\"args\":[{\"name\":\"local_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"local_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_git_dir(local_path)\",\"aggregations\":[]},\"new_file_repository\":{\"name\":\"new_file_repository\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"FileRepository\",\"description\":\"FileRepository\",\"compositions\":[\"FileRepository\"]},\"description\":\"new_file_repository(relative_path: Path \\\\| str): FileRepository\",\"aggregations\":[\"Path\\\\\",\"FileRepository\"]},\"open\":{\"name\":\"open\",\"args\":[{\"name\":\"local_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"auto_init\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_init\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"open(local_path: Path, auto_init)\",\"aggregations\":[\"Path\"]},\"rename_root\":{\"name\":\"rename_root\",\"args\":[{\"name\":\"new_dir_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_dir_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rename_root(new_dir_name)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\",\"DependencyFile\",\"FileRepository\",\"Path\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:changed_files"}, {"id": "metagpt/utils/git_repository.py:GitRepository:is_valid"}, {"id": "{\"name\":\"is_valid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_valid\",\"compositions\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:status"}, {"id": "metagpt/utils/git_repository.py:GitRepository:workdir"}, {"id": "metagpt/utils/git_repository.py:GitRepository:add_change"}, {"id": "{\"name\":\"add_change\",\"args\":[{\"name\":\"files\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"files: Dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_change(files: Dict)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:archive"}, {"id": "{\"name\":\"archive\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(comments)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:commit"}, {"id": "{\"name\":\"commit\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"commit(comments)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:delete_repository"}, {"id": "{\"name\":\"delete_repository\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_repository()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:filter_gitignore"}, {"id": "{\"name\":\"filter_gitignore\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"filenames: List[str]\",\"compositions\":[]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"filter_gitignore(filenames: List[str], root_relative_path: Path \\\\| str): List[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:get_dependency"}, {"id": "{\"name\":\"get_dependency\",\"args\":[],\"return_args\":{\"type_\":\"DependencyFile\",\"description\":\"DependencyFile\",\"compositions\":[\"DependencyFile\"]},\"description\":\"get_dependency(): DependencyFile\",\"aggregations\":[\"DependencyFile\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:get_files"}, {"id": "{\"name\":\"get_files\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_files(relative_path: Path \\\\| str, root_relative_path: Path \\\\| str, filter_ignored): List\",\"aggregations\":[\"Path\\\\\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:is_git_dir"}, {"id": "{\"name\":\"is_git_dir\",\"args\":[{\"name\":\"local_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"local_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_git_dir(local_path)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:new_file_repository"}, {"id": "{\"name\":\"new_file_repository\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"FileRepository\",\"description\":\"FileRepository\",\"compositions\":[\"FileRepository\"]},\"description\":\"new_file_repository(relative_path: Path \\\\| str): FileRepository\",\"aggregations\":[\"Path\\\\\",\"FileRepository\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:open"}, {"id": "{\"name\":\"open\",\"args\":[{\"name\":\"local_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"auto_init\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_init\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"open(local_path: Path, auto_init)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:rename_root"}, {"id": "{\"name\":\"rename_root\",\"args\":[{\"name\":\"new_dir_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_dir_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rename_root(new_dir_name)\",\"aggregations\":[]}"}, {"id": "?:DependencyFile"}, {"id": "?:FileRepository"}, {"id": "metagpt/tools/search_engine_googleapi.py"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper"}, {"id": "{\"name\":\"GoogleAPIWrapper\",\"package\":\"metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper\",\"attributes\":{\"executor\":{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]},\"google_api_client\":{\"name\":\"google_api_client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"google_api_client\",\"compositions\":[]},\"google_api_key\":{\"name\":\"google_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"google_api_key : Optional[str]\",\"compositions\":[]},\"google_cse_id\":{\"name\":\"google_cse_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"google_cse_id : Optional[str]\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"check_google_api_key\":{\"name\":\"check_google_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_google_api_key(val: str)\",\"aggregations\":[]},\"check_google_cse_id\":{\"name\":\"check_google_cse_id\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_google_cse_id(val: str)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\\\\|list[dict]\",\"description\":\"str \\\\| list[dict]\",\"compositions\":[\"str\\\\\"]},\"description\":\"run(query: str, max_results: int, as_string: bool, focus: list[str] \\\\| None): str \\\\| list[dict]\",\"aggregations\":[\"str\\\\\",\"\\\\\"]}},\"compositions\":[\"futures.Executor\",\"asyncio.AbstractEventLoop\"],\"aggregations\":[\"str\\\\\",\"\\\\\"]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:executor"}, {"id": "{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client"}, {"id": "{\"name\":\"google_api_client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"google_api_client\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_key"}, {"id": "{\"name\":\"google_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"google_api_key : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_cse_id"}, {"id": "{\"name\":\"google_cse_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"google_cse_id : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:loop"}, {"id": "{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:model_config"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:check_google_api_key"}, {"id": "{\"name\":\"check_google_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_google_api_key(val: str)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:check_google_cse_id"}, {"id": "{\"name\":\"check_google_cse_id\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_google_cse_id(val: str)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\\\\|list[dict]\",\"description\":\"str \\\\| list[dict]\",\"compositions\":[\"str\\\\\"]},\"description\":\"run(query: str, max_results: int, as_string: bool, focus: list[str] \\\\| None): str \\\\| list[dict]\",\"aggregations\":[\"str\\\\\",\"\\\\\"]}"}, {"id": "?:futures.Executor"}, {"id": "?:asyncio.AbstractEventLoop"}, {"id": "metagpt/utils/graph_repository.py"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword"}, {"id": "{\"name\":\"GraphKeyword\",\"package\":\"metagpt/utils/graph_repository.py:GraphKeyword\",\"attributes\":{\"CLASS\":{\"name\":\"CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS : str\",\"compositions\":[]},\"CLASS_METHOD\":{\"name\":\"CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_METHOD : str\",\"compositions\":[]},\"CLASS_PROPERTY\":{\"name\":\"CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_PROPERTY : str\",\"compositions\":[]},\"FUNCTION\":{\"name\":\"FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FUNCTION : str\",\"compositions\":[]},\"GLOBAL_VARIABLE\":{\"name\":\"GLOBAL_VARIABLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"GLOBAL_VARIABLE : str\",\"compositions\":[]},\"HAS_CLASS\":{\"name\":\"HAS_CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS : str\",\"compositions\":[]},\"HAS_CLASS_METHOD\":{\"name\":\"HAS_CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_METHOD : str\",\"compositions\":[]},\"HAS_CLASS_PROPERTY\":{\"name\":\"HAS_CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_PROPERTY : str\",\"compositions\":[]},\"HAS_CLASS_USE_CASE\":{\"name\":\"HAS_CLASS_USE_CASE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_USE_CASE : str\",\"compositions\":[]},\"HAS_CLASS_VIEW\":{\"name\":\"HAS_CLASS_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_VIEW : str\",\"compositions\":[]},\"HAS_DETAIL\":{\"name\":\"HAS_DETAIL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_DETAIL : str\",\"compositions\":[]},\"HAS_FUNCTION\":{\"name\":\"HAS_FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_FUNCTION : str\",\"compositions\":[]},\"HAS_PAGE_INFO\":{\"name\":\"HAS_PAGE_INFO\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PAGE_INFO : str\",\"compositions\":[]},\"HAS_PARTICIPANT\":{\"name\":\"HAS_PARTICIPANT\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PARTICIPANT : str\",\"compositions\":[]},\"HAS_SEQUENCE_VIEW\":{\"name\":\"HAS_SEQUENCE_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW : str\",\"compositions\":[]},\"IS\":{\"name\":\"IS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS : str\",\"compositions\":[]},\"IS_AGGREGATE_OF\":{\"name\":\"IS_AGGREGATE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_AGGREGATE_OF : str\",\"compositions\":[]},\"IS_COMPOSITE_OF\":{\"name\":\"IS_COMPOSITE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_COMPOSITE_OF : str\",\"compositions\":[]},\"NULL\":{\"name\":\"NULL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"NULL : str\",\"compositions\":[]},\"OF\":{\"name\":\"OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"OF : str\",\"compositions\":[]},\"ON\":{\"name\":\"ON\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ON : str\",\"compositions\":[]},\"SOURCE_CODE\":{\"name\":\"SOURCE_CODE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"SOURCE_CODE : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS"}, {"id": "{\"name\":\"CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_METHOD"}, {"id": "{\"name\":\"CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_METHOD : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_PROPERTY"}, {"id": "{\"name\":\"CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_PROPERTY : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:FUNCTION"}, {"id": "{\"name\":\"FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FUNCTION : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:GLOBAL_VARIABLE"}, {"id": "{\"name\":\"GLOBAL_VARIABLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"GLOBAL_VARIABLE : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS"}, {"id": "{\"name\":\"HAS_CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_METHOD"}, {"id": "{\"name\":\"HAS_CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_METHOD : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_PROPERTY"}, {"id": "{\"name\":\"HAS_CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_PROPERTY : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_USE_CASE"}, {"id": "{\"name\":\"HAS_CLASS_USE_CASE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_USE_CASE : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_VIEW"}, {"id": "{\"name\":\"HAS_CLASS_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_VIEW : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_DETAIL"}, {"id": "{\"name\":\"HAS_DETAIL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_DETAIL : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_FUNCTION"}, {"id": "{\"name\":\"HAS_FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_FUNCTION : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PAGE_INFO"}, {"id": "{\"name\":\"HAS_PAGE_INFO\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PAGE_INFO : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PARTICIPANT"}, {"id": "{\"name\":\"HAS_PARTICIPANT\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PARTICIPANT : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW"}, {"id": "{\"name\":\"HAS_SEQUENCE_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:IS"}, {"id": "{\"name\":\"IS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:IS_AGGREGATE_OF"}, {"id": "{\"name\":\"IS_AGGREGATE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_AGGREGATE_OF : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:IS_COMPOSITE_OF"}, {"id": "{\"name\":\"IS_COMPOSITE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_COMPOSITE_OF : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:NULL"}, {"id": "{\"name\":\"NULL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"NULL : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:OF"}, {"id": "{\"name\":\"OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"OF : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:ON"}, {"id": "{\"name\":\"ON\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ON : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphKeyword:SOURCE_CODE"}, {"id": "{\"name\":\"SOURCE_CODE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"SOURCE_CODE : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository"}, {"id": "{\"name\":\"GraphRepository\",\"package\":\"metagpt/utils/graph_repository.py:GraphRepository\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]},\"insert\":{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]},\"rebuild_composition_relationship\":{\"name\":\"rebuild_composition_relationship\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_composition_relationship(graph_db: 'GraphRepository')\",\"aggregations\":[\"GraphRepository\"]},\"save\":{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]},\"select\":{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]},\"update_graph_db_with_class_relationship_views\":{\"name\":\"update_graph_db_with_class_relationship_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"relationship_views\",\"type_\":\"List[DotClassRelationship]\",\"default_\":\"\",\"description\":\"relationship_views: List[DotClassRelationship]\",\"compositions\":[\"DotClassRelationship\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_relationship_views(graph_db: 'GraphRepository', relationship_views: List[DotClassRelationship])\",\"aggregations\":[\"GraphRepository\",\"DotClassRelationship\"]},\"update_graph_db_with_class_views\":{\"name\":\"update_graph_db_with_class_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"class_views\",\"type_\":\"List[DotClassInfo]\",\"default_\":\"\",\"description\":\"class_views: List[DotClassInfo]\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_views(graph_db: 'GraphRepository', class_views: List[DotClassInfo])\",\"aggregations\":[\"GraphRepository\",\"DotClassInfo\"]},\"update_graph_db_with_file_info\":{\"name\":\"update_graph_db_with_file_info\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"file_info\",\"type_\":\"RepoFileInfo\",\"default_\":\"\",\"description\":\"file_info: RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_file_info(graph_db: 'GraphRepository', file_info: RepoFileInfo)\",\"aggregations\":[\"GraphRepository\",\"RepoFileInfo\"]}},\"compositions\":[],\"aggregations\":[\"GraphRepository\",\"SPO\",\"DotClassRelationship\",\"DotClassInfo\",\"RepoFileInfo\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:name"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:insert"}, {"id": "{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:rebuild_composition_relationship"}, {"id": "{\"name\":\"rebuild_composition_relationship\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_composition_relationship(graph_db: 'GraphRepository')\",\"aggregations\":[\"GraphRepository\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:save"}, {"id": "{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:select"}, {"id": "{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_relationship_views"}, {"id": "{\"name\":\"update_graph_db_with_class_relationship_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"relationship_views\",\"type_\":\"List[DotClassRelationship]\",\"default_\":\"\",\"description\":\"relationship_views: List[DotClassRelationship]\",\"compositions\":[\"DotClassRelationship\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_relationship_views(graph_db: 'GraphRepository', relationship_views: List[DotClassRelationship])\",\"aggregations\":[\"GraphRepository\",\"DotClassRelationship\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_views"}, {"id": "{\"name\":\"update_graph_db_with_class_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"class_views\",\"type_\":\"List[DotClassInfo]\",\"default_\":\"\",\"description\":\"class_views: List[DotClassInfo]\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_views(graph_db: 'GraphRepository', class_views: List[DotClassInfo])\",\"aggregations\":[\"GraphRepository\",\"DotClassInfo\"]}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_file_info"}, {"id": "{\"name\":\"update_graph_db_with_file_info\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"file_info\",\"type_\":\"RepoFileInfo\",\"default_\":\"\",\"description\":\"file_info: RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_file_info(graph_db: 'GraphRepository', file_info: RepoFileInfo)\",\"aggregations\":[\"GraphRepository\",\"RepoFileInfo\"]}"}, {"id": "?:DotClassRelationship"}, {"id": "?:DotClassInfo"}, {"id": "?:RepoFileInfo"}, {"id": "metagpt/utils/human_interaction.py"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction"}, {"id": "{\"name\":\"HumanInteraction\",\"package\":\"metagpt/utils/human_interaction.py:HumanInteraction\",\"attributes\":{\"stop_list\":{\"name\":\"stop_list\",\"type_\":\"tuple\",\"default_\":\"\",\"description\":\"stop_list : tuple\",\"compositions\":[\"tuple\"]}},\"methods\":{\"check_input_type\":{\"name\":\"check_input_type\",\"args\":[{\"name\":\"input_str\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_str: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Tuple[bool,Any]\",\"description\":\"Tuple[bool, Any]\",\"compositions\":[]},\"description\":\"check_input_type(input_str: str, req_type: Type): Tuple[bool, Any]\",\"aggregations\":[\"Type\"]},\"input_num_until_valid\":{\"name\":\"input_num_until_valid\",\"args\":[{\"name\":\"num_max\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_max: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"input_num_until_valid(num_max: int): int\",\"aggregations\":[]},\"input_until_valid\":{\"name\":\"input_until_valid\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Any\",\"description\":\"Any\",\"compositions\":[]},\"description\":\"input_until_valid(prompt: str, req_type: Type): Any\",\"aggregations\":[\"Type\"]},\"interact_with_instruct_content\":{\"name\":\"interact_with_instruct_content\",\"args\":[{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content: BaseModel\",\"compositions\":[\"BaseModel\"]},{\"name\":\"mapping\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"mapping: dict\",\"compositions\":[]},{\"name\":\"interact_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"interact_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Any]\",\"description\":\"dict[str, Any]\",\"compositions\":[]},\"description\":\"interact_with_instruct_content(instruct_content: BaseModel, mapping: dict, interact_type: str): dict[str, Any]\",\"aggregations\":[\"BaseModel\"]},\"multilines_input\":{\"name\":\"multilines_input\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"multilines_input(prompt: str): str\",\"aggregations\":[]}},\"compositions\":[\"tuple\"],\"aggregations\":[\"Type\",\"BaseModel\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:stop_list"}, {"id": "{\"name\":\"stop_list\",\"type_\":\"tuple\",\"default_\":\"\",\"description\":\"stop_list : tuple\",\"compositions\":[\"tuple\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:check_input_type"}, {"id": "{\"name\":\"check_input_type\",\"args\":[{\"name\":\"input_str\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_str: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Tuple[bool,Any]\",\"description\":\"Tuple[bool, Any]\",\"compositions\":[]},\"description\":\"check_input_type(input_str: str, req_type: Type): Tuple[bool, Any]\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:input_num_until_valid"}, {"id": "{\"name\":\"input_num_until_valid\",\"args\":[{\"name\":\"num_max\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_max: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"input_num_until_valid(num_max: int): int\",\"aggregations\":[]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:input_until_valid"}, {"id": "{\"name\":\"input_until_valid\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Any\",\"description\":\"Any\",\"compositions\":[]},\"description\":\"input_until_valid(prompt: str, req_type: Type): Any\",\"aggregations\":[\"Type\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:interact_with_instruct_content"}, {"id": "{\"name\":\"interact_with_instruct_content\",\"args\":[{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content: BaseModel\",\"compositions\":[\"BaseModel\"]},{\"name\":\"mapping\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"mapping: dict\",\"compositions\":[]},{\"name\":\"interact_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"interact_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Any]\",\"description\":\"dict[str, Any]\",\"compositions\":[]},\"description\":\"interact_with_instruct_content(instruct_content: BaseModel, mapping: dict, interact_type: str): dict[str, Any]\",\"aggregations\":[\"BaseModel\"]}"}, {"id": "metagpt/utils/human_interaction.py:HumanInteraction:multilines_input"}, {"id": "{\"name\":\"multilines_input\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"multilines_input(prompt: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py"}, {"id": "metagpt/provider/human_provider.py:HumanProvider"}, {"id": "{\"name\":\"HumanProvider\",\"package\":\"metagpt/provider/human_provider.py:HumanProvider\",\"attributes\":{\"system_prompt\":{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"generator\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"generator: bool\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], generator: bool, timeout): str\",\"aggregations\":[]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"ask\":{\"name\":\"ask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(msg: str, timeout): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:system_prompt"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:aask"}, {"id": "{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"generator\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"generator: bool\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], generator: bool, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:acompletion"}, {"id": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:acompletion_text"}, {"id": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:ask"}, {"id": "{\"name\":\"ask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(msg: str, timeout): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS"}, {"id": "{\"name\":\"IFlyTekTTS\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTS\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_secret : str\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"app_id : str\",\"compositions\":[]}},\"methods\":{\"synthesize_speech\":{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output_file: str\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(text, output_file: str, voice)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_key"}, {"id": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_secret"}, {"id": "{\"name\":\"api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_secret : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:app_id"}, {"id": "{\"name\":\"app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"app_id : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:synthesize_speech"}, {"id": "{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output_file: str\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(text, output_file: str, voice)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse"}, {"id": "{\"name\":\"IFlyTekTTSResponse\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code : int\",\"compositions\":[]},\"data\":{\"name\":\"data\",\"type_\":\"Optional[AudioData]\",\"default_\":\"\",\"description\":\"data : Optional[AudioData]\",\"compositions\":[\"AudioData\"]},\"message\":{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]},\"sid\":{\"name\":\"sid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sid : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"AudioData\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:code"}, {"id": "{\"name\":\"code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:data"}, {"id": "{\"name\":\"data\",\"type_\":\"Optional[AudioData]\",\"default_\":\"\",\"description\":\"data : Optional[AudioData]\",\"compositions\":[\"AudioData\"]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:message"}, {"id": "{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:sid"}, {"id": "{\"name\":\"sid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sid : str\",\"compositions\":[]}"}, {"id": "?:AudioData"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus"}, {"id": "{\"name\":\"IFlyTekTTSStatus\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus:name"}, {"id": "metagpt/tools/metagpt_text_to_image.py"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult"}, {"id": "{\"name\":\"ImageResult\",\"package\":\"metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult\",\"attributes\":{\"images\":{\"name\":\"images\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"images : List\",\"compositions\":[]},\"parameters\":{\"name\":\"parameters\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"parameters : Dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:images"}, {"id": "{\"name\":\"images\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"images : List\",\"compositions\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:parameters"}, {"id": "{\"name\":\"parameters\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"parameters : Dict\",\"compositions\":[]}"}, {"id": "metagpt/document.py:IndexableDocument"}, {"id": "{\"name\":\"IndexableDocument\",\"package\":\"metagpt/document.py:IndexableDocument\",\"attributes\":{\"content_col\":{\"name\":\"content_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content_col : Optional[str]\",\"compositions\":[]},\"data\":{\"name\":\"data\",\"type_\":\"Union[pd.DataFrame,list]\",\"default_\":\"\",\"description\":\"data : Union[pd.DataFrame, list]\",\"compositions\":[\"pd.DataFrame\"]},\"meta_col\":{\"name\":\"meta_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"meta_col : Optional[str]\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"data_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"content_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content_col\",\"compositions\":[]},{\"name\":\"meta_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"meta_col\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(data_path: Path, content_col, meta_col)\",\"aggregations\":[\"Path\"]},\"get_docs_and_metadatas\":{\"name\":\"get_docs_and_metadatas\",\"args\":[{\"name\":\")\",\"type_\":\"(list\",\"default_\":\"\",\"description\":\"): (list\",\"compositions\":[]},{\"name\":\"list\",\"type_\":\"\",\"default_\":\"\",\"description\":\"list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_docs_and_metadatas(): (list, list)\",\"aggregations\":[]}},\"compositions\":[\"pd.DataFrame\"],\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/document.py:IndexableDocument:content_col"}, {"id": "{\"name\":\"content_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content_col : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document.py:IndexableDocument:data"}, {"id": "{\"name\":\"data\",\"type_\":\"Union[pd.DataFrame,list]\",\"default_\":\"\",\"description\":\"data : Union[pd.DataFrame, list]\",\"compositions\":[\"pd.DataFrame\"]}"}, {"id": "metagpt/document.py:IndexableDocument:meta_col"}, {"id": "{\"name\":\"meta_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"meta_col : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document.py:IndexableDocument:model_config"}, {"id": "metagpt/document.py:IndexableDocument:from_path"}, {"id": "{\"name\":\"from_path\",\"args\":[{\"name\":\"data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"data_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"content_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content_col\",\"compositions\":[]},{\"name\":\"meta_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"meta_col\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(data_path: Path, content_col, meta_col)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/document.py:IndexableDocument:get_docs_and_metadatas"}, {"id": "{\"name\":\"get_docs_and_metadatas\",\"args\":[{\"name\":\")\",\"type_\":\"(list\",\"default_\":\"\",\"description\":\"): (list\",\"compositions\":[]},{\"name\":\"list\",\"type_\":\"\",\"default_\":\"\",\"description\":\"list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_docs_and_metadatas(): (list, list)\",\"aggregations\":[]}"}, {"id": "?:pd.DataFrame"}, {"id": "metagpt/roles/invoice_ocr_assistant.py"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData"}, {"id": "{\"name\":\"InvoiceData\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoiceData\",\"attributes\":{\"invoice_data\":{\"name\":\"invoice_data\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"invoice_data : list[dict]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData:invoice_data"}, {"id": "{\"name\":\"invoice_data\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"invoice_data : list[dict]\",\"compositions\":[]}"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR"}, {"id": "{\"name\":\"InvoiceOCR\",\"package\":\"metagpt/actions/invoice_ocr.py:InvoiceOCR\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"run(file_path: Path): list\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:i_context"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:name"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"run(file_path: Path): list\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant"}, {"id": "{\"name\":\"InvoiceOCRAssistant\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"orc_data\":{\"name\":\"orc_data\",\"type_\":\"Optional[list]\",\"default_\":\"\",\"description\":\"orc_data : Optional[list]\",\"compositions\":[]},\"origin_query\":{\"name\":\"origin_query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"origin_query : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:constraints"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:filename"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:goal"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:language"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:name"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:orc_data"}, {"id": "{\"name\":\"orc_data\",\"type_\":\"Optional[list]\",\"default_\":\"\",\"description\":\"orc_data : Optional[list]\",\"compositions\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:origin_query"}, {"id": "{\"name\":\"origin_query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"origin_query : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:profile"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath"}, {"id": "{\"name\":\"InvoicePath\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoicePath\",\"attributes\":{\"file_path\":{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path : Path\",\"compositions\":[\"Path\"]}},\"methods\":{},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath:file_path"}, {"id": "{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path : Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/configs/llm_config.py"}, {"id": "metagpt/configs/llm_config.py:LLMConfig"}, {"id": "{\"name\":\"LLMConfig\",\"package\":\"metagpt/configs/llm_config.py:LLMConfig\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_secret : Optional[str]\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]},\"api_version\":{\"name\":\"api_version\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_version : Optional[str]\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"app_id : Optional[str]\",\"compositions\":[]},\"base_url\":{\"name\":\"base_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"base_url : str\",\"compositions\":[]},\"best_of\":{\"name\":\"best_of\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"best_of : Optional[int]\",\"compositions\":[]},\"calc_usage\":{\"name\":\"calc_usage\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"calc_usage : bool\",\"compositions\":[]},\"domain\":{\"name\":\"domain\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"domain : Optional[str]\",\"compositions\":[]},\"frequency_penalty\":{\"name\":\"frequency_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"frequency_penalty : float\",\"compositions\":[]},\"logprobs\":{\"name\":\"logprobs\",\"type_\":\"Optional[bool]\",\"default_\":\"\",\"description\":\"logprobs : Optional[bool]\",\"compositions\":[]},\"max_token\":{\"name\":\"max_token\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_token : int\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]},\"n\":{\"name\":\"n\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"n : Optional[int]\",\"compositions\":[]},\"presence_penalty\":{\"name\":\"presence_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"presence_penalty : float\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]},\"repetition_penalty\":{\"name\":\"repetition_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"repetition_penalty : float\",\"compositions\":[]},\"stop\":{\"name\":\"stop\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"stop : Optional[str]\",\"compositions\":[]},\"stream\":{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream : bool\",\"compositions\":[]},\"temperature\":{\"name\":\"temperature\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"temperature : float\",\"compositions\":[]},\"timeout\":{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout : int\",\"compositions\":[]},\"top_k\":{\"name\":\"top_k\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"top_k : int\",\"compositions\":[]},\"top_logprobs\":{\"name\":\"top_logprobs\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"top_logprobs : Optional[int]\",\"compositions\":[]},\"top_p\":{\"name\":\"top_p\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"top_p : float\",\"compositions\":[]}},\"methods\":{\"check_llm_key\":{\"name\":\"check_llm_key\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_llm_key(v)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:api_key"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:api_secret"}, {"id": "{\"name\":\"api_secret\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_secret : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:api_type"}, {"id": "{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:api_version"}, {"id": "{\"name\":\"api_version\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_version : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:app_id"}, {"id": "{\"name\":\"app_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"app_id : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:base_url"}, {"id": "{\"name\":\"base_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"base_url : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:best_of"}, {"id": "{\"name\":\"best_of\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"best_of : Optional[int]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:calc_usage"}, {"id": "{\"name\":\"calc_usage\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"calc_usage : bool\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:domain"}, {"id": "{\"name\":\"domain\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"domain : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:frequency_penalty"}, {"id": "{\"name\":\"frequency_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"frequency_penalty : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:logprobs"}, {"id": "{\"name\":\"logprobs\",\"type_\":\"Optional[bool]\",\"default_\":\"\",\"description\":\"logprobs : Optional[bool]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:max_token"}, {"id": "{\"name\":\"max_token\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_token : int\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:model"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:n"}, {"id": "{\"name\":\"n\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"n : Optional[int]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:presence_penalty"}, {"id": "{\"name\":\"presence_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"presence_penalty : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:proxy"}, {"id": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:repetition_penalty"}, {"id": "{\"name\":\"repetition_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"repetition_penalty : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:stop"}, {"id": "{\"name\":\"stop\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"stop : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:stream"}, {"id": "{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream : bool\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:temperature"}, {"id": "{\"name\":\"temperature\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"temperature : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:timeout"}, {"id": "{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout : int\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:top_k"}, {"id": "{\"name\":\"top_k\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"top_k : int\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:top_logprobs"}, {"id": "{\"name\":\"top_logprobs\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"top_logprobs : Optional[int]\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:top_p"}, {"id": "{\"name\":\"top_p\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"top_p : float\",\"compositions\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMConfig:check_llm_key"}, {"id": "{\"name\":\"check_llm_key\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_llm_key(v)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/llm_provider_registry.py"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry"}, {"id": "{\"name\":\"LLMProviderRegistry\",\"package\":\"metagpt/provider/llm_provider_registry.py:LLMProviderRegistry\",\"attributes\":{\"providers\":{\"name\":\"providers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"providers : dict\",\"compositions\":[]}},\"methods\":{\"get_provider\":{\"name\":\"get_provider\",\"args\":[{\"name\":\"enum\",\"type_\":\"LLMType\",\"default_\":\"\",\"description\":\"enum: LLMType\",\"compositions\":[\"LLMType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_provider(enum: LLMType)\",\"aggregations\":[\"LLMType\"]},\"register\":{\"name\":\"register\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"provider_cls\",\"type_\":\"\",\"default_\":\"\",\"description\":\"provider_cls\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register(key, provider_cls)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"LLMType\"]}"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:providers"}, {"id": "{\"name\":\"providers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"providers : dict\",\"compositions\":[]}"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:get_provider"}, {"id": "{\"name\":\"get_provider\",\"args\":[{\"name\":\"enum\",\"type_\":\"LLMType\",\"default_\":\"\",\"description\":\"enum: LLMType\",\"compositions\":[\"LLMType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_provider(enum: LLMType)\",\"aggregations\":[\"LLMType\"]}"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:register"}, {"id": "{\"name\":\"register\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"provider_cls\",\"type_\":\"\",\"default_\":\"\",\"description\":\"provider_cls\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register(key, provider_cls)\",\"aggregations\":[]}"}, {"id": "?:LLMType"}, {"id": "metagpt/configs/llm_config.py:LLMType"}, {"id": "{\"name\":\"LLMType\",\"package\":\"metagpt/configs/llm_config.py:LLMType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/llm_config.py:LLMType:name"}, {"id": "metagpt/document_store/lancedb_store.py"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore"}, {"id": "{\"name\":\"LanceStore\",\"package\":\"metagpt/document_store/lancedb_store.py:LanceStore\",\"attributes\":{\"db\":{\"name\":\"db\",\"type_\":\"LanceDBConnection,RemoteDBConnection\",\"default_\":\"\",\"description\":\"db : LanceDBConnection, RemoteDBConnection\",\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\"]},\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"table\":{\"name\":\"table\",\"type_\":\"LanceTable,NoneType,RemoteTable\",\"default_\":\"\",\"description\":\"table : LanceTable, NoneType, RemoteTable\",\"compositions\":[\"LanceTable\",\"RemoteTable\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(data, metadata, _id)\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]},\"drop\":{\"name\":\"drop\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"drop(name)\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metric\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metric\",\"compositions\":[]},{\"name\":\"nprobes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"nprobes\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metric, nprobes)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(data, metadatas, ids)\",\"aggregations\":[]}},\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\",\"LanceTable\",\"RemoteTable\"],\"aggregations\":[]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:db"}, {"id": "{\"name\":\"db\",\"type_\":\"LanceDBConnection,RemoteDBConnection\",\"default_\":\"\",\"description\":\"db : LanceDBConnection, RemoteDBConnection\",\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\"]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:name"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:table"}, {"id": "{\"name\":\"table\",\"type_\":\"LanceTable,NoneType,RemoteTable\",\"default_\":\"\",\"description\":\"table : LanceTable, NoneType, RemoteTable\",\"compositions\":[\"LanceTable\",\"RemoteTable\"]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(data, metadata, _id)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:delete"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:drop"}, {"id": "{\"name\":\"drop\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"drop(name)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:persist"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metric\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metric\",\"compositions\":[]},{\"name\":\"nprobes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"nprobes\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metric, nprobes)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:write"}, {"id": "{\"name\":\"write\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(data, metadatas, ids)\",\"aggregations\":[]}"}, {"id": "?:LanceDBConnection"}, {"id": "?:RemoteDBConnection"}, {"id": "?:LanceTable"}, {"id": "?:RemoteTable"}, {"id": "metagpt/document_store/base_store.py:LocalStore"}, {"id": "{\"name\":\"LocalStore\",\"package\":\"metagpt/document_store/base_store.py:LocalStore\",\"attributes\":{\"cache_dir\":{\"name\":\"cache_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"cache_dir : Optional[Path]\",\"compositions\":[\"Path\"]},\"fname\":{\"name\":\"fname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"fname\",\"compositions\":[]},\"raw_data_path\":{\"name\":\"raw_data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"raw_data_path : Path\",\"compositions\":[\"Path\"]},\"store\":{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:cache_dir"}, {"id": "{\"name\":\"cache_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"cache_dir : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:fname"}, {"id": "{\"name\":\"fname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"fname\",\"compositions\":[]}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:raw_data_path"}, {"id": "{\"name\":\"raw_data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"raw_data_path : Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:store"}, {"id": "metagpt/memory/longterm_memory.py"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory"}, {"id": "{\"name\":\"LongTermMemory\",\"package\":\"metagpt/memory/longterm_memory.py:LongTermMemory\",\"attributes\":{\"memory_storage\":{\"name\":\"memory_storage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory_storage\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"msg_from_recover\":{\"name\":\"msg_from_recover\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"msg_from_recover : bool\",\"compositions\":[]},\"rc\":{\"name\":\"rc\",\"type_\":\"Optional[RoleContext]\",\"default_\":\"\",\"description\":\"rc : Optional[RoleContext]\",\"compositions\":[\"RoleContext\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]},\"clear\":{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]},\"find_news\":{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]},\"recover_memory\":{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]},{\"name\":\"rc\",\"type_\":\"RoleContext\",\"default_\":\"\",\"description\":\"rc: RoleContext\",\"compositions\":[\"RoleContext\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"recover_memory(role_id: str, rc: RoleContext)\",\"aggregations\":[\"RoleContext\"]}},\"compositions\":[\"RoleContext\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage"}, {"id": "{\"name\":\"memory_storage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory_storage\",\"compositions\":[]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:model_config"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:msg_from_recover"}, {"id": "{\"name\":\"msg_from_recover\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"msg_from_recover : bool\",\"compositions\":[]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:rc"}, {"id": "{\"name\":\"rc\",\"type_\":\"Optional[RoleContext]\",\"default_\":\"\",\"description\":\"rc : Optional[RoleContext]\",\"compositions\":[\"RoleContext\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:clear"}, {"id": "{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:delete"}, {"id": "{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:find_news"}, {"id": "{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/longterm_memory.py:LongTermMemory:recover_memory"}, {"id": "{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]},{\"name\":\"rc\",\"type_\":\"RoleContext\",\"default_\":\"\",\"description\":\"rc: RoleContext\",\"compositions\":[\"RoleContext\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"recover_memory(role_id: str, rc: RoleContext)\",\"aggregations\":[\"RoleContext\"]}"}, {"id": "?:RoleContext"}, {"id": "metagpt/strategy/tot.py:MCTSSolver"}, {"id": "{\"name\":\"MCTSSolver\",\"package\":\"metagpt/strategy/tot.py:MCTSSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:MCTSSolver:solve"}, {"id": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine"}, {"id": "{\"name\":\"MeilisearchEngine\",\"package\":\"metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"Client\",\"default_\":\"\",\"description\":\"client : Client\",\"compositions\":[\"Client\"]}},\"methods\":{\"add_documents\":{\"name\":\"add_documents\",\"args\":[{\"name\":\"data_source\",\"type_\":\"DataSource\",\"default_\":\"\",\"description\":\"data_source: DataSource\",\"compositions\":[\"DataSource\"]},{\"name\":\"documents\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"documents: List[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_documents(data_source: DataSource, documents: List[dict])\",\"aggregations\":[\"DataSource\"]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query)\",\"aggregations\":[]},\"set_index\":{\"name\":\"set_index\",\"args\":[{\"name\":\"index\",\"type_\":\"\",\"default_\":\"\",\"description\":\"index\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_index(index)\",\"aggregations\":[]}},\"compositions\":[\"Client\"],\"aggregations\":[\"DataSource\"]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:client"}, {"id": "{\"name\":\"client\",\"type_\":\"Client\",\"default_\":\"\",\"description\":\"client : Client\",\"compositions\":[\"Client\"]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:add_documents"}, {"id": "{\"name\":\"add_documents\",\"args\":[{\"name\":\"data_source\",\"type_\":\"DataSource\",\"default_\":\"\",\"description\":\"data_source: DataSource\",\"compositions\":[\"DataSource\"]},{\"name\":\"documents\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"documents: List[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_documents(data_source: DataSource, documents: List[dict])\",\"aggregations\":[\"DataSource\"]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:set_index"}, {"id": "{\"name\":\"set_index\",\"args\":[{\"name\":\"index\",\"type_\":\"\",\"default_\":\"\",\"description\":\"index\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_index(index)\",\"aggregations\":[]}"}, {"id": "?:Client"}, {"id": "?:DataSource"}, {"id": "metagpt/memory/memory.py"}, {"id": "metagpt/memory/memory.py:Memory"}, {"id": "{\"name\":\"Memory\",\"package\":\"metagpt/memory/memory.py:Memory\",\"attributes\":{\"ignore_id\":{\"name\":\"ignore_id\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"ignore_id : bool\",\"compositions\":[]},\"index\":{\"name\":\"index\",\"type_\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_\":\"\",\"description\":\"index : DefaultDict[str, list[SerializeAsAny[Message]]]\",\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"]},\"storage\":{\"name\":\"storage\",\"type_\":\"list[SerializeAsAny[Message]]\",\"default_\":\"\",\"description\":\"storage : list[SerializeAsAny[Message]]\",\"compositions\":[\"Message\",\"SerializeAsAny\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]},\"add_batch\":{\"name\":\"add_batch\",\"args\":[{\"name\":\"messages\",\"type_\":\"Iterable[Message]\",\"default_\":\"\",\"description\":\"messages: Iterable[Message]\",\"compositions\":[\"Iterable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_batch(messages: Iterable[Message])\",\"aggregations\":[\"Message\",\"Iterable\"]},\"clear\":{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]},\"count\":{\"name\":\"count\",\"args\":[],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"count(): int\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]},\"delete_newest\":{\"name\":\"delete_newest\",\"args\":[],\"return_args\":{\"type_\":\"'Message'\",\"description\":\"'Message'\",\"compositions\":[\"Message\"]},\"description\":\"delete_newest(): 'Message'\",\"aggregations\":[\"Message\"]},\"find_news\":{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get(k): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_action\":{\"name\":\"get_by_action\",\"args\":[{\"name\":\"action\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_action(action): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_actions\":{\"name\":\"get_by_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"Set\",\"default_\":\"\",\"description\":\"actions: Set\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_actions(actions: Set): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_content\":{\"name\":\"get_by_content\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_content(content: str): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_role\":{\"name\":\"get_by_role\",\"args\":[{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_role(role: str): list[Message]\",\"aggregations\":[\"Message\"]},\"try_remember\":{\"name\":\"try_remember\",\"args\":[{\"name\":\"keyword\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"keyword: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"try_remember(keyword: str): list[Message]\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"],\"aggregations\":[\"Iterable\"]}"}, {"id": "metagpt/memory/memory.py:Memory:ignore_id"}, {"id": "{\"name\":\"ignore_id\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"ignore_id : bool\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory.py:Memory:index"}, {"id": "{\"name\":\"index\",\"type_\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_\":\"\",\"description\":\"index : DefaultDict[str, list[SerializeAsAny[Message]]]\",\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"]}"}, {"id": "metagpt/memory/memory.py:Memory:storage"}, {"id": "{\"name\":\"storage\",\"type_\":\"list[SerializeAsAny[Message]]\",\"default_\":\"\",\"description\":\"storage : list[SerializeAsAny[Message]]\",\"compositions\":[\"Message\",\"SerializeAsAny\"]}"}, {"id": "metagpt/memory/memory.py:Memory:add"}, {"id": "metagpt/memory/memory.py:Memory:add_batch"}, {"id": "{\"name\":\"add_batch\",\"args\":[{\"name\":\"messages\",\"type_\":\"Iterable[Message]\",\"default_\":\"\",\"description\":\"messages: Iterable[Message]\",\"compositions\":[\"Iterable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_batch(messages: Iterable[Message])\",\"aggregations\":[\"Message\",\"Iterable\"]}"}, {"id": "metagpt/memory/memory.py:Memory:clear"}, {"id": "metagpt/memory/memory.py:Memory:count"}, {"id": "{\"name\":\"count\",\"args\":[],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"count(): int\",\"aggregations\":[]}"}, {"id": "metagpt/memory/memory.py:Memory:delete"}, {"id": "metagpt/memory/memory.py:Memory:delete_newest"}, {"id": "{\"name\":\"delete_newest\",\"args\":[],\"return_args\":{\"type_\":\"'Message'\",\"description\":\"'Message'\",\"compositions\":[\"Message\"]},\"description\":\"delete_newest(): 'Message'\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:find_news"}, {"id": "metagpt/memory/memory.py:Memory:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get(k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:get_by_action"}, {"id": "{\"name\":\"get_by_action\",\"args\":[{\"name\":\"action\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_action(action): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:get_by_actions"}, {"id": "{\"name\":\"get_by_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"Set\",\"default_\":\"\",\"description\":\"actions: Set\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_actions(actions: Set): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:get_by_content"}, {"id": "{\"name\":\"get_by_content\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_content(content: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:get_by_role"}, {"id": "{\"name\":\"get_by_role\",\"args\":[{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_role(role: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory.py:Memory:try_remember"}, {"id": "{\"name\":\"try_remember\",\"args\":[{\"name\":\"keyword\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"keyword: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"try_remember(keyword: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "?:DefaultDict"}, {"id": "metagpt/memory/memory_storage.py"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage"}, {"id": "{\"name\":\"MemoryStorage\",\"package\":\"metagpt/memory/memory_storage.py:MemoryStorage\",\"attributes\":{\"embedding\":{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]},\"is_initialized\":{\"name\":\"is_initialized\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_initialized\",\"compositions\":[]},\"mem_ttl\":{\"name\":\"mem_ttl\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mem_ttl : int\",\"compositions\":[]},\"role_id\":{\"name\":\"role_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"role_id : Optional[str]\",\"compositions\":[]},\"role_mem_path\":{\"name\":\"role_mem_path\",\"type_\":\"Optional[str],Path\",\"default_\":\"\",\"description\":\"role_mem_path : Optional[str], Path\",\"compositions\":[\"Path\"]},\"store\":{\"name\":\"store\",\"type_\":\"NoneType,Optional[FAISS]\",\"default_\":\"\",\"description\":\"store : NoneType, Optional[FAISS]\",\"compositions\":[\"FAISS\"]},\"threshold\":{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"add(message: Message): bool\",\"aggregations\":[\"Message\"]},\"clean\":{\"name\":\"clean\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clean()\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"recover_memory\":{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"recover_memory(role_id: str): list[Message]\",\"aggregations\":[\"Message\"]},\"search_dissimilar\":{\"name\":\"search_dissimilar\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"search_dissimilar(message: Message, k): list[Message]\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"OpenAIEmbeddings\",\"Path\",\"FAISS\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:embedding"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized"}, {"id": "{\"name\":\"is_initialized\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_initialized\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:mem_ttl"}, {"id": "{\"name\":\"mem_ttl\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mem_ttl : int\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:role_id"}, {"id": "{\"name\":\"role_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"role_id : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:role_mem_path"}, {"id": "{\"name\":\"role_mem_path\",\"type_\":\"Optional[str],Path\",\"default_\":\"\",\"description\":\"role_mem_path : Optional[str], Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:store"}, {"id": "{\"name\":\"store\",\"type_\":\"NoneType,Optional[FAISS]\",\"default_\":\"\",\"description\":\"store : NoneType, Optional[FAISS]\",\"compositions\":[\"FAISS\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:threshold"}, {"id": "{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"add(message: Message): bool\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:clean"}, {"id": "{\"name\":\"clean\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clean()\",\"aggregations\":[]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:persist"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:recover_memory"}, {"id": "{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"recover_memory(role_id: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:search_dissimilar"}, {"id": "{\"name\":\"search_dissimilar\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"search_dissimilar(message: Message, k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "?:FAISS"}, {"id": "metagpt/configs/mermaid_config.py"}, {"id": "metagpt/configs/mermaid_config.py:MermaidConfig"}, {"id": "{\"name\":\"MermaidConfig\",\"package\":\"metagpt/configs/mermaid_config.py:MermaidConfig\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_\":\"\",\"description\":\"engine : Literal['nodejs', 'ink', 'playwright', 'pyppeteer']\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]},\"puppeteer_config\":{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/mermaid_config.py:MermaidConfig:engine"}, {"id": "{\"name\":\"engine\",\"type_\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_\":\"\",\"description\":\"engine : Literal['nodejs', 'ink', 'playwright', 'pyppeteer']\",\"compositions\":[]}"}, {"id": "metagpt/configs/mermaid_config.py:MermaidConfig:path"}, {"id": "metagpt/configs/mermaid_config.py:MermaidConfig:puppeteer_config"}, {"id": "metagpt/schema.py:Message"}, {"id": "{\"name\":\"Message\",\"package\":\"metagpt/schema.py:Message\",\"attributes\":{\"cause_by\":{\"name\":\"cause_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cause_by : str\",\"compositions\":[]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"id\":{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id : str\",\"compositions\":[]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"Optional[BaseModel]\",\"default_\":\"\",\"description\":\"instruct_content : Optional[BaseModel]\",\"compositions\":[\"BaseModel\"]},\"role\":{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]},\"send_to\":{\"name\":\"send_to\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"send_to : set[str]\",\"compositions\":[]},\"sent_from\":{\"name\":\"sent_from\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sent_from : str\",\"compositions\":[]}},\"methods\":{\"check_cause_by\":{\"name\":\"check_cause_by\",\"args\":[{\"name\":\"cause_by\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"cause_by: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_cause_by(cause_by: Any): str\",\"aggregations\":[]},\"check_id\":{\"name\":\"check_id\",\"args\":[{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_id(id: str): str\",\"aggregations\":[]},\"check_instruct_content\":{\"name\":\"check_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"ic: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"BaseModel\",\"description\":\"BaseModel\",\"compositions\":[\"BaseModel\"]},\"description\":\"check_instruct_content(ic: Any): BaseModel\",\"aggregations\":[\"BaseModel\"]},\"check_send_to\":{\"name\":\"check_send_to\",\"args\":[{\"name\":\"send_to\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"send_to: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"set\",\"description\":\"set\",\"compositions\":[]},\"description\":\"check_send_to(send_to: Any): set\",\"aggregations\":[]},\"check_sent_from\":{\"name\":\"check_sent_from\",\"args\":[{\"name\":\"sent_from\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"sent_from: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_sent_from(sent_from: Any): str\",\"aggregations\":[]},\"dump\":{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"val\",\"type_\":\"\",\"default_\":\"\",\"description\":\"val\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(val)\",\"aggregations\":[]},\"ser_instruct_content\":{\"name\":\"ser_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"ic: BaseModel\",\"compositions\":[\"BaseModel\"]}],\"return_args\":{\"type_\":\"Union[dict,None]\",\"description\":\"Union[dict, None]\",\"compositions\":[]},\"description\":\"ser_instruct_content(ic: BaseModel): Union[dict, None]\",\"aggregations\":[\"BaseModel\"]},\"to_dict\":{\"name\":\"to_dict\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"to_dict(): dict\",\"aggregations\":[]}},\"compositions\":[\"BaseModel\"],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:cause_by"}, {"id": "{\"name\":\"cause_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cause_by : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:content"}, {"id": "metagpt/schema.py:Message:id"}, {"id": "{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:instruct_content"}, {"id": "{\"name\":\"instruct_content\",\"type_\":\"Optional[BaseModel]\",\"default_\":\"\",\"description\":\"instruct_content : Optional[BaseModel]\",\"compositions\":[\"BaseModel\"]}"}, {"id": "metagpt/schema.py:Message:role"}, {"id": "{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:send_to"}, {"id": "{\"name\":\"send_to\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"send_to : set[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:sent_from"}, {"id": "{\"name\":\"sent_from\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sent_from : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:Message:check_cause_by"}, {"id": "{\"name\":\"check_cause_by\",\"args\":[{\"name\":\"cause_by\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"cause_by: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_cause_by(cause_by: Any): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:check_id"}, {"id": "{\"name\":\"check_id\",\"args\":[{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_id(id: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:check_instruct_content"}, {"id": "{\"name\":\"check_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"ic: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"BaseModel\",\"description\":\"BaseModel\",\"compositions\":[\"BaseModel\"]},\"description\":\"check_instruct_content(ic: Any): BaseModel\",\"aggregations\":[\"BaseModel\"]}"}, {"id": "metagpt/schema.py:Message:check_send_to"}, {"id": "{\"name\":\"check_send_to\",\"args\":[{\"name\":\"send_to\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"send_to: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"set\",\"description\":\"set\",\"compositions\":[]},\"description\":\"check_send_to(send_to: Any): set\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:check_sent_from"}, {"id": "{\"name\":\"check_sent_from\",\"args\":[{\"name\":\"sent_from\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"sent_from: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_sent_from(sent_from: Any): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:dump"}, {"id": "{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:load"}, {"id": "{\"name\":\"load\",\"args\":[{\"name\":\"val\",\"type_\":\"\",\"default_\":\"\",\"description\":\"val\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(val)\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:Message:ser_instruct_content"}, {"id": "{\"name\":\"ser_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"ic: BaseModel\",\"compositions\":[\"BaseModel\"]}],\"return_args\":{\"type_\":\"Union[dict,None]\",\"description\":\"Union[dict, None]\",\"compositions\":[]},\"description\":\"ser_instruct_content(ic: BaseModel): Union[dict, None]\",\"aggregations\":[\"BaseModel\"]}"}, {"id": "metagpt/schema.py:Message:to_dict"}, {"id": "{\"name\":\"to_dict\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"to_dict(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:MessageQueue"}, {"id": "{\"name\":\"MessageQueue\",\"package\":\"metagpt/schema.py:MessageQueue\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"dump\":{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]},\"empty\":{\"name\":\"empty\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"empty()\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'MessageQueue'\",\"description\":\"'MessageQueue'\",\"compositions\":[\"MessageQueue\"]},\"description\":\"load(data): 'MessageQueue'\",\"aggregations\":[\"MessageQueue\"]},\"pop\":{\"name\":\"pop\",\"args\":[],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"pop(): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]},\"pop_all\":{\"name\":\"pop_all\",\"args\":[],\"return_args\":{\"type_\":\"List[Message]\",\"description\":\"List[Message]\",\"compositions\":[\"Message\"]},\"description\":\"pop_all(): List[Message]\",\"aggregations\":[\"Message\"]},\"push\":{\"name\":\"push\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"push(msg: Message)\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"MessageQueue\",\"Message\\\\\",\"Message\"]}"}, {"id": "metagpt/schema.py:MessageQueue:model_config"}, {"id": "metagpt/schema.py:MessageQueue:dump"}, {"id": "metagpt/schema.py:MessageQueue:empty"}, {"id": "{\"name\":\"empty\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"empty()\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:MessageQueue:load"}, {"id": "{\"name\":\"load\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'MessageQueue'\",\"description\":\"'MessageQueue'\",\"compositions\":[\"MessageQueue\"]},\"description\":\"load(data): 'MessageQueue'\",\"aggregations\":[\"MessageQueue\"]}"}, {"id": "metagpt/schema.py:MessageQueue:pop"}, {"id": "{\"name\":\"pop\",\"args\":[],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"pop(): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]}"}, {"id": "metagpt/schema.py:MessageQueue:pop_all"}, {"id": "{\"name\":\"pop_all\",\"args\":[],\"return_args\":{\"type_\":\"List[Message]\",\"description\":\"List[Message]\",\"compositions\":[\"Message\"]},\"description\":\"pop_all(): List[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/schema.py:MessageQueue:push"}, {"id": "{\"name\":\"push\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"push(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"id": "?:MessageQueue"}, {"id": "?:Message\\"}, {"id": "metagpt/roles/assistant.py:MessageType"}, {"id": "{\"name\":\"MessageType\",\"package\":\"metagpt/roles/assistant.py:MessageType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/assistant.py:MessageType:name"}, {"id": "metagpt/provider/metagpt_api.py"}, {"id": "metagpt/provider/metagpt_api.py:MetaGPTLLM"}, {"id": "{\"name\":\"MetaGPTLLM\",\"package\":\"metagpt/provider/metagpt_api.py:MetaGPTLLM\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image"}, {"id": "{\"name\":\"MetaGPTText2Image\",\"package\":\"metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image\",\"attributes\":{\"model_url\":{\"name\":\"model_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_url\",\"compositions\":[]}},\"methods\":{\"text_2_image\":{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:model_url"}, {"id": "{\"name\":\"model_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_url\",\"compositions\":[]}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image"}, {"id": "{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot_schema.py"}, {"id": "metagpt/strategy/tot_schema.py:MethodSelect"}, {"id": "{\"name\":\"MethodSelect\",\"package\":\"metagpt/strategy/tot_schema.py:MethodSelect\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:MethodSelect:name"}, {"id": "metagpt/tools/moderation.py"}, {"id": "metagpt/tools/moderation.py:Moderation"}, {"id": "{\"name\":\"Moderation\",\"package\":\"metagpt/tools/moderation.py:Moderation\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"amoderation\":{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]},\"amoderation_with_categories\":{\"name\":\"amoderation_with_categories\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation_with_categories(content: Union[str, list[str]])\",\"aggregations\":[]},\"handle_moderation_results\":{\"name\":\"handle_moderation_results\",\"args\":[{\"name\":\"results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"results\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"handle_moderation_results(results)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/moderation.py:Moderation:llm"}, {"id": "metagpt/tools/moderation.py:Moderation:amoderation"}, {"id": "{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"id": "metagpt/tools/moderation.py:Moderation:amoderation_with_categories"}, {"id": "{\"name\":\"amoderation_with_categories\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation_with_categories(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"id": "metagpt/tools/moderation.py:Moderation:handle_moderation_results"}, {"id": "{\"name\":\"handle_moderation_results\",\"args\":[{\"name\":\"results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"results\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"handle_moderation_results(results)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:NoMoneyException"}, {"id": "{\"name\":\"NoMoneyException\",\"package\":\"metagpt/utils/common.py:NoMoneyException\",\"attributes\":{\"amount\":{\"name\":\"amount\",\"type_\":\"\",\"default_\":\"\",\"description\":\"amount\",\"compositions\":[]},\"message\":{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:NoMoneyException:amount"}, {"id": "{\"name\":\"amount\",\"type_\":\"\",\"default_\":\"\",\"description\":\"amount\",\"compositions\":[]}"}, {"id": "metagpt/utils/common.py:NoMoneyException:message"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:OCRResults"}, {"id": "{\"name\":\"OCRResults\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:OCRResults\",\"attributes\":{\"ocr_result\":{\"name\":\"ocr_result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ocr_result : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:OCRResults:ocr_result"}, {"id": "{\"name\":\"ocr_result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ocr_result : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/ollama_api.py"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"id": "{\"name\":\"OllamaLLM\",\"package\":\"metagpt/provider/ollama_api.py:OllamaLLM\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"http_method\":{\"name\":\"http_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"http_method : str\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]},\"suffix_url\":{\"name\":\"suffix_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"suffix_url : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: dict): str\",\"aggregations\":[]},\"get_usage\":{\"name\":\"get_usage\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(resp: dict): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:client"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:config"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:http_method"}, {"id": "{\"name\":\"http_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"http_method : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:model"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:suffix_url"}, {"id": "{\"name\":\"suffix_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"suffix_url : str\",\"compositions\":[]}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:use_system_prompt"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion_text"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:get_choice_text"}, {"id": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: dict): str\",\"aggregations\":[]}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:get_usage"}, {"id": "{\"name\":\"get_usage\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(resp: dict): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/openai_api.py"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM"}, {"id": "{\"name\":\"OpenAILLM\",\"package\":\"metagpt/provider/openai_api.py:OpenAILLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"AsyncOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncOpenAI\",\"compositions\":[\"AsyncOpenAI\"]},\"auto_max_tokens\":{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}},\"methods\":{\"aask_code\":{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]]): dict\",\"aggregations\":[\"Message\"]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ChatCompletion\",\"description\":\"ChatCompletion\",\"compositions\":[\"ChatCompletion\"]},\"description\":\"acompletion(messages: list[dict], timeout): ChatCompletion\",\"aggregations\":[\"ChatCompletion\"]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"amoderation\":{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]},\"aspeech_to_text\":{\"name\":\"aspeech_to_text\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"aspeech_to_text()\",\"aggregations\":[]},\"atext_to_speech\":{\"name\":\"atext_to_speech\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"atext_to_speech()\",\"aggregations\":[]},\"get_choice_function_arguments\":{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: ChatCompletion): dict\",\"aggregations\":[\"ChatCompletion\"]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: ChatCompletion): str\",\"aggregations\":[\"ChatCompletion\"]},\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[\"AsyncOpenAI\",\"CostManager\"],\"aggregations\":[\"Message\",\"ChatCompletion\",\"Costs\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:aclient"}, {"id": "{\"name\":\"aclient\",\"type_\":\"AsyncOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncOpenAI\",\"compositions\":[\"AsyncOpenAI\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:auto_max_tokens"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:config"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:cost_manager"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:model"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:aask_code"}, {"id": "{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]]): dict\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:acompletion"}, {"id": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ChatCompletion\",\"description\":\"ChatCompletion\",\"compositions\":[\"ChatCompletion\"]},\"description\":\"acompletion(messages: list[dict], timeout): ChatCompletion\",\"aggregations\":[\"ChatCompletion\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:acompletion_text"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:amoderation"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:aspeech_to_text"}, {"id": "{\"name\":\"aspeech_to_text\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"aspeech_to_text()\",\"aggregations\":[]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:atext_to_speech"}, {"id": "{\"name\":\"atext_to_speech\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"atext_to_speech()\",\"aggregations\":[]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_function_arguments"}, {"id": "{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: ChatCompletion): dict\",\"aggregations\":[\"ChatCompletion\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_text"}, {"id": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: ChatCompletion): str\",\"aggregations\":[\"ChatCompletion\"]}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:get_costs"}, {"id": "?:ChatCompletion"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse"}, {"id": "{\"name\":\"OpenAIResponse\",\"package\":\"metagpt/provider/general_api_base.py:OpenAIResponse\",\"attributes\":{\"data\":{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},\"operation_location\":{\"name\":\"operation_location\",\"type_\":\"\",\"default_\":\"\",\"description\":\"operation_location\",\"compositions\":[]},\"organization\":{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization\",\"compositions\":[]},\"request_id\":{\"name\":\"request_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"request_id\",\"compositions\":[]},\"response_ms\":{\"name\":\"response_ms\",\"type_\":\"\",\"default_\":\"\",\"description\":\"response_ms\",\"compositions\":[]},\"retry_after\":{\"name\":\"retry_after\",\"type_\":\"\",\"default_\":\"\",\"description\":\"retry_after\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:data"}, {"id": "{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location"}, {"id": "{\"name\":\"operation_location\",\"type_\":\"\",\"default_\":\"\",\"description\":\"operation_location\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:organization"}, {"id": "{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id"}, {"id": "{\"name\":\"request_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"request_id\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms"}, {"id": "{\"name\":\"response_ms\",\"type_\":\"\",\"default_\":\"\",\"description\":\"response_ms\",\"compositions\":[]}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after"}, {"id": "{\"name\":\"retry_after\",\"type_\":\"\",\"default_\":\"\",\"description\":\"retry_after\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding"}, {"id": "{\"name\":\"OpenAIText2Embedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}},\"methods\":{\"text_2_embedding\":{\"name\":\"text_2_embedding\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_embedding(text, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:api_key"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:proxy"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:text_2_embedding"}, {"id": "{\"name\":\"text_2_embedding\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_embedding(text, model)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_image.py"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image"}, {"id": "{\"name\":\"OpenAIText2Image\",\"package\":\"metagpt/tools/openai_text_to_image.py:OpenAIText2Image\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"get_image_data\":{\"name\":\"get_image_data\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_image_data(url)\",\"aggregations\":[]},\"text_2_image\":{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:get_image_data"}, {"id": "{\"name\":\"get_image_data\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_image_data(url)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:text_2_image"}, {"id": "metagpt/provider/open_llm_api.py"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM"}, {"id": "{\"name\":\"OpenLLM\",\"package\":\"metagpt/provider/open_llm_api.py:OpenLLM\",\"attributes\":{},\"methods\":{\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:get_costs"}, {"id": "metagpt/utils/common.py:OutputParser"}, {"id": "{\"name\":\"OutputParser\",\"package\":\"metagpt/utils/common.py:OutputParser\",\"attributes\":{},\"methods\":{\"extract_content\":{\"name\":\"extract_content\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_content(text, tag)\",\"aggregations\":[]},\"extract_struct\":{\"name\":\"extract_struct\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"data_type\",\"type_\":\"Union[type(list),type(dict)]\",\"default_\":\"\",\"description\":\"data_type: Union[type(list), type(dict)]\",\"compositions\":[\"type\"]}],\"return_args\":{\"type_\":\"Union[list,dict]\",\"description\":\"Union[list, dict]\",\"compositions\":[]},\"description\":\"extract_struct(text: str, data_type: Union[type(list), type(dict)]): Union[list, dict]\",\"aggregations\":[\"type\"]},\"parse_blocks\":{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]},\"parse_code\":{\"name\":\"parse_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(text: str, lang: str): str\",\"aggregations\":[]},\"parse_data\":{\"name\":\"parse_data\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data(data)\",\"aggregations\":[]},\"parse_data_with_mapping\":{\"name\":\"parse_data_with_mapping\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mapping\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data_with_mapping(data, mapping)\",\"aggregations\":[]},\"parse_file_list\":{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(text: str): list[str]\",\"aggregations\":[]},\"parse_python_code\":{\"name\":\"parse_python_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_python_code(text: str): str\",\"aggregations\":[]},\"parse_str\":{\"name\":\"parse_str\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(text: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"type\"]}"}, {"id": "metagpt/utils/common.py:OutputParser:extract_content"}, {"id": "{\"name\":\"extract_content\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_content(text, tag)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:extract_struct"}, {"id": "{\"name\":\"extract_struct\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"data_type\",\"type_\":\"Union[type(list),type(dict)]\",\"default_\":\"\",\"description\":\"data_type: Union[type(list), type(dict)]\",\"compositions\":[\"type\"]}],\"return_args\":{\"type_\":\"Union[list,dict]\",\"description\":\"Union[list, dict]\",\"compositions\":[]},\"description\":\"extract_struct(text: str, data_type: Union[type(list), type(dict)]): Union[list, dict]\",\"aggregations\":[\"type\"]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_blocks"}, {"id": "metagpt/utils/common.py:OutputParser:parse_code"}, {"id": "{\"name\":\"parse_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(text: str, lang: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_data"}, {"id": "{\"name\":\"parse_data\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data(data)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_data_with_mapping"}, {"id": "{\"name\":\"parse_data_with_mapping\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mapping\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data_with_mapping(data, mapping)\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_file_list"}, {"id": "{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(text: str): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_python_code"}, {"id": "{\"name\":\"parse_python_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_python_code(text: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/common.py:OutputParser:parse_str"}, {"id": "{\"name\":\"parse_str\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(text: str)\",\"aggregations\":[]}"}, {"id": "?:type"}, {"id": "metagpt/learn/skill_loader.py:Parameter"}, {"id": "{\"name\":\"Parameter\",\"package\":\"metagpt/learn/skill_loader.py:Parameter\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]},\"type\":{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Parameter:description"}, {"id": "{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Parameter:type"}, {"id": "{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper"}, {"id": "{\"name\":\"PlaywrightWrapper\",\"package\":\"metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit']\\\\|None\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit'] \\\\| None\",\"compositions\":[\"Literal\\\\\"]},\"launch_kwargs\":{\"name\":\"launch_kwargs\",\"type_\":\"dict\\\\|None\",\"default_\":\"\",\"description\":\"launch_kwargs : dict \\\\| None\",\"compositions\":[\"dict\\\\\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}},\"compositions\":[\"Literal\\\\\",\"dict\\\\\"],\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:browser_type"}, {"id": "{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit']\\\\|None\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit'] \\\\| None\",\"compositions\":[\"Literal\\\\\"]}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:launch_kwargs"}, {"id": "{\"name\":\"launch_kwargs\",\"type_\":\"dict\\\\|None\",\"default_\":\"\",\"description\":\"launch_kwargs : dict \\\\| None\",\"compositions\":[\"dict\\\\\"]}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}"}, {"id": "?:Literal\\"}, {"id": "?:dict\\"}, {"id": "?:WebPage\\"}, {"id": "?:WebPage"}, {"id": "metagpt/actions/prepare_documents.py"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments"}, {"id": "{\"name\":\"PrepareDocuments\",\"package\":\"metagpt/actions/prepare_documents.py:PrepareDocuments\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:config"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:i_context"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:name"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/prepare_interview.py"}, {"id": "metagpt/actions/prepare_interview.py:PrepareInterview"}, {"id": "{\"name\":\"PrepareInterview\",\"package\":\"metagpt/actions/prepare_interview.py:PrepareInterview\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/prepare_interview.py:PrepareInterview:name"}, {"id": "metagpt/actions/prepare_interview.py:PrepareInterview:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/product_manager.py"}, {"id": "metagpt/roles/product_manager.py:ProductManager"}, {"id": "{\"name\":\"ProductManager\",\"package\":\"metagpt/roles/product_manager.py:ProductManager\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"todo_action\":{\"name\":\"todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"todo_action : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/product_manager.py:ProductManager:constraints"}, {"id": "metagpt/roles/product_manager.py:ProductManager:goal"}, {"id": "metagpt/roles/product_manager.py:ProductManager:name"}, {"id": "metagpt/roles/product_manager.py:ProductManager:profile"}, {"id": "metagpt/roles/product_manager.py:ProductManager:todo_action"}, {"id": "{\"name\":\"todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"todo_action : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/project_manager.py"}, {"id": "metagpt/roles/project_manager.py:ProjectManager"}, {"id": "{\"name\":\"ProjectManager\",\"package\":\"metagpt/roles/project_manager.py:ProjectManager\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:constraints"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:goal"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:name"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:profile"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo"}, {"id": "{\"name\":\"ProjectRepo\",\"package\":\"metagpt/utils/project_repo.py:ProjectRepo\",\"attributes\":{\"docs\":{\"name\":\"docs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"docs\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]},\"requirement\":{\"name\":\"requirement\",\"type_\":\"\",\"default_\":\"\",\"description\":\"requirement\",\"compositions\":[]},\"resources\":{\"name\":\"resources\",\"type_\":\"\",\"default_\":\"\",\"description\":\"resources\",\"compositions\":[]},\"src_relative_path\":{\"name\":\"src_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_relative_path\",\"compositions\":[]},\"srcs\":{\"name\":\"srcs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"srcs\",\"compositions\":[]},\"test_outputs\":{\"name\":\"test_outputs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"test_outputs\",\"compositions\":[]},\"tests\":{\"name\":\"tests\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tests\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"code_files_exists\":{\"name\":\"code_files_exists\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"code_files_exists(): bool\",\"aggregations\":[]},\"with_src_path\":{\"name\":\"with_src_path\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"ProjectRepo\",\"description\":\"ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},\"description\":\"with_src_path(path: str \\\\| Path): ProjectRepo\",\"aggregations\":[\"str\\\\\",\"ProjectRepo\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"ProjectRepo\",\"Path\"]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:docs"}, {"id": "{\"name\":\"docs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"docs\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:git_repo"}, {"id": "{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:requirement"}, {"id": "{\"name\":\"requirement\",\"type_\":\"\",\"default_\":\"\",\"description\":\"requirement\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:resources"}, {"id": "{\"name\":\"resources\",\"type_\":\"\",\"default_\":\"\",\"description\":\"resources\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path"}, {"id": "{\"name\":\"src_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_relative_path\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:srcs"}, {"id": "{\"name\":\"srcs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"srcs\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs"}, {"id": "{\"name\":\"test_outputs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"test_outputs\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:tests"}, {"id": "{\"name\":\"tests\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tests\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:workdir"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:code_files_exists"}, {"id": "{\"name\":\"code_files_exists\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"code_files_exists(): bool\",\"aggregations\":[]}"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:with_src_path"}, {"id": "{\"name\":\"with_src_path\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"ProjectRepo\",\"description\":\"ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},\"description\":\"with_src_path(path: str \\\\| Path): ProjectRepo\",\"aggregations\":[\"str\\\\\",\"ProjectRepo\",\"Path\"]}"}, {"id": "metagpt/roles/prompt.py"}, {"id": "metagpt/roles/prompt.py:PromptString"}, {"id": "{\"name\":\"PromptString\",\"package\":\"metagpt/roles/prompt.py:PromptString\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/prompt.py:PromptString:name"}, {"id": "metagpt/roles/qa_engineer.py"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer"}, {"id": "{\"name\":\"QaEngineer\",\"package\":\"metagpt/roles/qa_engineer.py:QaEngineer\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"test_round\":{\"name\":\"test_round\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round : int\",\"compositions\":[]},\"test_round_allowed\":{\"name\":\"test_round_allowed\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round_allowed : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:constraints"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:goal"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:name"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:profile"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:test_round"}, {"id": "{\"name\":\"test_round\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:test_round_allowed"}, {"id": "{\"name\":\"test_round_allowed\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round_allowed : int\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection"}, {"id": "{\"name\":\"QdrantConnection\",\"package\":\"metagpt/document_store/qdrant_store.py:QdrantConnection\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"host : Optional[str]\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"memory : bool\",\"compositions\":[]},\"port\":{\"name\":\"port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"port : Optional[int]\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"url : Optional[str]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:api_key"}, {"id": "{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:host"}, {"id": "{\"name\":\"host\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"host : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:memory"}, {"id": "{\"name\":\"memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"memory : bool\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:port"}, {"id": "{\"name\":\"port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"port : Optional[int]\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantConnection:url"}, {"id": "{\"name\":\"url\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"url : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore"}, {"id": "{\"name\":\"QdrantStore\",\"package\":\"metagpt/document_store/qdrant_store.py:QdrantStore\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"QdrantClient\",\"default_\":\"\",\"description\":\"client : QdrantClient\",\"compositions\":[\"QdrantClient\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"points\",\"type_\":\"List[PointStruct]\",\"default_\":\"\",\"description\":\"points: List[PointStruct]\",\"compositions\":[\"PointStruct\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(collection_name: str, points: List[PointStruct])\",\"aggregations\":[\"PointStruct\"]},\"create_collection\":{\"name\":\"create_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"vectors_config\",\"type_\":\"VectorParams\",\"default_\":\"\",\"description\":\"vectors_config: VectorParams\",\"compositions\":[\"VectorParams\"]},{\"name\":\"force_recreate\",\"type_\":\"\",\"default_\":\"\",\"description\":\"force_recreate\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_collection(collection_name: str, vectors_config: VectorParams, force_recreate)\",\"aggregations\":[\"VectorParams\"]},\"delete_collection\":{\"name\":\"delete_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_collection(collection_name: str, timeout)\",\"aggregations\":[]},\"has_collection\":{\"name\":\"has_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"has_collection(collection_name: str)\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"query\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"query: List[float]\",\"compositions\":[]},{\"name\":\"query_filter\",\"type_\":\"Filter\",\"default_\":\"\",\"description\":\"query_filter: Filter\",\"compositions\":[\"Filter\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"return_vector\",\"type_\":\"\",\"default_\":\"\",\"description\":\"return_vector\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(collection_name: str, query: List[float], query_filter: Filter, k, return_vector)\",\"aggregations\":[\"Filter\"]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[\"QdrantClient\"],\"aggregations\":[\"PointStruct\",\"VectorParams\",\"Filter\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:client"}, {"id": "{\"name\":\"client\",\"type_\":\"QdrantClient\",\"default_\":\"\",\"description\":\"client : QdrantClient\",\"compositions\":[\"QdrantClient\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:add"}, {"id": "{\"name\":\"add\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"points\",\"type_\":\"List[PointStruct]\",\"default_\":\"\",\"description\":\"points: List[PointStruct]\",\"compositions\":[\"PointStruct\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(collection_name: str, points: List[PointStruct])\",\"aggregations\":[\"PointStruct\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:create_collection"}, {"id": "{\"name\":\"create_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"vectors_config\",\"type_\":\"VectorParams\",\"default_\":\"\",\"description\":\"vectors_config: VectorParams\",\"compositions\":[\"VectorParams\"]},{\"name\":\"force_recreate\",\"type_\":\"\",\"default_\":\"\",\"description\":\"force_recreate\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_collection(collection_name: str, vectors_config: VectorParams, force_recreate)\",\"aggregations\":[\"VectorParams\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:delete_collection"}, {"id": "{\"name\":\"delete_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_collection(collection_name: str, timeout)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:has_collection"}, {"id": "{\"name\":\"has_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"has_collection(collection_name: str)\",\"aggregations\":[]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:search"}, {"id": "{\"name\":\"search\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"query\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"query: List[float]\",\"compositions\":[]},{\"name\":\"query_filter\",\"type_\":\"Filter\",\"default_\":\"\",\"description\":\"query_filter: Filter\",\"compositions\":[\"Filter\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"return_vector\",\"type_\":\"\",\"default_\":\"\",\"description\":\"return_vector\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(collection_name: str, query: List[float], query_filter: Filter, k, return_vector)\",\"aggregations\":[\"Filter\"]}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:write"}, {"id": "?:QdrantClient"}, {"id": "?:PointStruct"}, {"id": "?:VectorParams"}, {"id": "?:Filter"}, {"id": "metagpt/actions/rebuild_class_view.py"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView"}, {"id": "{\"name\":\"RebuildClassView\",\"package\":\"metagpt/actions/rebuild_class_view.py:RebuildClassView\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}},\"compositions\":[\"GraphRepository\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:graph_db"}, {"id": "{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView"}, {"id": "{\"name\":\"RebuildSequenceView\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}},\"methods\":{\"parse_participant\":{\"name\":\"parse_participant\",\"args\":[{\"name\":\"mermaid_sequence_diagram\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_sequence_diagram: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_participant(mermaid_sequence_diagram: str): List[str]\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}},\"compositions\":[\"GraphRepository\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:graph_db"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:parse_participant"}, {"id": "{\"name\":\"parse_participant\",\"args\":[{\"name\":\"mermaid_sequence_diagram\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_sequence_diagram: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_participant(mermaid_sequence_diagram: str): List[str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:run"}, {"id": "metagpt/utils/redis.py"}, {"id": "metagpt/utils/redis.py:Redis"}, {"id": "{\"name\":\"Redis\",\"package\":\"metagpt/utils/redis.py:Redis\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"config : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}},\"methods\":{\"close\":{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"close()\",\"aggregations\":[]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\\\\|None\",\"description\":\"bytes \\\\| None\",\"compositions\":[\"bytes\\\\\"]},\"description\":\"get(key: str): bytes \\\\| None\",\"aggregations\":[\"bytes\\\\\"]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]},{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key: str, data: str, timeout_sec: int)\",\"aggregations\":[]}},\"compositions\":[\"RedisConfig\"],\"aggregations\":[\"bytes\\\\\"]}"}, {"id": "metagpt/utils/redis.py:Redis:config"}, {"id": "{\"name\":\"config\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"config : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}"}, {"id": "metagpt/utils/redis.py:Redis:close"}, {"id": "{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"close()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/redis.py:Redis:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\\\\|None\",\"description\":\"bytes \\\\| None\",\"compositions\":[\"bytes\\\\\"]},\"description\":\"get(key: str): bytes \\\\| None\",\"aggregations\":[\"bytes\\\\\"]}"}, {"id": "metagpt/utils/redis.py:Redis:set"}, {"id": "{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]},{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key: str, data: str, timeout_sec: int)\",\"aggregations\":[]}"}, {"id": "?:bytes\\"}, {"id": "metagpt/configs/redis_config.py"}, {"id": "metagpt/configs/redis_config.py:RedisConfig"}, {"id": "{\"name\":\"RedisConfig\",\"package\":\"metagpt/configs/redis_config.py:RedisConfig\",\"attributes\":{\"db\":{\"name\":\"db\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"db : str\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"host : str\",\"compositions\":[]},\"password\":{\"name\":\"password\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"password : str\",\"compositions\":[]},\"port\":{\"name\":\"port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"port : int\",\"compositions\":[]},\"username\":{\"name\":\"username\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"username : str\",\"compositions\":[]}},\"methods\":{\"to_kwargs\":{\"name\":\"to_kwargs\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_kwargs()\",\"aggregations\":[]},\"to_url\":{\"name\":\"to_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:db"}, {"id": "{\"name\":\"db\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"db : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:host"}, {"id": "{\"name\":\"host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"host : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:password"}, {"id": "{\"name\":\"password\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"password : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:port"}, {"id": "{\"name\":\"port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"port : int\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:username"}, {"id": "{\"name\":\"username\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"username : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:to_kwargs"}, {"id": "{\"name\":\"to_kwargs\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_kwargs()\",\"aggregations\":[]}"}, {"id": "metagpt/configs/redis_config.py:RedisConfig:to_url"}, {"id": "{\"name\":\"to_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_url()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/repair_llm_raw_output.py"}, {"id": "metagpt/utils/repair_llm_raw_output.py:RepairType"}, {"id": "{\"name\":\"RepairType\",\"package\":\"metagpt/utils/repair_llm_raw_output.py:RepairType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:RepairType:name"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:ReplyData"}, {"id": "{\"name\":\"ReplyData\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:ReplyData\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:ReplyData:content"}, {"id": "metagpt/actions/invoice_ocr.py:ReplyQuestion"}, {"id": "{\"name\":\"ReplyQuestion\",\"package\":\"metagpt/actions/invoice_ocr.py:ReplyQuestion\",\"attributes\":{\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"ocr_result\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_result: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, ocr_result: list): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/invoice_ocr.py:ReplyQuestion:language"}, {"id": "metagpt/actions/invoice_ocr.py:ReplyQuestion:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"ocr_result\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_result: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, ocr_result: list): str\",\"aggregations\":[]}"}, {"id": "metagpt/document.py:Repo"}, {"id": "{\"name\":\"Repo\",\"package\":\"metagpt/document.py:Repo\",\"attributes\":{\"assets\":{\"name\":\"assets\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"assets : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"codes\":{\"name\":\"codes\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"codes : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"docs\":{\"name\":\"docs\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"docs : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}},\"methods\":{\"eda\":{\"name\":\"eda\",\"args\":[],\"return_args\":{\"type_\":\"RepoMetadata\",\"description\":\"RepoMetadata\",\"compositions\":[\"RepoMetadata\"]},\"description\":\"eda(): RepoMetadata\",\"aggregations\":[\"RepoMetadata\"]},\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[Document]\",\"description\":\"Optional[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get(filename: str): Optional[Document]\",\"aggregations\":[\"Document\"]},\"get_text_documents\":{\"name\":\"get_text_documents\",\"args\":[],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_text_documents(): list[Document]\",\"aggregations\":[\"Document\"]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(filename: str, content: str)\",\"aggregations\":[]},\"to_path\":{\"name\":\"to_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path()\",\"aggregations\":[]}},\"compositions\":[\"Document\",\"Path\"],\"aggregations\":[\"RepoMetadata\"]}"}, {"id": "metagpt/document.py:Repo:assets"}, {"id": "{\"name\":\"assets\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"assets : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"id": "metagpt/document.py:Repo:codes"}, {"id": "{\"name\":\"codes\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"codes : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"id": "metagpt/document.py:Repo:docs"}, {"id": "{\"name\":\"docs\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"docs : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"id": "metagpt/document.py:Repo:name"}, {"id": "metagpt/document.py:Repo:path"}, {"id": "metagpt/document.py:Repo:eda"}, {"id": "{\"name\":\"eda\",\"args\":[],\"return_args\":{\"type_\":\"RepoMetadata\",\"description\":\"RepoMetadata\",\"compositions\":[\"RepoMetadata\"]},\"description\":\"eda(): RepoMetadata\",\"aggregations\":[\"RepoMetadata\"]}"}, {"id": "metagpt/document.py:Repo:from_path"}, {"id": "metagpt/document.py:Repo:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[Document]\",\"description\":\"Optional[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get(filename: str): Optional[Document]\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/document.py:Repo:get_text_documents"}, {"id": "{\"name\":\"get_text_documents\",\"args\":[],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_text_documents(): list[Document]\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/document.py:Repo:set"}, {"id": "{\"name\":\"set\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(filename: str, content: str)\",\"aggregations\":[]}"}, {"id": "metagpt/document.py:Repo:to_path"}, {"id": "{\"name\":\"to_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path()\",\"aggregations\":[]}"}, {"id": "?:RepoMetadata"}, {"id": "metagpt/repo_parser.py:RepoFileInfo"}, {"id": "{\"name\":\"RepoFileInfo\",\"package\":\"metagpt/repo_parser.py:RepoFileInfo\",\"attributes\":{\"classes\":{\"name\":\"classes\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"classes : List\",\"compositions\":[]},\"file\":{\"name\":\"file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file : str\",\"compositions\":[]},\"functions\":{\"name\":\"functions\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"functions : List\",\"compositions\":[]},\"globals\":{\"name\":\"globals\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"globals : List\",\"compositions\":[]},\"page_info\":{\"name\":\"page_info\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"page_info : List\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:classes"}, {"id": "{\"name\":\"classes\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"classes : List\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:file"}, {"id": "{\"name\":\"file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file : str\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:functions"}, {"id": "{\"name\":\"functions\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"functions : List\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:globals"}, {"id": "{\"name\":\"globals\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"globals : List\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoFileInfo:page_info"}, {"id": "{\"name\":\"page_info\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"page_info : List\",\"compositions\":[]}"}, {"id": "metagpt/document.py:RepoMetadata"}, {"id": "{\"name\":\"RepoMetadata\",\"package\":\"metagpt/document.py:RepoMetadata\",\"attributes\":{\"n_chars\":{\"name\":\"n_chars\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_chars : int\",\"compositions\":[]},\"n_docs\":{\"name\":\"n_docs\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_docs : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"symbols\":{\"name\":\"symbols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"symbols : list\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/document.py:RepoMetadata:n_chars"}, {"id": "{\"name\":\"n_chars\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_chars : int\",\"compositions\":[]}"}, {"id": "metagpt/document.py:RepoMetadata:n_docs"}, {"id": "{\"name\":\"n_docs\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_docs : int\",\"compositions\":[]}"}, {"id": "metagpt/document.py:RepoMetadata:name"}, {"id": "metagpt/document.py:RepoMetadata:symbols"}, {"id": "{\"name\":\"symbols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"symbols : list\",\"compositions\":[]}"}, {"id": "metagpt/repo_parser.py:RepoParser"}, {"id": "{\"name\":\"RepoParser\",\"package\":\"metagpt/repo_parser.py:RepoParser\",\"attributes\":{\"base_directory\":{\"name\":\"base_directory\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"base_directory : Path\",\"compositions\":[\"Path\"]}},\"methods\":{\"extract_class_and_function_info\":{\"name\":\"extract_class_and_function_info\",\"args\":[{\"name\":\"tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tree\",\"compositions\":[]},{\"name\":\"file_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"file_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"RepoFileInfo\",\"description\":\"RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"extract_class_and_function_info(tree, file_path): RepoFileInfo\",\"aggregations\":[\"RepoFileInfo\"]},\"generate_dataframe_structure\":{\"name\":\"generate_dataframe_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_dataframe_structure(output_path)\",\"aggregations\":[]},\"generate_json_structure\":{\"name\":\"generate_json_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_json_structure(output_path)\",\"aggregations\":[]},\"generate_structure\":{\"name\":\"generate_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"generate_structure(output_path, mode): Path\",\"aggregations\":[\"Path\"]},\"generate_symbols\":{\"name\":\"generate_symbols\",\"args\":[],\"return_args\":{\"type_\":\"List[RepoFileInfo]\",\"description\":\"List[RepoFileInfo]\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"generate_symbols(): List[RepoFileInfo]\",\"aggregations\":[\"RepoFileInfo\"]},\"node_to_str\":{\"name\":\"node_to_str\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeBlockInfo\\\\|None\",\"description\":\"CodeBlockInfo \\\\| None\",\"compositions\":[\"CodeBlockInfo\\\\\"]},\"description\":\"node_to_str(node): CodeBlockInfo \\\\| None\",\"aggregations\":[\"CodeBlockInfo\\\\\"]},\"rebuild_class_views\":{\"name\":\"rebuild_class_views\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_class_views(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[\"Path\"],\"aggregations\":[\"RepoFileInfo\",\"CodeBlockInfo\\\\\",\"str\\\\\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:base_directory"}, {"id": "{\"name\":\"base_directory\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"base_directory : Path\",\"compositions\":[\"Path\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:extract_class_and_function_info"}, {"id": "{\"name\":\"extract_class_and_function_info\",\"args\":[{\"name\":\"tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tree\",\"compositions\":[]},{\"name\":\"file_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"file_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"RepoFileInfo\",\"description\":\"RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"extract_class_and_function_info(tree, file_path): RepoFileInfo\",\"aggregations\":[\"RepoFileInfo\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:generate_dataframe_structure"}, {"id": "{\"name\":\"generate_dataframe_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_dataframe_structure(output_path)\",\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:RepoParser:generate_json_structure"}, {"id": "{\"name\":\"generate_json_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_json_structure(output_path)\",\"aggregations\":[]}"}, {"id": "metagpt/repo_parser.py:RepoParser:generate_structure"}, {"id": "{\"name\":\"generate_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"generate_structure(output_path, mode): Path\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:generate_symbols"}, {"id": "{\"name\":\"generate_symbols\",\"args\":[],\"return_args\":{\"type_\":\"List[RepoFileInfo]\",\"description\":\"List[RepoFileInfo]\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"generate_symbols(): List[RepoFileInfo]\",\"aggregations\":[\"RepoFileInfo\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:node_to_str"}, {"id": "{\"name\":\"node_to_str\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeBlockInfo\\\\|None\",\"description\":\"CodeBlockInfo \\\\| None\",\"compositions\":[\"CodeBlockInfo\\\\\"]},\"description\":\"node_to_str(node): CodeBlockInfo \\\\| None\",\"aggregations\":[\"CodeBlockInfo\\\\\"]}"}, {"id": "metagpt/repo_parser.py:RepoParser:rebuild_class_views"}, {"id": "{\"name\":\"rebuild_class_views\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_class_views(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "?:CodeBlockInfo\\"}, {"id": "metagpt/roles/researcher.py"}, {"id": "metagpt/roles/researcher.py:Report"}, {"id": "{\"name\":\"Report\",\"package\":\"metagpt/roles/researcher.py:Report\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"links\":{\"name\":\"links\",\"type_\":\"Optional[dict[str,list[str]]]\",\"default_\":\"\",\"description\":\"links : Optional[dict[str, list[str]]]\",\"compositions\":[]},\"summaries\":{\"name\":\"summaries\",\"type_\":\"Optional[list[tuple[str,str]]]\",\"default_\":\"\",\"description\":\"summaries : Optional[list[tuple[str, str]]]\",\"compositions\":[\"tuple\"]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"tuple\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/researcher.py:Report:content"}, {"id": "metagpt/roles/researcher.py:Report:links"}, {"id": "{\"name\":\"links\",\"type_\":\"Optional[dict[str,list[str]]]\",\"default_\":\"\",\"description\":\"links : Optional[dict[str, list[str]]]\",\"compositions\":[]}"}, {"id": "metagpt/roles/researcher.py:Report:summaries"}, {"id": "{\"name\":\"summaries\",\"type_\":\"Optional[list[tuple[str,str]]]\",\"default_\":\"\",\"description\":\"summaries : Optional[list[tuple[str, str]]]\",\"compositions\":[\"tuple\"]}"}, {"id": "metagpt/roles/researcher.py:Report:topic"}, {"id": "{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/researcher.py:Researcher"}, {"id": "{\"name\":\"Researcher\",\"package\":\"metagpt/roles/researcher.py:Researcher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]},\"research_system_text\":{\"name\":\"research_system_text\",\"args\":[{\"name\":\"topic\",\"type_\":\"\",\"default_\":\"\",\"description\":\"topic\",\"compositions\":[]},{\"name\":\"current_task\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"current_task: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"research_system_text(topic, current_task: Action): str\",\"aggregations\":[\"Action\"]},\"write_report\":{\"name\":\"write_report\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_report(topic: str, content: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Message\",\"Action\"]}"}, {"id": "metagpt/roles/researcher.py:Researcher:constraints"}, {"id": "metagpt/roles/researcher.py:Researcher:goal"}, {"id": "metagpt/roles/researcher.py:Researcher:language"}, {"id": "metagpt/roles/researcher.py:Researcher:name"}, {"id": "metagpt/roles/researcher.py:Researcher:profile"}, {"id": "metagpt/roles/researcher.py:Researcher:react"}, {"id": "{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/researcher.py:Researcher:research_system_text"}, {"id": "{\"name\":\"research_system_text\",\"args\":[{\"name\":\"topic\",\"type_\":\"\",\"default_\":\"\",\"description\":\"topic\",\"compositions\":[]},{\"name\":\"current_task\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"current_task: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"research_system_text(topic, current_task: Action): str\",\"aggregations\":[\"Action\"]}"}, {"id": "metagpt/roles/researcher.py:Researcher:write_report"}, {"id": "{\"name\":\"write_report\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_report(topic: str, content: str)\",\"aggregations\":[]}"}, {"id": "?:Action"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories"}, {"id": "{\"name\":\"ResourceFileRepositories\",\"package\":\"metagpt/utils/project_repo.py:ResourceFileRepositories\",\"attributes\":{\"api_spec_and_task\":{\"name\":\"api_spec_and_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_spec_and_task\",\"compositions\":[]},\"code_plan_and_change\":{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]},\"code_summary\":{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]},\"competitive_analysis\":{\"name\":\"competitive_analysis\",\"type_\":\"\",\"default_\":\"\",\"description\":\"competitive_analysis\",\"compositions\":[]},\"data_api_design\":{\"name\":\"data_api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data_api_design\",\"compositions\":[]},\"graph_repo\":{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},\"sd_output\":{\"name\":\"sd_output\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_output\",\"compositions\":[]},\"seq_flow\":{\"name\":\"seq_flow\",\"type_\":\"\",\"default_\":\"\",\"description\":\"seq_flow\",\"compositions\":[]},\"system_design\":{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:api_spec_and_task"}, {"id": "{\"name\":\"api_spec_and_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_spec_and_task\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_plan_and_change"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_summary"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:competitive_analysis"}, {"id": "{\"name\":\"competitive_analysis\",\"type_\":\"\",\"default_\":\"\",\"description\":\"competitive_analysis\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:data_api_design"}, {"id": "{\"name\":\"data_api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data_api_design\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:graph_repo"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:prd"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:sd_output"}, {"id": "{\"name\":\"sd_output\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_output\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:seq_flow"}, {"id": "{\"name\":\"seq_flow\",\"type_\":\"\",\"default_\":\"\",\"description\":\"seq_flow\",\"compositions\":[]}"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:system_design"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding"}, {"id": "{\"name\":\"ResultEmbedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:ResultEmbedding\",\"attributes\":{\"data\":{\"name\":\"data\",\"type_\":\"List[Embedding]\",\"default_\":\"\",\"description\":\"data : List[Embedding]\",\"compositions\":[\"Embedding\"]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"object_\":{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]},\"usage\":{\"name\":\"usage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"usage\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Embedding\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:data"}, {"id": "{\"name\":\"data\",\"type_\":\"List[Embedding]\",\"default_\":\"\",\"description\":\"data : List[Embedding]\",\"compositions\":[\"Embedding\"]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:model"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:object_"}, {"id": "{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage"}, {"id": "{\"name\":\"usage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"usage\",\"compositions\":[]}"}, {"id": "?:Embedding"}, {"id": "metagpt/learn/skill_loader.py:Returns"}, {"id": "{\"name\":\"Returns\",\"package\":\"metagpt/learn/skill_loader.py:Returns\",\"attributes\":{\"format\":{\"name\":\"format\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"format : Optional[str]\",\"compositions\":[]},\"type\":{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Returns:format"}, {"id": "{\"name\":\"format\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"format : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Returns:type"}, {"id": "metagpt/actions/action_node.py:ReviewMode"}, {"id": "{\"name\":\"ReviewMode\",\"package\":\"metagpt/actions/action_node.py:ReviewMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ReviewMode:name"}, {"id": "metagpt/actions/action_node.py:ReviseMode"}, {"id": "{\"name\":\"ReviseMode\",\"package\":\"metagpt/actions/action_node.py:ReviseMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ReviseMode:name"}, {"id": "metagpt/roles/role.py"}, {"id": "metagpt/roles/role.py:Role"}, {"id": "{\"name\":\"Role\",\"package\":\"metagpt/roles/role.py:Role\",\"attributes\":{\"action_description\":{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]},\"actions\":{\"name\":\"actions\",\"type_\":\"list[SerializeAsAny[Action]]\",\"default_\":\"\",\"description\":\"actions : list[SerializeAsAny[Action]]\",\"compositions\":[\"Action\",\"SerializeAsAny\"]},\"addresses\":{\"name\":\"addresses\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"addresses : set[str]\",\"compositions\":[]},\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"is_human\":{\"name\":\"is_human\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_human : bool\",\"compositions\":[]},\"is_idle\":{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]},\"latest_observed_msg\":{\"name\":\"latest_observed_msg\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"latest_observed_msg : Optional[Message]\",\"compositions\":[\"Message\"]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"project_repo\":{\"name\":\"project_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_repo\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]},\"rc\":{\"name\":\"rc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"rc\",\"compositions\":[]},\"recovered\":{\"name\":\"recovered\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"recovered : bool\",\"compositions\":[]},\"role_id\":{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id : str\",\"compositions\":[]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]},\"states\":{\"name\":\"states\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"states : list[str]\",\"compositions\":[]},\"todo\":{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}},\"methods\":{\"act\":{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"ActionOutput\",\"description\":\"ActionOutput\",\"compositions\":[\"ActionOutput\"]},\"description\":\"act(): ActionOutput\",\"aggregations\":[\"ActionOutput\"]},\"check_addresses\":{\"name\":\"check_addresses\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_addresses()\",\"aggregations\":[]},\"get_memories\":{\"name\":\"get_memories\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_memories(k): list[Message]\",\"aggregations\":[\"Message\"]},\"is_watch\":{\"name\":\"is_watch\",\"args\":[{\"name\":\"caused_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"caused_by: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_watch(caused_by: str)\",\"aggregations\":[]},\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"msg\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(msg)\",\"aggregations\":[]},\"put_message\":{\"name\":\"put_message\",\"args\":[{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"put_message(message)\",\"aggregations\":[]},\"pydantic_rebuild_model\":{\"name\":\"pydantic_rebuild_model\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pydantic_rebuild_model()\",\"aggregations\":[]},\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"run(with_message): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]},\"set_action\":{\"name\":\"set_action\",\"args\":[{\"name\":\"action\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"action: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_action(action: Action)\",\"aggregations\":[\"Action\"]},\"set_actions\":{\"name\":\"set_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"list[Union[Action,Type[Action]]]\",\"default_\":\"\",\"description\":\"actions: list[Union[Action, Type[Action]]]\",\"compositions\":[\"Action\",\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_actions(actions: list[Union[Action, Type[Action]]])\",\"aggregations\":[\"Action\",\"Type\"]},\"set_addresses\":{\"name\":\"set_addresses\",\"args\":[{\"name\":\"addresses\",\"type_\":\"Set[str]\",\"default_\":\"\",\"description\":\"addresses: Set[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(addresses: Set[str])\",\"aggregations\":[]},\"set_env\":{\"name\":\"set_env\",\"args\":[{\"name\":\"env\",\"type_\":\"Environment\",\"default_\":\"\",\"description\":\"env: 'Environment'\",\"compositions\":[\"Environment\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_env(env: 'Environment')\",\"aggregations\":[\"Environment\"]},\"set_todo\":{\"name\":\"set_todo\",\"args\":[{\"name\":\"value\",\"type_\":\"Optional[Action]\",\"default_\":\"\",\"description\":\"value: Optional[Action]\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_todo(value: Optional[Action])\",\"aggregations\":[\"Action\"]},\"think\":{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"Action\",\"description\":\"Action\",\"compositions\":[\"Action\"]},\"description\":\"think(): Action\",\"aggregations\":[\"Action\"]}},\"compositions\":[\"Action\",\"SerializeAsAny\",\"Message\"],\"aggregations\":[\"ActionOutput\",\"Message\\\\\",\"Type\",\"Environment\"]}"}, {"id": "metagpt/roles/role.py:Role:action_description"}, {"id": "metagpt/roles/role.py:Role:actions"}, {"id": "{\"name\":\"actions\",\"type_\":\"list[SerializeAsAny[Action]]\",\"default_\":\"\",\"description\":\"actions : list[SerializeAsAny[Action]]\",\"compositions\":[\"Action\",\"SerializeAsAny\"]}"}, {"id": "metagpt/roles/role.py:Role:addresses"}, {"id": "{\"name\":\"addresses\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"addresses : set[str]\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:constraints"}, {"id": "metagpt/roles/role.py:Role:desc"}, {"id": "metagpt/roles/role.py:Role:git_repo"}, {"id": "metagpt/roles/role.py:Role:goal"}, {"id": "metagpt/roles/role.py:Role:is_human"}, {"id": "{\"name\":\"is_human\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_human : bool\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:is_idle"}, {"id": "metagpt/roles/role.py:Role:latest_observed_msg"}, {"id": "{\"name\":\"latest_observed_msg\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"latest_observed_msg : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"id": "metagpt/roles/role.py:Role:llm"}, {"id": "metagpt/roles/role.py:Role:model_config"}, {"id": "metagpt/roles/role.py:Role:name"}, {"id": "metagpt/roles/role.py:Role:profile"}, {"id": "metagpt/roles/role.py:Role:project_name"}, {"id": "metagpt/roles/role.py:Role:project_path"}, {"id": "metagpt/roles/role.py:Role:project_repo"}, {"id": "{\"name\":\"project_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_repo\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:prompt_schema"}, {"id": "metagpt/roles/role.py:Role:rc"}, {"id": "{\"name\":\"rc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"rc\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:recovered"}, {"id": "{\"name\":\"recovered\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"recovered : bool\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:role_id"}, {"id": "{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:src_workspace"}, {"id": "metagpt/roles/role.py:Role:states"}, {"id": "{\"name\":\"states\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"states : list[str]\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:todo"}, {"id": "{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:Role:act"}, {"id": "{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"ActionOutput\",\"description\":\"ActionOutput\",\"compositions\":[\"ActionOutput\"]},\"description\":\"act(): ActionOutput\",\"aggregations\":[\"ActionOutput\"]}"}, {"id": "metagpt/roles/role.py:Role:check_addresses"}, {"id": "{\"name\":\"check_addresses\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_addresses()\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:get_memories"}, {"id": "{\"name\":\"get_memories\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_memories(k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/role.py:Role:is_watch"}, {"id": "{\"name\":\"is_watch\",\"args\":[{\"name\":\"caused_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"caused_by: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_watch(caused_by: str)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:publish_message"}, {"id": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"msg\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(msg)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:put_message"}, {"id": "{\"name\":\"put_message\",\"args\":[{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"put_message(message)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:pydantic_rebuild_model"}, {"id": "{\"name\":\"pydantic_rebuild_model\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pydantic_rebuild_model()\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:react"}, {"id": "metagpt/roles/role.py:Role:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"run(with_message): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]}"}, {"id": "metagpt/roles/role.py:Role:set_action"}, {"id": "{\"name\":\"set_action\",\"args\":[{\"name\":\"action\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"action: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_action(action: Action)\",\"aggregations\":[\"Action\"]}"}, {"id": "metagpt/roles/role.py:Role:set_actions"}, {"id": "{\"name\":\"set_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"list[Union[Action,Type[Action]]]\",\"default_\":\"\",\"description\":\"actions: list[Union[Action, Type[Action]]]\",\"compositions\":[\"Action\",\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_actions(actions: list[Union[Action, Type[Action]]])\",\"aggregations\":[\"Action\",\"Type\"]}"}, {"id": "metagpt/roles/role.py:Role:set_addresses"}, {"id": "{\"name\":\"set_addresses\",\"args\":[{\"name\":\"addresses\",\"type_\":\"Set[str]\",\"default_\":\"\",\"description\":\"addresses: Set[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(addresses: Set[str])\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:Role:set_env"}, {"id": "{\"name\":\"set_env\",\"args\":[{\"name\":\"env\",\"type_\":\"Environment\",\"default_\":\"\",\"description\":\"env: 'Environment'\",\"compositions\":[\"Environment\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_env(env: 'Environment')\",\"aggregations\":[\"Environment\"]}"}, {"id": "metagpt/roles/role.py:Role:set_todo"}, {"id": "{\"name\":\"set_todo\",\"args\":[{\"name\":\"value\",\"type_\":\"Optional[Action]\",\"default_\":\"\",\"description\":\"value: Optional[Action]\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_todo(value: Optional[Action])\",\"aggregations\":[\"Action\"]}"}, {"id": "metagpt/roles/role.py:Role:think"}, {"id": "{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"Action\",\"description\":\"Action\",\"compositions\":[\"Action\"]},\"description\":\"think(): Action\",\"aggregations\":[\"Action\"]}"}, {"id": "?:Environment"}, {"id": "metagpt/roles/role.py:RoleContext"}, {"id": "{\"name\":\"RoleContext\",\"package\":\"metagpt/roles/role.py:RoleContext\",\"attributes\":{\"env\":{\"name\":\"env\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"env : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]},\"important_memory\":{\"name\":\"important_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"important_memory\",\"compositions\":[]},\"max_react_loop\":{\"name\":\"max_react_loop\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_react_loop : int\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"msg_buffer\":{\"name\":\"msg_buffer\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg_buffer\",\"compositions\":[]},\"news\":{\"name\":\"news\",\"type_\":\"list[Type[Message]]\",\"default_\":\"\",\"description\":\"news : list[Type[Message]]\",\"compositions\":[\"Message\",\"Type\"]},\"react_mode\":{\"name\":\"react_mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"react_mode\",\"compositions\":[]},\"state\":{\"name\":\"state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"state : int\",\"compositions\":[]},\"todo\":{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]},\"watch\":{\"name\":\"watch\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"watch : set[str]\",\"compositions\":[]}},\"methods\":{\"check\":{\"name\":\"check\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check(role_id: str)\",\"aggregations\":[]}},\"compositions\":[\"Message\",\"Type\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:env"}, {"id": "{\"name\":\"env\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"env : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:history"}, {"id": "{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:important_memory"}, {"id": "{\"name\":\"important_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"important_memory\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:max_react_loop"}, {"id": "{\"name\":\"max_react_loop\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_react_loop : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:memory"}, {"id": "metagpt/roles/role.py:RoleContext:model_config"}, {"id": "metagpt/roles/role.py:RoleContext:msg_buffer"}, {"id": "{\"name\":\"msg_buffer\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg_buffer\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:news"}, {"id": "{\"name\":\"news\",\"type_\":\"list[Type[Message]]\",\"default_\":\"\",\"description\":\"news : list[Type[Message]]\",\"compositions\":[\"Message\",\"Type\"]}"}, {"id": "metagpt/roles/role.py:RoleContext:react_mode"}, {"id": "{\"name\":\"react_mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"react_mode\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:state"}, {"id": "{\"name\":\"state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"state : int\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:todo"}, {"id": "metagpt/roles/role.py:RoleContext:watch"}, {"id": "{\"name\":\"watch\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"watch : set[str]\",\"compositions\":[]}"}, {"id": "metagpt/roles/role.py:RoleContext:check"}, {"id": "{\"name\":\"check\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check(role_id: str)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:RoleReactMode"}, {"id": "{\"name\":\"RoleReactMode\",\"package\":\"metagpt/roles/role.py:RoleReactMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"values\":{\"name\":\"values\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"values()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/role.py:RoleReactMode:name"}, {"id": "metagpt/roles/role.py:RoleReactMode:values"}, {"id": "{\"name\":\"values\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"values()\",\"aggregations\":[]}"}, {"id": "metagpt/actions/run_code.py"}, {"id": "metagpt/actions/run_code.py:RunCode"}, {"id": "{\"name\":\"RunCode\",\"package\":\"metagpt/actions/run_code.py:RunCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"RunCodeResult\",\"description\":\"RunCodeResult\",\"compositions\":[\"RunCodeResult\"]},\"description\":\"run(): RunCodeResult\",\"aggregations\":[\"RunCodeResult\"]},\"run_script\":{\"name\":\"run_script\",\"args\":[{\"name\":\"working_directory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_directory\",\"compositions\":[]},{\"name\":\"additional_python_paths\",\"type_\":\"\",\"default_\":\"\",\"description\":\"additional_python_paths\",\"compositions\":[]},{\"name\":\"command\",\"type_\":\"\",\"default_\":\"\",\"description\":\"command\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_script(working_directory, additional_python_paths, command): Tuple[str, str]\",\"aggregations\":[]},\"run_text\":{\"name\":\"run_text\",\"args\":[{\"name\":\"code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_text(code): Tuple[str, str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"RunCodeResult\"]}"}, {"id": "metagpt/actions/run_code.py:RunCode:i_context"}, {"id": "metagpt/actions/run_code.py:RunCode:name"}, {"id": "metagpt/actions/run_code.py:RunCode:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"RunCodeResult\",\"description\":\"RunCodeResult\",\"compositions\":[\"RunCodeResult\"]},\"description\":\"run(): RunCodeResult\",\"aggregations\":[\"RunCodeResult\"]}"}, {"id": "metagpt/actions/run_code.py:RunCode:run_script"}, {"id": "{\"name\":\"run_script\",\"args\":[{\"name\":\"working_directory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_directory\",\"compositions\":[]},{\"name\":\"additional_python_paths\",\"type_\":\"\",\"default_\":\"\",\"description\":\"additional_python_paths\",\"compositions\":[]},{\"name\":\"command\",\"type_\":\"\",\"default_\":\"\",\"description\":\"command\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_script(working_directory, additional_python_paths, command): Tuple[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/actions/run_code.py:RunCode:run_text"}, {"id": "{\"name\":\"run_text\",\"args\":[{\"name\":\"code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_text(code): Tuple[str, str]\",\"aggregations\":[]}"}, {"id": "?:RunCodeResult"}, {"id": "metagpt/schema.py:RunCodeContext"}, {"id": "{\"name\":\"RunCodeContext\",\"package\":\"metagpt/schema.py:RunCodeContext\",\"attributes\":{\"additional_python_paths\":{\"name\":\"additional_python_paths\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"additional_python_paths : List[str]\",\"compositions\":[]},\"code\":{\"name\":\"code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"code : Optional[str]\",\"compositions\":[]},\"code_filename\":{\"name\":\"code_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code_filename : str\",\"compositions\":[]},\"command\":{\"name\":\"command\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"command : List[str]\",\"compositions\":[]},\"mode\":{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode : str\",\"compositions\":[]},\"output\":{\"name\":\"output\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output : Optional[str]\",\"compositions\":[]},\"output_filename\":{\"name\":\"output_filename\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output_filename : Optional[str]\",\"compositions\":[]},\"test_code\":{\"name\":\"test_code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"test_code : Optional[str]\",\"compositions\":[]},\"test_filename\":{\"name\":\"test_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"test_filename : str\",\"compositions\":[]},\"working_directory\":{\"name\":\"working_directory\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"working_directory : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:additional_python_paths"}, {"id": "{\"name\":\"additional_python_paths\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"additional_python_paths : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:code"}, {"id": "{\"name\":\"code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"code : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:code_filename"}, {"id": "{\"name\":\"code_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:command"}, {"id": "{\"name\":\"command\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"command : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:mode"}, {"id": "{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:output"}, {"id": "{\"name\":\"output\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:output_filename"}, {"id": "{\"name\":\"output_filename\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output_filename : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:test_code"}, {"id": "{\"name\":\"test_code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"test_code : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:test_filename"}, {"id": "{\"name\":\"test_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"test_filename : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeContext:working_directory"}, {"id": "{\"name\":\"working_directory\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"working_directory : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeResult"}, {"id": "{\"name\":\"RunCodeResult\",\"package\":\"metagpt/schema.py:RunCodeResult\",\"attributes\":{\"stderr\":{\"name\":\"stderr\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stderr : str\",\"compositions\":[]},\"stdout\":{\"name\":\"stdout\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stdout : str\",\"compositions\":[]},\"summary\":{\"name\":\"summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"summary : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:RunCodeResult:stderr"}, {"id": "{\"name\":\"stderr\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stderr : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeResult:stdout"}, {"id": "{\"name\":\"stdout\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stdout : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:RunCodeResult:summary"}, {"id": "{\"name\":\"summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"summary : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/s3.py"}, {"id": "metagpt/utils/s3.py:S3"}, {"id": "{\"name\":\"S3\",\"package\":\"metagpt/utils/s3.py:S3\",\"attributes\":{\"auth_config\":{\"name\":\"auth_config\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"auth_config : dict\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"session\":{\"name\":\"session\",\"type_\":\"Session\",\"default_\":\"\",\"description\":\"session : Session\",\"compositions\":[\"Session\"]}},\"methods\":{\"cache\":{\"name\":\"cache\",\"args\":[{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"file_ext\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file_ext: str\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"cache(data: str, file_ext: str, format: str): str\",\"aggregations\":[]},\"download_file\":{\"name\":\"download_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"chunk_size\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"chunk_size: Optional[int]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"download_file(bucket: str, object_name: str, local_path: str, chunk_size: Optional[int]): None\",\"aggregations\":[]},\"get_object\":{\"name\":\"get_object\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"get_object(bucket: str, object_name: str): bytes\",\"aggregations\":[\"bytes\"]},\"get_object_url\":{\"name\":\"get_object_url\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_object_url(bucket: str, object_name: str): str\",\"aggregations\":[]},\"upload_file\":{\"name\":\"upload_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"upload_file(bucket: str, local_path: str, object_name: str): None\",\"aggregations\":[]}},\"compositions\":[\"Session\"],\"aggregations\":[\"bytes\"]}"}, {"id": "metagpt/utils/s3.py:S3:auth_config"}, {"id": "{\"name\":\"auth_config\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"auth_config : dict\",\"compositions\":[]}"}, {"id": "metagpt/utils/s3.py:S3:config"}, {"id": "metagpt/utils/s3.py:S3:session"}, {"id": "{\"name\":\"session\",\"type_\":\"Session\",\"default_\":\"\",\"description\":\"session : Session\",\"compositions\":[\"Session\"]}"}, {"id": "metagpt/utils/s3.py:S3:cache"}, {"id": "{\"name\":\"cache\",\"args\":[{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"file_ext\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file_ext: str\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"cache(data: str, file_ext: str, format: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/s3.py:S3:download_file"}, {"id": "{\"name\":\"download_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"chunk_size\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"chunk_size: Optional[int]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"download_file(bucket: str, object_name: str, local_path: str, chunk_size: Optional[int]): None\",\"aggregations\":[]}"}, {"id": "metagpt/utils/s3.py:S3:get_object"}, {"id": "{\"name\":\"get_object\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"get_object(bucket: str, object_name: str): bytes\",\"aggregations\":[\"bytes\"]}"}, {"id": "metagpt/utils/s3.py:S3:get_object_url"}, {"id": "{\"name\":\"get_object_url\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_object_url(bucket: str, object_name: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/s3.py:S3:upload_file"}, {"id": "{\"name\":\"upload_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"upload_file(bucket: str, local_path: str, object_name: str): None\",\"aggregations\":[]}"}, {"id": "?:Session"}, {"id": "metagpt/configs/s3_config.py"}, {"id": "metagpt/configs/s3_config.py:S3Config"}, {"id": "{\"name\":\"S3Config\",\"package\":\"metagpt/configs/s3_config.py:S3Config\",\"attributes\":{\"access_key\":{\"name\":\"access_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"access_key : str\",\"compositions\":[]},\"bucket\":{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket : str\",\"compositions\":[]},\"endpoint\":{\"name\":\"endpoint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"endpoint : str\",\"compositions\":[]},\"secret_key\":{\"name\":\"secret_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"secret_key : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/s3_config.py:S3Config:access_key"}, {"id": "{\"name\":\"access_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"access_key : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/s3_config.py:S3Config:bucket"}, {"id": "{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/s3_config.py:S3Config:endpoint"}, {"id": "{\"name\":\"endpoint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"endpoint : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/s3_config.py:S3Config:secret_key"}, {"id": "{\"name\":\"secret_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"secret_key : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:SPO"}, {"id": "{\"name\":\"SPO\",\"package\":\"metagpt/utils/graph_repository.py:SPO\",\"attributes\":{\"object_\":{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]},\"predicate\":{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate : str\",\"compositions\":[]},\"subject\":{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/graph_repository.py:SPO:object_"}, {"id": "metagpt/utils/graph_repository.py:SPO:predicate"}, {"id": "{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/graph_repository.py:SPO:subject"}, {"id": "{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase"}, {"id": "{\"name\":\"SQVUseCase\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:SQVUseCase\",\"attributes\":{\"actors\":{\"name\":\"actors\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"actors : List[str]\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"inputs\":{\"name\":\"inputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"inputs : List[str]\",\"compositions\":[]},\"outputs\":{\"name\":\"outputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"outputs : List[str]\",\"compositions\":[]},\"reason\":{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]},\"steps\":{\"name\":\"steps\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"steps : List[str]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:actors"}, {"id": "{\"name\":\"actors\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"actors : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:description"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:inputs"}, {"id": "{\"name\":\"inputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"inputs : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:outputs"}, {"id": "{\"name\":\"outputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"outputs : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:reason"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:steps"}, {"id": "{\"name\":\"steps\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"steps : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails"}, {"id": "{\"name\":\"SQVUseCaseDetails\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"relationship\":{\"name\":\"relationship\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"relationship : List[str]\",\"compositions\":[]},\"use_cases\":{\"name\":\"use_cases\",\"type_\":\"List[SQVUseCase]\",\"default_\":\"\",\"description\":\"use_cases : List[SQVUseCase]\",\"compositions\":[\"SQVUseCase\"]}},\"methods\":{},\"compositions\":[\"SQVUseCase\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:description"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:relationship"}, {"id": "{\"name\":\"relationship\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"relationship : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:use_cases"}, {"id": "{\"name\":\"use_cases\",\"type_\":\"List[SQVUseCase]\",\"default_\":\"\",\"description\":\"use_cases : List[SQVUseCase]\",\"compositions\":[\"SQVUseCase\"]}"}, {"id": "?:SQVUseCase"}, {"id": "metagpt/roles/sales.py"}, {"id": "metagpt/roles/sales.py:Sales"}, {"id": "{\"name\":\"Sales\",\"package\":\"metagpt/roles/sales.py:Sales\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}},\"methods\":{},\"compositions\":[\"BaseStore\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/sales.py:Sales:desc"}, {"id": "metagpt/roles/sales.py:Sales:name"}, {"id": "metagpt/roles/sales.py:Sales:profile"}, {"id": "metagpt/roles/sales.py:Sales:store"}, {"id": "metagpt/actions/search_and_summarize.py"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize"}, {"id": "{\"name\":\"SearchAndSummarize\",\"package\":\"metagpt/actions/search_and_summarize.py:SearchAndSummarize\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content : Optional[str]\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"Optional[SearchEngineType]\",\"default_\":\"\",\"description\":\"engine : Optional[SearchEngineType]\",\"compositions\":[\"SearchEngineType\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"result\":{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]},\"search_func\":{\"name\":\"search_func\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_func : Optional[Any]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"context: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"system_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(context: list[Message], system_text): str\",\"aggregations\":[\"Message\"]},\"validate_engine_and_run_func\":{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}},\"compositions\":[\"SearchEngineType\",\"SearchEngine\"],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:content"}, {"id": "{\"name\":\"content\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:engine"}, {"id": "{\"name\":\"engine\",\"type_\":\"Optional[SearchEngineType]\",\"default_\":\"\",\"description\":\"engine : Optional[SearchEngineType]\",\"compositions\":[\"SearchEngineType\"]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:name"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:result"}, {"id": "{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine"}, {"id": "{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_func"}, {"id": "{\"name\":\"search_func\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_func : Optional[Any]\",\"compositions\":[]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"context: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"system_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(context: list[Message], system_text): str\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:validate_engine_and_run_func"}, {"id": "{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}"}, {"id": "?:SearchEngineType"}, {"id": "?:SearchEngine"}, {"id": "metagpt/configs/search_config.py"}, {"id": "metagpt/configs/search_config.py:SearchConfig"}, {"id": "{\"name\":\"SearchConfig\",\"package\":\"metagpt/configs/search_config.py:SearchConfig\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]},\"cse_id\":{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/configs/search_config.py:SearchConfig:api_key"}, {"id": "metagpt/configs/search_config.py:SearchConfig:api_type"}, {"id": "metagpt/configs/search_config.py:SearchConfig:cse_id"}, {"id": "{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine.py"}, {"id": "metagpt/tools/search_engine.py:SearchEngine"}, {"id": "{\"name\":\"SearchEngine\",\"package\":\"metagpt/tools/search_engine.py:SearchEngine\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"Optional[SearchEngineType]\",\"default_\":\"\",\"description\":\"engine : Optional[SearchEngineType]\",\"compositions\":[\"SearchEngineType\"]},\"run_func\":{\"name\":\"run_func\",\"type_\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True]): str\",\"aggregations\":[]}},\"compositions\":[\"SearchEngineType\",\"Callable\",\"Coroutine\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:engine"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:run_func"}, {"id": "{\"name\":\"run_func\",\"type_\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True]): str\",\"aggregations\":[]}"}, {"id": "?:Coroutine"}, {"id": "metagpt/tools"}, {"id": "metagpt/tools:SearchEngineType"}, {"id": "{\"name\":\"SearchEngineType\",\"package\":\"metagpt/tools:SearchEngineType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools:SearchEngineType:name"}, {"id": "metagpt/roles/searcher.py"}, {"id": "metagpt/roles/searcher.py:Searcher"}, {"id": "{\"name\":\"Searcher\",\"package\":\"metagpt/roles/searcher.py:Searcher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"set_search_func\":{\"name\":\"set_search_func\",\"args\":[{\"name\":\"search_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_func\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_search_func(search_func)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/searcher.py:Searcher:constraints"}, {"id": "metagpt/roles/searcher.py:Searcher:engine"}, {"id": "metagpt/roles/searcher.py:Searcher:goal"}, {"id": "metagpt/roles/searcher.py:Searcher:name"}, {"id": "metagpt/roles/searcher.py:Searcher:profile"}, {"id": "metagpt/roles/searcher.py:Searcher:set_search_func"}, {"id": "{\"name\":\"set_search_func\",\"args\":[{\"name\":\"search_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_func\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_search_func(search_func)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper"}, {"id": "{\"name\":\"SeleniumWrapper\",\"package\":\"metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]},\"executable_path\":{\"name\":\"executable_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executable_path\",\"compositions\":[]},\"executor\":{\"name\":\"executor\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executor : NoneType\",\"compositions\":[]},\"launch_args\":{\"name\":\"launch_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"launch_args\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"loop : NoneType\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}},\"compositions\":[],\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:browser_type"}, {"id": "{\"name\":\"browser_type\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executable_path"}, {"id": "{\"name\":\"executable_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executable_path\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executor"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_args"}, {"id": "{\"name\":\"launch_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"launch_args\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:loop"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:run"}, {"id": "metagpt/schema.py:SerializationMixin"}, {"id": "{\"name\":\"SerializationMixin\",\"package\":\"metagpt/schema.py:SerializationMixin\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper"}, {"id": "{\"name\":\"SerpAPIWrapper\",\"package\":\"metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper\",\"attributes\":{\"aiosession\":{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"params\":{\"name\":\"params\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"params : dict\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_engine : Optional[Any]\",\"compositions\":[]},\"serpapi_api_key\":{\"name\":\"serpapi_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"serpapi_api_key : Optional[str]\",\"compositions\":[]}},\"methods\":{\"check_serpapi_api_key\":{\"name\":\"check_serpapi_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_serpapi_api_key(val: str)\",\"aggregations\":[]},\"get_params\":{\"name\":\"get_params\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_params(query: str): Dict[str, str]\",\"aggregations\":[]},\"results\":{\"name\":\"results\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(query: str, max_results: int): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query, max_results: int, as_string: bool): str\",\"aggregations\":[]}},\"compositions\":[\"aiohttp.ClientSession\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:aiosession"}, {"id": "{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:model_config"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:params"}, {"id": "{\"name\":\"params\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"params : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:search_engine"}, {"id": "{\"name\":\"search_engine\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_engine : Optional[Any]\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:serpapi_api_key"}, {"id": "{\"name\":\"serpapi_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"serpapi_api_key : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:check_serpapi_api_key"}, {"id": "{\"name\":\"check_serpapi_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_serpapi_api_key(val: str)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:get_params"}, {"id": "{\"name\":\"get_params\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_params(query: str): Dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:results"}, {"id": "{\"name\":\"results\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(query: str, max_results: int): dict\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query, max_results: int, as_string: bool): str\",\"aggregations\":[]}"}, {"id": "?:aiohttp.ClientSession"}, {"id": "metagpt/tools/search_engine_serper.py"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper"}, {"id": "{\"name\":\"SerperWrapper\",\"package\":\"metagpt/tools/search_engine_serper.py:SerperWrapper\",\"attributes\":{\"aiosession\":{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"payload\":{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_engine : Optional[Any]\",\"compositions\":[]},\"serper_api_key\":{\"name\":\"serper_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"serper_api_key : Optional[str]\",\"compositions\":[]}},\"methods\":{\"check_serper_api_key\":{\"name\":\"check_serper_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_serper_api_key(val: str)\",\"aggregations\":[]},\"get_headers\":{\"name\":\"get_headers\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_headers(): Dict[str, str]\",\"aggregations\":[]},\"get_payloads\":{\"name\":\"get_payloads\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_payloads(queries: list[str], max_results: int): Dict[str, str]\",\"aggregations\":[]},\"results\":{\"name\":\"results\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(queries: list[str], max_results: int): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: bool): str\",\"aggregations\":[]}},\"compositions\":[\"aiohttp.ClientSession\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:aiosession"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:model_config"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:payload"}, {"id": "{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:search_engine"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:serper_api_key"}, {"id": "{\"name\":\"serper_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"serper_api_key : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:check_serper_api_key"}, {"id": "{\"name\":\"check_serper_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_serper_api_key(val: str)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_headers"}, {"id": "{\"name\":\"get_headers\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_headers(): Dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_payloads"}, {"id": "{\"name\":\"get_payloads\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_payloads(queries: list[str], max_results: int): Dict[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:results"}, {"id": "{\"name\":\"results\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(queries: list[str], max_results: int): dict\",\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: bool): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:SimpleMessage"}, {"id": "{\"name\":\"SimpleMessage\",\"package\":\"metagpt/schema.py:SimpleMessage\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"role\":{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:SimpleMessage:content"}, {"id": "metagpt/schema.py:SimpleMessage:role"}, {"id": "metagpt/utils/singleton.py"}, {"id": "metagpt/utils/singleton.py:Singleton"}, {"id": "{\"name\":\"Singleton\",\"package\":\"metagpt/utils/singleton.py:Singleton\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/sk_agent.py"}, {"id": "metagpt/roles/sk_agent.py:SkAgent"}, {"id": "{\"name\":\"SkAgent\",\"package\":\"metagpt/roles/sk_agent.py:SkAgent\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"import_semantic_skill_from_directory\":{\"name\":\"import_semantic_skill_from_directory\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_semantic_skill_from_directory : Callable\",\"compositions\":[\"Callable\"]},\"import_skill\":{\"name\":\"import_skill\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_skill : Callable\",\"compositions\":[\"Callable\"]},\"kernel\":{\"name\":\"kernel\",\"type_\":\"Kernel\",\"default_\":\"\",\"description\":\"kernel : Kernel\",\"compositions\":[\"Kernel\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"plan\":{\"name\":\"plan\",\"type_\":\"Plan\",\"default_\":\"\",\"description\":\"plan : Plan\",\"compositions\":[\"Plan\"]},\"planner\":{\"name\":\"planner\",\"type_\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_\":\"\",\"description\":\"planner : Optional[Union[BasicPlanner, SequentialPlanner, ActionPlanner]]\",\"compositions\":[\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"]},\"planner_cls\":{\"name\":\"planner_cls\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"planner_cls : Optional[Any]\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Callable\",\"Kernel\",\"Plan\",\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"],\"aggregations\":[]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:constraints"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:goal"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:import_semantic_skill_from_directory"}, {"id": "{\"name\":\"import_semantic_skill_from_directory\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_semantic_skill_from_directory : Callable\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:import_skill"}, {"id": "{\"name\":\"import_skill\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_skill : Callable\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:kernel"}, {"id": "{\"name\":\"kernel\",\"type_\":\"Kernel\",\"default_\":\"\",\"description\":\"kernel : Kernel\",\"compositions\":[\"Kernel\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:name"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:plan"}, {"id": "{\"name\":\"plan\",\"type_\":\"Plan\",\"default_\":\"\",\"description\":\"plan : Plan\",\"compositions\":[\"Plan\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:planner"}, {"id": "{\"name\":\"planner\",\"type_\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_\":\"\",\"description\":\"planner : Optional[Union[BasicPlanner, SequentialPlanner, ActionPlanner]]\",\"compositions\":[\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:planner_cls"}, {"id": "{\"name\":\"planner_cls\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"planner_cls : Optional[Any]\",\"compositions\":[]}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:profile"}, {"id": "?:Kernel"}, {"id": "?:Plan"}, {"id": "?:ActionPlanner"}, {"id": "?:BasicPlanner"}, {"id": "?:SequentialPlanner"}, {"id": "metagpt/tools/search_engine.py:SkSearchEngine"}, {"id": "{\"name\":\"SkSearchEngine\",\"package\":\"metagpt/tools/search_engine.py:SkSearchEngine\",\"attributes\":{\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine"}, {"id": "metagpt/tools/search_engine.py:SkSearchEngine:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill"}, {"id": "{\"name\":\"Skill\",\"package\":\"metagpt/learn/skill_loader.py:Skill\",\"attributes\":{\"arguments\":{\"name\":\"arguments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"arguments\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]},\"examples\":{\"name\":\"examples\",\"type_\":\"List[Example]\",\"default_\":\"\",\"description\":\"examples : List[Example]\",\"compositions\":[\"Example\"]},\"id\":{\"name\":\"id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"id : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"parameters\":{\"name\":\"parameters\",\"type_\":\"Optional[Dict[str,Parameter]]\",\"default_\":\"\",\"description\":\"parameters : Optional[Dict[str, Parameter]]\",\"compositions\":[\"Parameter\"]},\"returns\":{\"name\":\"returns\",\"type_\":\"\",\"default_\":\"\",\"description\":\"returns\",\"compositions\":[]},\"x_prerequisite\":{\"name\":\"x_prerequisite\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"x_prerequisite : Dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Example\",\"Parameter\"],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:arguments"}, {"id": "{\"name\":\"arguments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"arguments\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:description"}, {"id": "metagpt/learn/skill_loader.py:Skill:examples"}, {"id": "{\"name\":\"examples\",\"type_\":\"List[Example]\",\"default_\":\"\",\"description\":\"examples : List[Example]\",\"compositions\":[\"Example\"]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:id"}, {"id": "{\"name\":\"id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"id : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:name"}, {"id": "metagpt/learn/skill_loader.py:Skill:parameters"}, {"id": "{\"name\":\"parameters\",\"type_\":\"Optional[Dict[str,Parameter]]\",\"default_\":\"\",\"description\":\"parameters : Optional[Dict[str, Parameter]]\",\"compositions\":[\"Parameter\"]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:returns"}, {"id": "{\"name\":\"returns\",\"type_\":\"\",\"default_\":\"\",\"description\":\"returns\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:Skill:x_prerequisite"}, {"id": "{\"name\":\"x_prerequisite\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"x_prerequisite : Dict\",\"compositions\":[]}"}, {"id": "?:Example"}, {"id": "?:Parameter"}, {"id": "metagpt/actions/skill_action.py:SkillAction"}, {"id": "{\"name\":\"SkillAction\",\"package\":\"metagpt/actions/skill_action.py:SkillAction\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"args : Dict\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]},\"skill\":{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}},\"methods\":{\"find_and_call_function\":{\"name\":\"find_and_call_function\",\"args\":[{\"name\":\"function_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"function_name\",\"compositions\":[]},{\"name\":\"args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"args\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"find_and_call_function(function_name, args): str\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/skill_action.py:SkillAction:args"}, {"id": "{\"name\":\"args\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"args : Dict\",\"compositions\":[]}"}, {"id": "metagpt/actions/skill_action.py:SkillAction:rsp"}, {"id": "metagpt/actions/skill_action.py:SkillAction:skill"}, {"id": "metagpt/actions/skill_action.py:SkillAction:find_and_call_function"}, {"id": "{\"name\":\"find_and_call_function\",\"args\":[{\"name\":\"function_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"function_name\",\"compositions\":[]},{\"name\":\"args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"args\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"find_and_call_function(function_name, args): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/skill_action.py:SkillAction:run"}, {"id": "metagpt/management/skill_manager.py"}, {"id": "metagpt/management/skill_manager.py:SkillManager"}, {"id": "{\"name\":\"SkillManager\",\"package\":\"metagpt/management/skill_manager.py:SkillManager\",\"attributes\":{},\"methods\":{\"add_skill\":{\"name\":\"add_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_skill(skill: Skill)\",\"aggregations\":[\"Skill\"]},\"del_skill\":{\"name\":\"del_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"del_skill(skill_name: str)\",\"aggregations\":[]},\"generate_skill_desc\":{\"name\":\"generate_skill_desc\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_skill_desc(skill: Skill): str\",\"aggregations\":[\"Skill\"]},\"get_skill\":{\"name\":\"get_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(skill_name: str): Skill\",\"aggregations\":[\"Skill\"]},\"retrieve_skill\":{\"name\":\"retrieve_skill\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Skill]\",\"description\":\"list[Skill]\",\"compositions\":[\"Skill\"]},\"description\":\"retrieve_skill(desc: str, n_results: int): list[Skill]\",\"aggregations\":[\"Skill\"]},\"retrieve_skill_scored\":{\"name\":\"retrieve_skill_scored\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"retrieve_skill_scored(desc: str, n_results: int): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:add_skill"}, {"id": "{\"name\":\"add_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_skill(skill: Skill)\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:del_skill"}, {"id": "{\"name\":\"del_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"del_skill(skill_name: str)\",\"aggregations\":[]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:generate_skill_desc"}, {"id": "{\"name\":\"generate_skill_desc\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_skill_desc(skill: Skill): str\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:get_skill"}, {"id": "{\"name\":\"get_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(skill_name: str): Skill\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill"}, {"id": "{\"name\":\"retrieve_skill\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Skill]\",\"description\":\"list[Skill]\",\"compositions\":[\"Skill\"]},\"description\":\"retrieve_skill(desc: str, n_results: int): list[Skill]\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill_scored"}, {"id": "{\"name\":\"retrieve_skill_scored\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"retrieve_skill_scored(desc: str, n_results: int): dict\",\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration"}, {"id": "{\"name\":\"SkillsDeclaration\",\"package\":\"metagpt/learn/skill_loader.py:SkillsDeclaration\",\"attributes\":{\"components\":{\"name\":\"components\",\"type_\":\"Optional[Components]\",\"default_\":\"\",\"description\":\"components : Optional[Components]\",\"compositions\":[\"Components\"]},\"entities\":{\"name\":\"entities\",\"type_\":\"Dict[str,Entity]\",\"default_\":\"\",\"description\":\"entities : Dict[str, Entity]\",\"compositions\":[\"Entity\"]},\"skillapi\":{\"name\":\"skillapi\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skillapi : str\",\"compositions\":[]}},\"methods\":{\"get_skill\":{\"name\":\"get_skill\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(name, entity_name: str): Skill\",\"aggregations\":[\"Skill\"]},\"get_skill_list\":{\"name\":\"get_skill_list\",\"args\":[{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"get_skill_list(entity_name: str, context: Context): Dict\",\"aggregations\":[\"Context\"]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"skill_yaml_file_name\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"skill_yaml_file_name: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'SkillsDeclaration'\",\"description\":\"'SkillsDeclaration'\",\"compositions\":[\"SkillsDeclaration\"]},\"description\":\"load(skill_yaml_file_name: Path): 'SkillsDeclaration'\",\"aggregations\":[\"SkillsDeclaration\",\"Path\"]}},\"compositions\":[\"Components\",\"Entity\"],\"aggregations\":[\"Skill\",\"Context\",\"SkillsDeclaration\",\"Path\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:components"}, {"id": "{\"name\":\"components\",\"type_\":\"Optional[Components]\",\"default_\":\"\",\"description\":\"components : Optional[Components]\",\"compositions\":[\"Components\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:entities"}, {"id": "{\"name\":\"entities\",\"type_\":\"Dict[str,Entity]\",\"default_\":\"\",\"description\":\"entities : Dict[str, Entity]\",\"compositions\":[\"Entity\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:skillapi"}, {"id": "{\"name\":\"skillapi\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skillapi : str\",\"compositions\":[]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill"}, {"id": "{\"name\":\"get_skill\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(name, entity_name: str): Skill\",\"aggregations\":[\"Skill\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list"}, {"id": "{\"name\":\"get_skill_list\",\"args\":[{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"get_skill_list(entity_name: str, context: Context): Dict\",\"aggregations\":[\"Context\"]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:load"}, {"id": "{\"name\":\"load\",\"args\":[{\"name\":\"skill_yaml_file_name\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"skill_yaml_file_name: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'SkillsDeclaration'\",\"description\":\"'SkillsDeclaration'\",\"compositions\":[\"SkillsDeclaration\"]},\"description\":\"load(skill_yaml_file_name: Path): 'SkillsDeclaration'\",\"aggregations\":[\"SkillsDeclaration\",\"Path\"]}"}, {"id": "?:Components"}, {"id": "?:Entity"}, {"id": "metagpt/provider/spark_api.py:SparkLLM"}, {"id": "{\"name\":\"SparkLLM\",\"package\":\"metagpt/provider/spark_api.py:SparkLLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:config"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:acompletion"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:acompletion_text"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:get_choice_text"}, {"id": "metagpt/strategy/tot_schema.py:Strategy"}, {"id": "{\"name\":\"Strategy\",\"package\":\"metagpt/strategy/tot_schema.py:Strategy\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:Strategy:name"}, {"id": "metagpt/subscription.py"}, {"id": "metagpt/subscription.py:SubscriptionRunner"}, {"id": "{\"name\":\"SubscriptionRunner\",\"package\":\"metagpt/subscription.py:SubscriptionRunner\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"tasks\":{\"name\":\"tasks\",\"type_\":\"dict[Role,asyncio.Task]\",\"default_\":\"\",\"description\":\"tasks : dict[Role, asyncio.Task]\",\"compositions\":[\"Role\",\"asyncio.Task\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"raise_exception\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"raise_exception: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(raise_exception: bool)\",\"aggregations\":[]},\"subscribe\":{\"name\":\"subscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]},{\"name\":\"trigger\",\"type_\":\"AsyncGenerator[Message,None]\",\"default_\":\"\",\"description\":\"trigger: AsyncGenerator[Message, None]\",\"compositions\":[\"AsyncGenerator\",\"Message\"]},{\"name\":\"callback\",\"type_\":\"Callable[[Message],Awaitable[None]]\",\"default_\":\"\",\"description\":\"callback: Callable[[Message], Awaitable[None]]\",\"compositions\":[\"Awaitable\",\"Callable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"subscribe(role: Role, trigger: AsyncGenerator[Message, None], callback: Callable[[Message], Awaitable[None]])\",\"aggregations\":[\"Awaitable\",\"Message\",\"Role\",\"Callable\",\"AsyncGenerator\"]},\"unsubscribe\":{\"name\":\"unsubscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"unsubscribe(role: Role)\",\"aggregations\":[\"Role\"]}},\"compositions\":[\"Role\",\"asyncio.Task\"],\"aggregations\":[\"Awaitable\",\"Message\",\"Callable\",\"AsyncGenerator\"]}"}, {"id": "metagpt/subscription.py:SubscriptionRunner:model_config"}, {"id": "metagpt/subscription.py:SubscriptionRunner:tasks"}, {"id": "{\"name\":\"tasks\",\"type_\":\"dict[Role,asyncio.Task]\",\"default_\":\"\",\"description\":\"tasks : dict[Role, asyncio.Task]\",\"compositions\":[\"Role\",\"asyncio.Task\"]}"}, {"id": "metagpt/subscription.py:SubscriptionRunner:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"raise_exception\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"raise_exception: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(raise_exception: bool)\",\"aggregations\":[]}"}, {"id": "metagpt/subscription.py:SubscriptionRunner:subscribe"}, {"id": "{\"name\":\"subscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]},{\"name\":\"trigger\",\"type_\":\"AsyncGenerator[Message,None]\",\"default_\":\"\",\"description\":\"trigger: AsyncGenerator[Message, None]\",\"compositions\":[\"AsyncGenerator\",\"Message\"]},{\"name\":\"callback\",\"type_\":\"Callable[[Message],Awaitable[None]]\",\"default_\":\"\",\"description\":\"callback: Callable[[Message], Awaitable[None]]\",\"compositions\":[\"Awaitable\",\"Callable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"subscribe(role: Role, trigger: AsyncGenerator[Message, None], callback: Callable[[Message], Awaitable[None]])\",\"aggregations\":[\"Awaitable\",\"Message\",\"Role\",\"Callable\",\"AsyncGenerator\"]}"}, {"id": "metagpt/subscription.py:SubscriptionRunner:unsubscribe"}, {"id": "{\"name\":\"unsubscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"unsubscribe(role: Role)\",\"aggregations\":[\"Role\"]}"}, {"id": "?:asyncio.Task"}, {"id": "?:Awaitable"}, {"id": "metagpt/actions/summarize_code.py"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode"}, {"id": "{\"name\":\"SummarizeCode\",\"package\":\"metagpt/actions/summarize_code.py:SummarizeCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"summarize_code\":{\"name\":\"summarize_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_code(prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode:i_context"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode:name"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode:run"}, {"id": "metagpt/actions/summarize_code.py:SummarizeCode:summarize_code"}, {"id": "{\"name\":\"summarize_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_code(prompt)\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:SystemMessage"}, {"id": "{\"name\":\"SystemMessage\",\"package\":\"metagpt/schema.py:SystemMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/talk_action.py"}, {"id": "metagpt/actions/talk_action.py:TalkAction"}, {"id": "{\"name\":\"TalkAction\",\"package\":\"metagpt/actions/talk_action.py:TalkAction\",\"attributes\":{\"aask_args\":{\"name\":\"aask_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"aask_args\",\"compositions\":[]},\"agent_description\":{\"name\":\"agent_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"agent_description\",\"compositions\":[]},\"history_summary\":{\"name\":\"history_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history_summary : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"i_context : str\",\"compositions\":[]},\"knowledge\":{\"name\":\"knowledge\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"knowledge : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"\",\"default_\":\"\",\"description\":\"language\",\"compositions\":[]},\"prompt\":{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},\"prompt_gpt4\":{\"name\":\"prompt_gpt4\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_gpt4\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:aask_args"}, {"id": "{\"name\":\"aask_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"aask_args\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:agent_description"}, {"id": "{\"name\":\"agent_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"agent_description\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:history_summary"}, {"id": "{\"name\":\"history_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history_summary : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"i_context : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:knowledge"}, {"id": "{\"name\":\"knowledge\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"knowledge : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:language"}, {"id": "{\"name\":\"language\",\"type_\":\"\",\"default_\":\"\",\"description\":\"language\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:prompt"}, {"id": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4"}, {"id": "{\"name\":\"prompt_gpt4\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_gpt4\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkAction:rsp"}, {"id": "metagpt/actions/talk_action.py:TalkAction:run"}, {"id": "metagpt/actions/talk_action.py:TalkActionPrompt"}, {"id": "{\"name\":\"TalkActionPrompt\",\"package\":\"metagpt/actions/talk_action.py:TalkActionPrompt\",\"attributes\":{\"FORMATION\":{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]},\"FORMATION_LOOSE\":{\"name\":\"FORMATION_LOOSE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION_LOOSE : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION"}, {"id": "{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION_LOOSE"}, {"id": "{\"name\":\"FORMATION_LOOSE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION_LOOSE : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:Task"}, {"id": "{\"name\":\"Task\",\"package\":\"metagpt/actions/action_node.py:Task\",\"attributes\":{\"dependent_task_ids\":{\"name\":\"dependent_task_ids\",\"type_\":\"List[int]\",\"default_\":\"\",\"description\":\"dependent_task_ids : List[int]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"task_id\":{\"name\":\"task_id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"task_id : int\",\"compositions\":[]},\"tool\":{\"name\":\"tool\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:Task:dependent_task_ids"}, {"id": "{\"name\":\"dependent_task_ids\",\"type_\":\"List[int]\",\"default_\":\"\",\"description\":\"dependent_task_ids : List[int]\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:Task:name"}, {"id": "metagpt/actions/action_node.py:Task:task_id"}, {"id": "{\"name\":\"task_id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"task_id : int\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:Task:tool"}, {"id": "{\"name\":\"tool\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool\",\"compositions\":[]}"}, {"id": "metagpt/actions/action_node.py:Tasks"}, {"id": "{\"name\":\"Tasks\",\"package\":\"metagpt/actions/action_node.py:Tasks\",\"attributes\":{\"tasks\":{\"name\":\"tasks\",\"type_\":\"List[Task]\",\"default_\":\"\",\"description\":\"tasks : List[Task]\",\"compositions\":[\"Task\"]}},\"methods\":{},\"compositions\":[\"Task\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:Tasks:tasks"}, {"id": "{\"name\":\"tasks\",\"type_\":\"List[Task]\",\"default_\":\"\",\"description\":\"tasks : List[Task]\",\"compositions\":[\"Task\"]}"}, {"id": "?:Task"}, {"id": "metagpt/roles/teacher.py"}, {"id": "metagpt/roles/teacher.py:Teacher"}, {"id": "{\"name\":\"Teacher\",\"package\":\"metagpt/roles/teacher.py:Teacher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"course_title\":{\"name\":\"course_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"course_title\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"new_file_name\":{\"name\":\"new_file_name\",\"args\":[{\"name\":\"lesson_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lesson_title\",\"compositions\":[]},{\"name\":\"ext\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ext\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_file_name(lesson_title, ext)\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(content)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/roles/teacher.py:Teacher:constraints"}, {"id": "metagpt/roles/teacher.py:Teacher:course_title"}, {"id": "{\"name\":\"course_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"course_title\",\"compositions\":[]}"}, {"id": "metagpt/roles/teacher.py:Teacher:desc"}, {"id": "metagpt/roles/teacher.py:Teacher:goal"}, {"id": "metagpt/roles/teacher.py:Teacher:name"}, {"id": "metagpt/roles/teacher.py:Teacher:profile"}, {"id": "metagpt/roles/teacher.py:Teacher:new_file_name"}, {"id": "{\"name\":\"new_file_name\",\"args\":[{\"name\":\"lesson_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lesson_title\",\"compositions\":[]},{\"name\":\"ext\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ext\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_file_name(lesson_title, ext)\",\"aggregations\":[]}"}, {"id": "metagpt/roles/teacher.py:Teacher:save"}, {"id": "{\"name\":\"save\",\"args\":[{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(content)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock"}, {"id": "{\"name\":\"TeachingPlanBlock\",\"package\":\"metagpt/actions/write_teaching_plan.py:TeachingPlanBlock\",\"attributes\":{\"COURSE_TITLE\":{\"name\":\"COURSE_TITLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"COURSE_TITLE : str\",\"compositions\":[]},\"DATA_BEGIN_TAG\":{\"name\":\"DATA_BEGIN_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_BEGIN_TAG : str\",\"compositions\":[]},\"DATA_END_TAG\":{\"name\":\"DATA_END_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_END_TAG : str\",\"compositions\":[]},\"FORMATION\":{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]},\"PROMPT_TEMPLATE\":{\"name\":\"PROMPT_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TEMPLATE : str\",\"compositions\":[]},\"PROMPT_TITLE_TEMPLATE\":{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TITLE_TEMPLATE : str\",\"compositions\":[]},\"TOPICS\":{\"name\":\"TOPICS\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"TOPICS : list\",\"compositions\":[]},\"TOPIC_STATEMENTS\":{\"name\":\"TOPIC_STATEMENTS\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"TOPIC_STATEMENTS : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:COURSE_TITLE"}, {"id": "{\"name\":\"COURSE_TITLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"COURSE_TITLE : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_BEGIN_TAG"}, {"id": "{\"name\":\"DATA_BEGIN_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_BEGIN_TAG : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_END_TAG"}, {"id": "{\"name\":\"DATA_END_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_END_TAG : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:FORMATION"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TEMPLATE"}, {"id": "{\"name\":\"PROMPT_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TEMPLATE : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TITLE_TEMPLATE"}, {"id": "{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TITLE_TEMPLATE : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPICS"}, {"id": "{\"name\":\"TOPICS\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"TOPICS : list\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPIC_STATEMENTS"}, {"id": "{\"name\":\"TOPIC_STATEMENTS\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"TOPIC_STATEMENTS : dict\",\"compositions\":[]}"}, {"id": "metagpt/team.py"}, {"id": "metagpt/team.py:Team"}, {"id": "{\"name\":\"Team\",\"package\":\"metagpt/team.py:Team\",\"attributes\":{\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"env\":{\"name\":\"env\",\"type_\":\"Optional[Environment]\",\"default_\":\"\",\"description\":\"env : Optional[Environment]\",\"compositions\":[\"Environment\"]},\"idea\":{\"name\":\"idea\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"idea : str\",\"compositions\":[]},\"investment\":{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment : float\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"deserialize\":{\"name\":\"deserialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"'Team'\",\"description\":\"'Team'\",\"compositions\":[\"Team\"]},\"description\":\"deserialize(stg_path: Path, context: Context): 'Team'\",\"aggregations\":[\"Team\",\"Context\",\"Path\"]},\"hire\":{\"name\":\"hire\",\"args\":[{\"name\":\"roles\",\"type_\":\"list[Role]\",\"default_\":\"\",\"description\":\"roles: list[Role]\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"hire(roles: list[Role])\",\"aggregations\":[\"Role\"]},\"invest\":{\"name\":\"invest\",\"args\":[{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment: float\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"invest(investment: float)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"n_round\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_round\",\"compositions\":[]},{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"\",\"default_\":\"\",\"description\":\"send_to\",\"compositions\":[]},{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(n_round, idea, send_to, auto_archive)\",\"aggregations\":[]},\"run_project\":{\"name\":\"run_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_project(idea, send_to: str)\",\"aggregations\":[]},\"serialize\":{\"name\":\"serialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"serialize(stg_path: Path)\",\"aggregations\":[\"Path\"]},\"start_project\":{\"name\":\"start_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"start_project(idea, send_to: str)\",\"aggregations\":[]}},\"compositions\":[\"Environment\"],\"aggregations\":[\"Team\",\"Context\",\"Path\",\"Role\"]}"}, {"id": "metagpt/team.py:Team:cost_manager"}, {"id": "metagpt/team.py:Team:env"}, {"id": "{\"name\":\"env\",\"type_\":\"Optional[Environment]\",\"default_\":\"\",\"description\":\"env : Optional[Environment]\",\"compositions\":[\"Environment\"]}"}, {"id": "metagpt/team.py:Team:idea"}, {"id": "{\"name\":\"idea\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"idea : str\",\"compositions\":[]}"}, {"id": "metagpt/team.py:Team:investment"}, {"id": "{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment : float\",\"compositions\":[]}"}, {"id": "metagpt/team.py:Team:model_config"}, {"id": "metagpt/team.py:Team:deserialize"}, {"id": "{\"name\":\"deserialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"'Team'\",\"description\":\"'Team'\",\"compositions\":[\"Team\"]},\"description\":\"deserialize(stg_path: Path, context: Context): 'Team'\",\"aggregations\":[\"Team\",\"Context\",\"Path\"]}"}, {"id": "metagpt/team.py:Team:hire"}, {"id": "{\"name\":\"hire\",\"args\":[{\"name\":\"roles\",\"type_\":\"list[Role]\",\"default_\":\"\",\"description\":\"roles: list[Role]\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"hire(roles: list[Role])\",\"aggregations\":[\"Role\"]}"}, {"id": "metagpt/team.py:Team:invest"}, {"id": "{\"name\":\"invest\",\"args\":[{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment: float\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"invest(investment: float)\",\"aggregations\":[]}"}, {"id": "metagpt/team.py:Team:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"n_round\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_round\",\"compositions\":[]},{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"\",\"default_\":\"\",\"description\":\"send_to\",\"compositions\":[]},{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(n_round, idea, send_to, auto_archive)\",\"aggregations\":[]}"}, {"id": "metagpt/team.py:Team:run_project"}, {"id": "{\"name\":\"run_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_project(idea, send_to: str)\",\"aggregations\":[]}"}, {"id": "metagpt/team.py:Team:serialize"}, {"id": "{\"name\":\"serialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"serialize(stg_path: Path)\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/team.py:Team:start_project"}, {"id": "{\"name\":\"start_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"start_project(idea, send_to: str)\",\"aggregations\":[]}"}, {"id": "?:Team"}, {"id": "metagpt/schema.py:TestingContext"}, {"id": "{\"name\":\"TestingContext\",\"package\":\"metagpt/schema.py:TestingContext\",\"attributes\":{\"code_doc\":{\"name\":\"code_doc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_doc\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"test_doc\":{\"name\":\"test_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"test_doc : Optional[Document]\",\"compositions\":[\"Document\"]}},\"methods\":{},\"compositions\":[\"Document\"],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:TestingContext:code_doc"}, {"id": "{\"name\":\"code_doc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_doc\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:TestingContext:filename"}, {"id": "metagpt/schema.py:TestingContext:test_doc"}, {"id": "{\"name\":\"test_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"test_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode"}, {"id": "{\"name\":\"ThoughtNode\",\"package\":\"metagpt/strategy/base.py:ThoughtNode\",\"attributes\":{\"id\":{\"name\":\"id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"id : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"valid_status\":{\"name\":\"valid_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"valid_status : bool\",\"compositions\":[]},\"value\":{\"name\":\"value\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"value : int\",\"compositions\":[]}},\"methods\":{\"update_valid_status\":{\"name\":\"update_valid_status\",\"args\":[{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_valid_status(status): None\",\"aggregations\":[]},\"update_value\":{\"name\":\"update_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_value(value): None\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:id"}, {"id": "{\"name\":\"id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"id : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:name"}, {"id": "metagpt/strategy/base.py:ThoughtNode:valid_status"}, {"id": "{\"name\":\"valid_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"valid_status : bool\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:value"}, {"id": "{\"name\":\"value\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"value : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:update_valid_status"}, {"id": "{\"name\":\"update_valid_status\",\"args\":[{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_valid_status(status): None\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtNode:update_value"}, {"id": "{\"name\":\"update_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_value(value): None\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"id": "{\"name\":\"ThoughtSolverBase\",\"package\":\"metagpt/strategy/tot.py:ThoughtSolverBase\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"Optional[ThoughtTree]\",\"default_\":\"\",\"description\":\"thought_tree : Optional[ThoughtTree]\",\"compositions\":[\"ThoughtTree\"]}},\"methods\":{\"evaluate_node\":{\"name\":\"evaluate_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"parent_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parent_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"evaluate_node(node, parent_value): None\",\"aggregations\":[]},\"generate_thoughts\":{\"name\":\"generate_thoughts\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"generate_thoughts(current_state, current_node): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]},\"select_nodes\":{\"name\":\"select_nodes\",\"args\":[{\"name\":\"thought_nodes\",\"type_\":\"List[ThoughtNode]\",\"default_\":\"\",\"description\":\"thought_nodes: List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"select_nodes(thought_nodes: List[ThoughtNode]): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]},\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]},\"update_solution\":{\"name\":\"update_solution\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_solution()\",\"aggregations\":[]}},\"compositions\":[\"ThoughtTree\"],\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:config"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:llm"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:model_config"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:thought_tree"}, {"id": "{\"name\":\"thought_tree\",\"type_\":\"Optional[ThoughtTree]\",\"default_\":\"\",\"description\":\"thought_tree : Optional[ThoughtTree]\",\"compositions\":[\"ThoughtTree\"]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:evaluate_node"}, {"id": "{\"name\":\"evaluate_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"parent_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parent_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"evaluate_node(node, parent_value): None\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:generate_thoughts"}, {"id": "{\"name\":\"generate_thoughts\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"generate_thoughts(current_state, current_node): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:select_nodes"}, {"id": "{\"name\":\"select_nodes\",\"args\":[{\"name\":\"thought_nodes\",\"type_\":\"List[ThoughtNode]\",\"default_\":\"\",\"description\":\"thought_nodes: List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"select_nodes(thought_nodes: List[ThoughtNode]): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:solve"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:update_solution"}, {"id": "{\"name\":\"update_solution\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_solution()\",\"aggregations\":[]}"}, {"id": "?:ThoughtTree"}, {"id": "?:ThoughtNode"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig"}, {"id": "{\"name\":\"ThoughtSolverConfig\",\"package\":\"metagpt/strategy/tot_schema.py:ThoughtSolverConfig\",\"attributes\":{\"evaluator\":{\"name\":\"evaluator\",\"type_\":\"\",\"default_\":\"\",\"description\":\"evaluator\",\"compositions\":[]},\"max_steps\":{\"name\":\"max_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_steps : int\",\"compositions\":[]},\"method_select\":{\"name\":\"method_select\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method_select : str\",\"compositions\":[]},\"n_generate_sample\":{\"name\":\"n_generate_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_generate_sample : int\",\"compositions\":[]},\"n_select_sample\":{\"name\":\"n_select_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_select_sample : int\",\"compositions\":[]},\"n_solution_sample\":{\"name\":\"n_solution_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_solution_sample : int\",\"compositions\":[]},\"parser\":{\"name\":\"parser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parser\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator"}, {"id": "{\"name\":\"evaluator\",\"type_\":\"\",\"default_\":\"\",\"description\":\"evaluator\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:max_steps"}, {"id": "{\"name\":\"max_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_steps : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:method_select"}, {"id": "{\"name\":\"method_select\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method_select : str\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_generate_sample"}, {"id": "{\"name\":\"n_generate_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_generate_sample : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_select_sample"}, {"id": "{\"name\":\"n_select_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_select_sample : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_solution_sample"}, {"id": "{\"name\":\"n_solution_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_solution_sample : int\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser"}, {"id": "{\"name\":\"parser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parser\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree"}, {"id": "{\"name\":\"ThoughtTree\",\"package\":\"metagpt/strategy/base.py:ThoughtTree\",\"attributes\":{\"all_nodes\":{\"name\":\"all_nodes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_nodes\",\"compositions\":[]}},\"methods\":{\"parse_node_path\":{\"name\":\"parse_node_path\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_node_path(node): List[str]\",\"aggregations\":[]},\"show\":{\"name\":\"show\",\"args\":[],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"show(): None\",\"aggregations\":[]},\"update_node\":{\"name\":\"update_node\",\"args\":[{\"name\":\"thought\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"thought: List[dict]\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"ThoughtNode\",\"default_\":\"\",\"description\":\"current_node: ThoughtNode\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"update_node(thought: List[dict], current_node: ThoughtNode): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}},\"compositions\":[],\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree:all_nodes"}, {"id": "{\"name\":\"all_nodes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_nodes\",\"compositions\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree:parse_node_path"}, {"id": "{\"name\":\"parse_node_path\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_node_path(node): List[str]\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree:show"}, {"id": "{\"name\":\"show\",\"args\":[],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"show(): None\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/base.py:ThoughtTree:update_node"}, {"id": "{\"name\":\"update_node\",\"args\":[{\"name\":\"thought\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"thought: List[dict]\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"ThoughtNode\",\"default_\":\"\",\"description\":\"current_node: ThoughtNode\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"update_node(thought: List[dict], current_node: ThoughtNode): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"id": "metagpt/utils/cost_manager.py:TokenCostManager"}, {"id": "{\"name\":\"TokenCostManager\",\"package\":\"metagpt/utils/cost_manager.py:TokenCostManager\",\"attributes\":{\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_completion_tokens\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_prompt_tokens\",\"compositions\":[]}},\"methods\":{\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/cost_manager.py:TokenCostManager:total_completion_tokens"}, {"id": "{\"name\":\"total_completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_completion_tokens\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:TokenCostManager:total_prompt_tokens"}, {"id": "{\"name\":\"total_prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_prompt_tokens\",\"compositions\":[]}"}, {"id": "metagpt/utils/cost_manager.py:TokenCostManager:update_cost"}, {"id": "metagpt/actions/action_node.py:ToolUse"}, {"id": "{\"name\":\"ToolUse\",\"package\":\"metagpt/actions/action_node.py:ToolUse\",\"attributes\":{\"tool_name\":{\"name\":\"tool_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tool_name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/action_node.py:ToolUse:tool_name"}, {"id": "{\"name\":\"tool_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tool_name : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/translator.py"}, {"id": "metagpt/tools/translator.py:Translator"}, {"id": "{\"name\":\"Translator\",\"package\":\"metagpt/tools/translator.py:Translator\",\"attributes\":{},\"methods\":{\"translate_prompt\":{\"name\":\"translate_prompt\",\"args\":[{\"name\":\"original\",\"type_\":\"\",\"default_\":\"\",\"description\":\"original\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"translate_prompt(original, lang)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/translator.py:Translator:translate_prompt"}, {"id": "{\"name\":\"translate_prompt\",\"args\":[{\"name\":\"original\",\"type_\":\"\",\"default_\":\"\",\"description\":\"original\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"translate_prompt(original, lang)\",\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought"}, {"id": "{\"name\":\"TreeofThought\",\"package\":\"metagpt/strategy/tot.py:TreeofThought\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"solver\":{\"name\":\"solver\",\"type_\":\"\",\"default_\":\"\",\"description\":\"solver\",\"compositions\":[]},\"strategy\":{\"name\":\"strategy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strategy\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:config"}, {"id": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"id": "{\"name\":\"solver\",\"type_\":\"\",\"default_\":\"\",\"description\":\"solver\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:strategy"}, {"id": "{\"name\":\"strategy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strategy\",\"compositions\":[]}"}, {"id": "metagpt/strategy/tot.py:TreeofThought:solve"}, {"id": "metagpt/roles/tutorial_assistant.py"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant"}, {"id": "{\"name\":\"TutorialAssistant\",\"package\":\"metagpt/roles/tutorial_assistant.py:TutorialAssistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"main_title\":{\"name\":\"main_title\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"main_title : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]},\"total_content\":{\"name\":\"total_content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"total_content : str\",\"compositions\":[]}},\"methods\":{\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:constraints"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:goal"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:language"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:main_title"}, {"id": "{\"name\":\"main_title\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"main_title : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:name"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:profile"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:topic"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:total_content"}, {"id": "{\"name\":\"total_content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"total_content : str\",\"compositions\":[]}"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:react"}, {"id": "metagpt/schema.py:UMLClassAttribute"}, {"id": "{\"name\":\"UMLClassAttribute\",\"package\":\"metagpt/schema.py:UMLClassAttribute\",\"attributes\":{\"default_value\":{\"name\":\"default_value\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_value : str\",\"compositions\":[]},\"value_type\":{\"name\":\"value_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"value_type : str\",\"compositions\":[]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassAttribute:default_value"}, {"id": "{\"name\":\"default_value\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_value : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UMLClassAttribute:value_type"}, {"id": "{\"name\":\"value_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"value_type : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UMLClassAttribute:get_mermaid"}, {"id": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassMeta"}, {"id": "{\"name\":\"UMLClassMeta\",\"package\":\"metagpt/schema.py:UMLClassMeta\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"visibility\":{\"name\":\"visibility\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"visibility : str\",\"compositions\":[]}},\"methods\":{\"name_to_visibility\":{\"name\":\"name_to_visibility\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"name_to_visibility(name: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassMeta:name"}, {"id": "metagpt/schema.py:UMLClassMeta:visibility"}, {"id": "{\"name\":\"visibility\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"visibility : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UMLClassMeta:name_to_visibility"}, {"id": "{\"name\":\"name_to_visibility\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"name_to_visibility(name: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassMethod"}, {"id": "{\"name\":\"UMLClassMethod\",\"package\":\"metagpt/schema.py:UMLClassMethod\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]},\"return_type\":{\"name\":\"return_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"return_type : str\",\"compositions\":[]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}},\"compositions\":[\"UMLClassAttribute\"],\"aggregations\":[]}"}, {"id": "metagpt/schema.py:UMLClassMethod:args"}, {"id": "{\"name\":\"args\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]}"}, {"id": "metagpt/schema.py:UMLClassMethod:return_type"}, {"id": "{\"name\":\"return_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"return_type : str\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UMLClassMethod:get_mermaid"}, {"id": "?:UMLClassAttribute"}, {"id": "metagpt/schema.py:UMLClassView"}, {"id": "{\"name\":\"UMLClassView\",\"package\":\"metagpt/schema.py:UMLClassView\",\"attributes\":{\"attributes\":{\"name\":\"attributes\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]},\"methods\":{\"name\":\"methods\",\"type_\":\"List[UMLClassMethod]\",\"default_\":\"\",\"description\":\"methods : List[UMLClassMethod]\",\"compositions\":[\"UMLClassMethod\"]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]},\"load_dot_class_info\":{\"name\":\"load_dot_class_info\",\"args\":[{\"name\":\"dot_class_info\",\"type_\":\"DotClassInfo\",\"default_\":\"\",\"description\":\"dot_class_info: DotClassInfo\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"UMLClassView\",\"description\":\"UMLClassView\",\"compositions\":[\"UMLClassView\"]},\"description\":\"load_dot_class_info(dot_class_info: DotClassInfo): UMLClassView\",\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}},\"compositions\":[\"UMLClassAttribute\",\"UMLClassMethod\"],\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}"}, {"id": "metagpt/schema.py:UMLClassView:attributes"}, {"id": "{\"name\":\"attributes\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]}"}, {"id": "metagpt/schema.py:UMLClassView:methods"}, {"id": "{\"name\":\"methods\",\"type_\":\"List[UMLClassMethod]\",\"default_\":\"\",\"description\":\"methods : List[UMLClassMethod]\",\"compositions\":[\"UMLClassMethod\"]}"}, {"id": "metagpt/schema.py:UMLClassView:get_mermaid"}, {"id": "metagpt/schema.py:UMLClassView:load_dot_class_info"}, {"id": "{\"name\":\"load_dot_class_info\",\"args\":[{\"name\":\"dot_class_info\",\"type_\":\"DotClassInfo\",\"default_\":\"\",\"description\":\"dot_class_info: DotClassInfo\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"UMLClassView\",\"description\":\"UMLClassView\",\"compositions\":[\"UMLClassView\"]},\"description\":\"load_dot_class_info(dot_class_info: DotClassInfo): UMLClassView\",\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}"}, {"id": "?:UMLClassMethod"}, {"id": "?:UMLClassView"}, {"id": "metagpt/tools/ut_writer.py"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator"}, {"id": "{\"name\":\"UTGenerator\",\"package\":\"metagpt/tools/ut_writer.py:UTGenerator\",\"attributes\":{\"chatgpt_method\":{\"name\":\"chatgpt_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chatgpt_method : str\",\"compositions\":[]},\"icl_sample\":{\"name\":\"icl_sample\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"icl_sample : str\",\"compositions\":[]},\"questions_path\":{\"name\":\"questions_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"questions_path : str\",\"compositions\":[]},\"swagger_file\":{\"name\":\"swagger_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"swagger_file : str\",\"compositions\":[]},\"template_prefix\":{\"name\":\"template_prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template_prefix : str\",\"compositions\":[]},\"ut_py_path\":{\"name\":\"ut_py_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ut_py_path : str\",\"compositions\":[]}},\"methods\":{\"ask_gpt_and_save\":{\"name\":\"ask_gpt_and_save\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tag: str\",\"compositions\":[]},{\"name\":\"fname\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"fname: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_gpt_and_save(question: str, tag: str, fname: str)\",\"aggregations\":[]},\"build_api_doc\":{\"name\":\"build_api_doc\",\"args\":[{\"name\":\"node\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"node: dict\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path: str\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_api_doc(node: dict, path: str, method: str): str\",\"aggregations\":[]},\"build_object_properties\":{\"name\":\"build_object_properties\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]},{\"name\":\"level\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"level: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_object_properties(node, prop_object_required, level: int): str\",\"aggregations\":[]},\"generate_ut\":{\"name\":\"generate_ut\",\"args\":[{\"name\":\"include_tags\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_tags\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"generate_ut(include_tags): bool\",\"aggregations\":[]},\"get_swagger_json\":{\"name\":\"get_swagger_json\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_swagger_json(): dict\",\"aggregations\":[]},\"get_tags_mapping\":{\"name\":\"get_tags_mapping\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_tags_mapping(): dict\",\"aggregations\":[]},\"gpt_msgs_to_code\":{\"name\":\"gpt_msgs_to_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"messages: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"gpt_msgs_to_code(messages: list): str\",\"aggregations\":[]},\"para_to_str\":{\"name\":\"para_to_str\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"prop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"para_to_str(name, prop, prop_object_required)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:chatgpt_method"}, {"id": "{\"name\":\"chatgpt_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chatgpt_method : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:icl_sample"}, {"id": "{\"name\":\"icl_sample\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"icl_sample : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:questions_path"}, {"id": "{\"name\":\"questions_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"questions_path : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:swagger_file"}, {"id": "{\"name\":\"swagger_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"swagger_file : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:template_prefix"}, {"id": "{\"name\":\"template_prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template_prefix : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:ut_py_path"}, {"id": "{\"name\":\"ut_py_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ut_py_path : str\",\"compositions\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:ask_gpt_and_save"}, {"id": "{\"name\":\"ask_gpt_and_save\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tag: str\",\"compositions\":[]},{\"name\":\"fname\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"fname: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_gpt_and_save(question: str, tag: str, fname: str)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:build_api_doc"}, {"id": "{\"name\":\"build_api_doc\",\"args\":[{\"name\":\"node\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"node: dict\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path: str\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_api_doc(node: dict, path: str, method: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:build_object_properties"}, {"id": "{\"name\":\"build_object_properties\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]},{\"name\":\"level\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"level: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_object_properties(node, prop_object_required, level: int): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:generate_ut"}, {"id": "{\"name\":\"generate_ut\",\"args\":[{\"name\":\"include_tags\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_tags\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"generate_ut(include_tags): bool\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:get_swagger_json"}, {"id": "{\"name\":\"get_swagger_json\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_swagger_json(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:get_tags_mapping"}, {"id": "{\"name\":\"get_tags_mapping\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_tags_mapping(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:gpt_msgs_to_code"}, {"id": "{\"name\":\"gpt_msgs_to_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"messages: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"gpt_msgs_to_code(messages: list): str\",\"aggregations\":[]}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:para_to_str"}, {"id": "{\"name\":\"para_to_str\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"prop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"para_to_str(name, prop, prop_object_required)\",\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Usage"}, {"id": "{\"name\":\"Usage\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:Usage\",\"attributes\":{\"prompt_tokens\":{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens : int\",\"compositions\":[]},\"total_tokens\":{\"name\":\"total_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_tokens : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Usage:prompt_tokens"}, {"id": "{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens : int\",\"compositions\":[]}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:Usage:total_tokens"}, {"id": "{\"name\":\"total_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_tokens : int\",\"compositions\":[]}"}, {"id": "metagpt/schema.py:UserMessage"}, {"id": "{\"name\":\"UserMessage\",\"package\":\"metagpt/schema.py:UserMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/add_requirement.py"}, {"id": "metagpt/actions/add_requirement.py:UserRequirement"}, {"id": "{\"name\":\"UserRequirement\",\"package\":\"metagpt/actions/add_requirement.py:UserRequirement\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo"}, {"id": "{\"name\":\"VisualDiGraphRepo\",\"package\":\"metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo\",\"attributes\":{},\"methods\":{\"get_mermaid_class_view\":{\"name\":\"get_mermaid_class_view\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid_class_view(): str\",\"aggregations\":[]},\"get_mermaid_sequence_views\":{\"name\":\"get_mermaid_sequence_views\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_views(): List[str, str]\",\"aggregations\":[]},\"load_from\":{\"name\":\"load_from\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_from(filename: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_class_view"}, {"id": "{\"name\":\"get_mermaid_class_view\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid_class_view(): str\",\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_views"}, {"id": "{\"name\":\"get_mermaid_sequence_views\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_views(): List[str, str]\",\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:load_from"}, {"id": "{\"name\":\"load_from\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_from(filename: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo"}, {"id": "{\"name\":\"VisualGraphRepo\",\"package\":\"metagpt/utils/visual_graph_repo.py:VisualGraphRepo\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_db\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db"}, {"id": "{\"name\":\"graph_db\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_db\",\"compositions\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient"}, {"id": "{\"name\":\"WDMHttpProxyClient\",\"package\":\"metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient\",\"attributes\":{},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(url)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:get"}, {"id": "{\"name\":\"get\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(url)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize"}, {"id": "{\"name\":\"WebBrowseAndSummarize\",\"package\":\"metagpt/actions/research.py:WebBrowseAndSummarize\",\"attributes\":{\"browse_func\":{\"name\":\"browse_func\",\"type_\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_\":\"\",\"description\":\"browse_func : Optional[Union[Callable[[list[str]], None], None]]\",\"compositions\":[\"Callable\"]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"web_browser_engine\":{\"name\":\"web_browser_engine\",\"type_\":\"Optional[WebBrowserEngine]\",\"default_\":\"\",\"description\":\"web_browser_engine : Optional[WebBrowserEngine]\",\"compositions\":[\"WebBrowserEngine\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(url: str): dict[str, str]\",\"aggregations\":[]}},\"compositions\":[\"Callable\",\"WebBrowserEngine\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:browse_func"}, {"id": "{\"name\":\"browse_func\",\"type_\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_\":\"\",\"description\":\"browse_func : Optional[Union[Callable[[list[str]], None], None]]\",\"compositions\":[\"Callable\"]}"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:desc"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:i_context"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:name"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine"}, {"id": "{\"name\":\"web_browser_engine\",\"type_\":\"Optional[WebBrowserEngine]\",\"default_\":\"\",\"description\":\"web_browser_engine : Optional[WebBrowserEngine]\",\"compositions\":[\"WebBrowserEngine\"]}"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(url: str): dict[str, str]\",\"aggregations\":[]}"}, {"id": "?:WebBrowserEngine"}, {"id": "metagpt/tools/web_browser_engine.py"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine"}, {"id": "{\"name\":\"WebBrowserEngine\",\"package\":\"metagpt/tools/web_browser_engine.py:WebBrowserEngine\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"run_func\":{\"name\":\"run_func\",\"type_\":\"Callable[...,Coroutine[Any,Any,WebPage\\\\|list[WebPage]]]\\\\|None\",\"default_\":\"\",\"description\":\"run_func : Callable[..., Coroutine[Any, Any, WebPage \\\\| list[WebPage]]] \\\\| None\",\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\",\"WebPage\\\\\",\"\\\\\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\",\"description\":\"WebPage\",\"compositions\":[\"WebPage\"]},\"description\":\"run(url: str): WebPage\",\"aggregations\":[\"WebPage\"]}},\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\",\"WebPage\\\\\",\"\\\\\"],\"aggregations\":[]}"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run_func"}, {"id": "{\"name\":\"run_func\",\"type_\":\"Callable[...,Coroutine[Any,Any,WebPage\\\\|list[WebPage]]]\\\\|None\",\"default_\":\"\",\"description\":\"run_func : Callable[..., Coroutine[Any, Any, WebPage \\\\| list[WebPage]]] \\\\| None\",\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\",\"WebPage\\\\\",\"\\\\\"]}"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\",\"description\":\"WebPage\",\"compositions\":[\"WebPage\"]},\"description\":\"run(url: str): WebPage\",\"aggregations\":[\"WebPage\"]}"}, {"id": "metagpt/tools:WebBrowserEngineType"}, {"id": "{\"name\":\"WebBrowserEngineType\",\"package\":\"metagpt/tools:WebBrowserEngineType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools:WebBrowserEngineType:name"}, {"id": "metagpt/utils/parse_html.py"}, {"id": "metagpt/utils/parse_html.py:WebPage"}, {"id": "{\"name\":\"WebPage\",\"package\":\"metagpt/utils/parse_html.py:WebPage\",\"attributes\":{\"html\":{\"name\":\"html\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"html : str\",\"compositions\":[]},\"inner_text\":{\"name\":\"inner_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"inner_text : str\",\"compositions\":[]},\"soup\":{\"name\":\"soup\",\"type_\":\"\",\"default_\":\"\",\"description\":\"soup\",\"compositions\":[]},\"title\":{\"name\":\"title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"title\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}},\"methods\":{\"get_links\":{\"name\":\"get_links\",\"args\":[],\"return_args\":{\"type_\":\"Generator[str,None,None]\",\"description\":\"Generator[str, None, None]\",\"compositions\":[\"Generator\"]},\"description\":\"get_links(): Generator[str, None, None]\",\"aggregations\":[\"Generator\"]}},\"compositions\":[],\"aggregations\":[\"Generator\"]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:html"}, {"id": "{\"name\":\"html\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"html : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:inner_text"}, {"id": "{\"name\":\"inner_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"inner_text : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:soup"}, {"id": "{\"name\":\"soup\",\"type_\":\"\",\"default_\":\"\",\"description\":\"soup\",\"compositions\":[]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:title"}, {"id": "{\"name\":\"title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"title\",\"compositions\":[]}"}, {"id": "metagpt/utils/parse_html.py:WebPage:url"}, {"id": "metagpt/utils/parse_html.py:WebPage:get_links"}, {"id": "{\"name\":\"get_links\",\"args\":[],\"return_args\":{\"type_\":\"Generator[str,None,None]\",\"description\":\"Generator[str, None, None]\",\"compositions\":[\"Generator\"]},\"description\":\"get_links(): Generator[str, None, None]\",\"aggregations\":[\"Generator\"]}"}, {"id": "?:Generator"}, {"id": "metagpt/tools/prompt_writer.py:WikiHowTemplate"}, {"id": "{\"name\":\"WikiHowTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:WikiHowTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"step\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"step: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"gen(question: str, step: str): list[str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/tools/prompt_writer.py:WikiHowTemplate:gen"}, {"id": "{\"name\":\"gen\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"step\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"step: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"gen(question: str, step: str): list[str]\",\"aggregations\":[]}"}, {"id": "metagpt/configs/workspace_config.py"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig"}, {"id": "{\"name\":\"WorkspaceConfig\",\"package\":\"metagpt/configs/workspace_config.py:WorkspaceConfig\",\"attributes\":{\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]},\"uid\":{\"name\":\"uid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"uid : str\",\"compositions\":[]},\"use_uid\":{\"name\":\"use_uid\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_uid : bool\",\"compositions\":[]}},\"methods\":{\"check_uid_and_update_path\":{\"name\":\"check_uid_and_update_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_uid_and_update_path()\",\"aggregations\":[]},\"check_workspace_path\":{\"name\":\"check_workspace_path\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_workspace_path(v)\",\"aggregations\":[]}},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:path"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:uid"}, {"id": "{\"name\":\"uid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"uid : str\",\"compositions\":[]}"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:use_uid"}, {"id": "{\"name\":\"use_uid\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_uid : bool\",\"compositions\":[]}"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_uid_and_update_path"}, {"id": "{\"name\":\"check_uid_and_update_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_uid_and_update_path()\",\"aggregations\":[]}"}, {"id": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_workspace_path"}, {"id": "{\"name\":\"check_workspace_path\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_workspace_path(v)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code.py"}, {"id": "metagpt/actions/write_code.py:WriteCode"}, {"id": "{\"name\":\"WriteCode\",\"package\":\"metagpt/actions/write_code.py:WriteCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"get_codes\":{\"name\":\"get_codes\",\"args\":[{\"name\":\"task_doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"task_doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"exclude\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"exclude: str\",\"compositions\":[]},{\"name\":\"project_repo\",\"type_\":\"ProjectRepo\",\"default_\":\"\",\"description\":\"project_repo: ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},{\"name\":\"use_inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_inc: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_codes(task_doc: Document, exclude: str, project_repo: ProjectRepo, use_inc: bool): str\",\"aggregations\":[\"ProjectRepo\",\"Document\"]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]},\"write_code\":{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_code(prompt): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"ProjectRepo\",\"Document\",\"CodingContext\"]}"}, {"id": "metagpt/actions/write_code.py:WriteCode:i_context"}, {"id": "metagpt/actions/write_code.py:WriteCode:name"}, {"id": "metagpt/actions/write_code.py:WriteCode:get_codes"}, {"id": "{\"name\":\"get_codes\",\"args\":[{\"name\":\"task_doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"task_doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"exclude\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"exclude: str\",\"compositions\":[]},{\"name\":\"project_repo\",\"type_\":\"ProjectRepo\",\"default_\":\"\",\"description\":\"project_repo: ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},{\"name\":\"use_inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_inc: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_codes(task_doc: Document, exclude: str, project_repo: ProjectRepo, use_inc: bool): str\",\"aggregations\":[\"ProjectRepo\",\"Document\"]}"}, {"id": "metagpt/actions/write_code.py:WriteCode:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]}"}, {"id": "metagpt/actions/write_code.py:WriteCode:write_code"}, {"id": "{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_code(prompt): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code_an_draft.py"}, {"id": "metagpt/actions/write_code_an_draft.py:WriteCodeAN"}, {"id": "{\"name\":\"WriteCodeAN\",\"package\":\"metagpt/actions/write_code_an_draft.py:WriteCodeAN\",\"attributes\":{},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code_an_draft.py:WriteCodeAN:run"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange"}, {"id": "{\"name\":\"WriteCodePlanAndChange\",\"package\":\"metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"get_old_codes\":{\"name\":\"get_old_codes\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_old_codes(): str\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:name"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:get_old_codes"}, {"id": "{\"name\":\"get_old_codes\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_old_codes(): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:run"}, {"id": "metagpt/actions/write_code_review.py"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview"}, {"id": "{\"name\":\"WriteCodeReview\",\"package\":\"metagpt/actions/write_code_review.py:WriteCodeReview\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]},\"write_code_review_and_rewrite\":{\"name\":\"write_code_review_and_rewrite\",\"args\":[{\"name\":\"context_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context_prompt\",\"compositions\":[]},{\"name\":\"cr_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cr_prompt\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filename\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code_review_and_rewrite(context_prompt, cr_prompt, filename)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"CodingContext\"]}"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview:name"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview:run"}, {"id": "metagpt/actions/write_code_review.py:WriteCodeReview:write_code_review_and_rewrite"}, {"id": "{\"name\":\"write_code_review_and_rewrite\",\"args\":[{\"name\":\"context_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context_prompt\",\"compositions\":[]},{\"name\":\"cr_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cr_prompt\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filename\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code_review_and_rewrite(context_prompt, cr_prompt, filename)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_tutorial.py"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent"}, {"id": "{\"name\":\"WriteContent\",\"package\":\"metagpt/actions/write_tutorial.py:WriteContent\",\"attributes\":{\"directory\":{\"name\":\"directory\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"directory : dict\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent:directory"}, {"id": "{\"name\":\"directory\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"directory : dict\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent:language"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent:name"}, {"id": "metagpt/actions/write_tutorial.py:WriteContent:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/design_api.py"}, {"id": "metagpt/actions/design_api.py:WriteDesign"}, {"id": "{\"name\":\"WriteDesign\",\"package\":\"metagpt/actions/design_api.py:WriteDesign\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"with_messages: Message\",\"compositions\":[\"Message\"]},{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages: Message, schema: str)\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/actions/design_api.py:WriteDesign:desc"}, {"id": "metagpt/actions/design_api.py:WriteDesign:i_context"}, {"id": "metagpt/actions/design_api.py:WriteDesign:name"}, {"id": "metagpt/actions/design_api.py:WriteDesign:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"with_messages: Message\",\"compositions\":[\"Message\"]},{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages: Message, schema: str)\",\"aggregations\":[\"Message\"]}"}, {"id": "metagpt/actions/write_tutorial.py:WriteDirectory"}, {"id": "{\"name\":\"WriteDirectory\",\"package\":\"metagpt/actions/write_tutorial.py:WriteDirectory\",\"attributes\":{\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"run(topic: str): Dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_tutorial.py:WriteDirectory:language"}, {"id": "metagpt/actions/write_tutorial.py:WriteDirectory:name"}, {"id": "metagpt/actions/write_tutorial.py:WriteDirectory:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"run(topic: str): Dict\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_docstring.py"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring"}, {"id": "{\"name\":\"WriteDocstring\",\"package\":\"metagpt/actions/write_docstring.py:WriteDocstring\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(code: str, system_text: str, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[]},\"write_docstring\":{\"name\":\"write_docstring\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"overwrite\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"overwrite: bool\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_docstring(filename: str \\\\| Path, overwrite: bool, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring:desc"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring:i_context"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(code: str, system_text: str, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_docstring.py:WriteDocstring:write_docstring"}, {"id": "{\"name\":\"write_docstring\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"overwrite\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"overwrite: bool\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_docstring(filename: str \\\\| Path, overwrite: bool, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"id": "metagpt/actions/write_prd.py"}, {"id": "metagpt/actions/write_prd.py:WritePRD"}, {"id": "{\"name\":\"WritePRD\",\"package\":\"metagpt/actions/write_prd.py:WritePRD\",\"attributes\":{\"project_name\":{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}},\"methods\":{\"get_related_docs\":{\"name\":\"get_related_docs\",\"args\":[{\"name\":\"req\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"req: Document\",\"compositions\":[\"Document\"]},{\"name\":\"docs\",\"type_\":\"list[Document]\",\"default_\":\"\",\"description\":\"docs: list[Document]\",\"compositions\":[\"Document\"]}],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_related_docs(req: Document, docs: list[Document]): list[Document]\",\"aggregations\":[\"Document\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionOutput\\\\|Message\",\"description\":\"ActionOutput \\\\| Message\",\"compositions\":[\"ActionOutput\\\\\",\"Message\"]},\"description\":\"run(with_messages): ActionOutput \\\\| Message\",\"aggregations\":[\"Message\",\"ActionOutput\\\\\"]}},\"compositions\":[],\"aggregations\":[\"Document\",\"Message\",\"ActionOutput\\\\\"]}"}, {"id": "metagpt/actions/write_prd.py:WritePRD:project_name"}, {"id": "metagpt/actions/write_prd.py:WritePRD:get_related_docs"}, {"id": "{\"name\":\"get_related_docs\",\"args\":[{\"name\":\"req\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"req: Document\",\"compositions\":[\"Document\"]},{\"name\":\"docs\",\"type_\":\"list[Document]\",\"default_\":\"\",\"description\":\"docs: list[Document]\",\"compositions\":[\"Document\"]}],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_related_docs(req: Document, docs: list[Document]): list[Document]\",\"aggregations\":[\"Document\"]}"}, {"id": "metagpt/actions/write_prd.py:WritePRD:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionOutput\\\\|Message\",\"description\":\"ActionOutput \\\\| Message\",\"compositions\":[\"ActionOutput\\\\\",\"Message\"]},\"description\":\"run(with_messages): ActionOutput \\\\| Message\",\"aggregations\":[\"Message\",\"ActionOutput\\\\\"]}"}, {"id": "?:ActionOutput\\"}, {"id": "metagpt/actions/write_prd_review.py"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview"}, {"id": "{\"name\":\"WritePRDReview\",\"package\":\"metagpt/actions/write_prd_review.py:WritePRDReview\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"prd : Optional[str]\",\"compositions\":[]},\"prd_review_prompt_template\":{\"name\":\"prd_review_prompt_template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_review_prompt_template : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:desc"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:i_context"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:name"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:prd"}, {"id": "{\"name\":\"prd\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"prd : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:prd_review_prompt_template"}, {"id": "{\"name\":\"prd_review_prompt_template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_review_prompt_template : str\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_prd_review.py:WritePRDReview:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_review.py"}, {"id": "metagpt/actions/write_review.py:WriteReview"}, {"id": "{\"name\":\"WriteReview\",\"package\":\"metagpt/actions/write_review.py:WriteReview\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_review.py:WriteReview:name"}, {"id": "metagpt/actions/write_review.py:WriteReview:run"}, {"id": "metagpt/actions/project_management.py"}, {"id": "metagpt/actions/project_management.py:WriteTasks"}, {"id": "{\"name\":\"WriteTasks\",\"package\":\"metagpt/actions/project_management.py:WriteTasks\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/actions/project_management.py:WriteTasks:i_context"}, {"id": "metagpt/actions/project_management.py:WriteTasks:name"}, {"id": "metagpt/actions/project_management.py:WriteTasks:run"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart"}, {"id": "{\"name\":\"WriteTeachingPlanPart\",\"package\":\"metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"rsp : Optional[str]\",\"compositions\":[]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}},\"methods\":{\"format_value\":{\"name\":\"format_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"format_value(value, context: Context)\",\"aggregations\":[\"Context\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_message)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Context\"]}"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:i_context"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:language"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:rsp"}, {"id": "{\"name\":\"rsp\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"rsp : Optional[str]\",\"compositions\":[]}"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:topic"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:format_value"}, {"id": "{\"name\":\"format_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"format_value(value, context: Context)\",\"aggregations\":[\"Context\"]}"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:run"}, {"id": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_message)\",\"aggregations\":[]}"}, {"id": "metagpt/actions/write_test.py"}, {"id": "metagpt/actions/write_test.py:WriteTest"}, {"id": "{\"name\":\"WriteTest\",\"package\":\"metagpt/actions/write_test.py:WriteTest\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[TestingContext]\",\"default_\":\"\",\"description\":\"i_context : Optional[TestingContext]\",\"compositions\":[\"TestingContext\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"TestingContext\",\"description\":\"TestingContext\",\"compositions\":[\"TestingContext\"]},\"description\":\"run(): TestingContext\",\"aggregations\":[\"TestingContext\"]},\"write_code\":{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code(prompt)\",\"aggregations\":[]}},\"compositions\":[\"TestingContext\"],\"aggregations\":[]}"}, {"id": "metagpt/actions/write_test.py:WriteTest:i_context"}, {"id": "{\"name\":\"i_context\",\"type_\":\"Optional[TestingContext]\",\"default_\":\"\",\"description\":\"i_context : Optional[TestingContext]\",\"compositions\":[\"TestingContext\"]}"}, {"id": "metagpt/actions/write_test.py:WriteTest:name"}, {"id": "metagpt/actions/write_test.py:WriteTest:run"}, {"id": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"TestingContext\",\"description\":\"TestingContext\",\"compositions\":[\"TestingContext\"]},\"description\":\"run(): TestingContext\",\"aggregations\":[\"TestingContext\"]}"}, {"id": "metagpt/actions/write_test.py:WriteTest:write_code"}, {"id": "{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code(prompt)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam"}, {"id": "{\"name\":\"WsParam\",\"package\":\"metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_secret\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"app_id\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"\",\"default_\":\"\",\"description\":\"host\",\"compositions\":[]},\"message\":{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message : NoneType\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]},\"spark_url\":{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}},\"methods\":{\"create_url\":{\"name\":\"create_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_key"}, {"id": "{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_secret"}, {"id": "{\"name\":\"api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_secret\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:app_id"}, {"id": "{\"name\":\"app_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"app_id\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:host"}, {"id": "{\"name\":\"host\",\"type_\":\"\",\"default_\":\"\",\"description\":\"host\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:message"}, {"id": "{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message : NoneType\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:path"}, {"id": "{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:spark_url"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:create_url"}, {"id": "{\"name\":\"create_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_url()\",\"aggregations\":[]}"}, {"id": "metagpt/utils/yaml_model.py"}, {"id": "metagpt/utils/yaml_model.py:YamlModel"}, {"id": "{\"name\":\"YamlModel\",\"package\":\"metagpt/utils/yaml_model.py:YamlModel\",\"attributes\":{\"extra_fields\":{\"name\":\"extra_fields\",\"type_\":\"Optional[Dict[str,str]]\",\"default_\":\"\",\"description\":\"extra_fields : Optional[Dict[str, str]]\",\"compositions\":[]}},\"methods\":{\"from_yaml_file\":{\"name\":\"from_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'YamlModel'\",\"description\":\"'YamlModel'\",\"compositions\":[\"YamlModel\"]},\"description\":\"from_yaml_file(file_path: Path): 'YamlModel'\",\"aggregations\":[\"Path\",\"YamlModel\"]},\"read_yaml\":{\"name\":\"read_yaml\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"read_yaml(file_path: Path, encoding: str): Dict\",\"aggregations\":[\"Path\"]},\"to_yaml_file\":{\"name\":\"to_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"to_yaml_file(file_path: Path, encoding: str): None\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\",\"YamlModel\"]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModel:extra_fields"}, {"id": "{\"name\":\"extra_fields\",\"type_\":\"Optional[Dict[str,str]]\",\"default_\":\"\",\"description\":\"extra_fields : Optional[Dict[str, str]]\",\"compositions\":[]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModel:from_yaml_file"}, {"id": "{\"name\":\"from_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'YamlModel'\",\"description\":\"'YamlModel'\",\"compositions\":[\"YamlModel\"]},\"description\":\"from_yaml_file(file_path: Path): 'YamlModel'\",\"aggregations\":[\"Path\",\"YamlModel\"]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModel:read_yaml"}, {"id": "{\"name\":\"read_yaml\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"read_yaml(file_path: Path, encoding: str): Dict\",\"aggregations\":[\"Path\"]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModel:to_yaml_file"}, {"id": "{\"name\":\"to_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"to_yaml_file(file_path: Path, encoding: str): None\",\"aggregations\":[\"Path\"]}"}, {"id": "?:YamlModel"}, {"id": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault"}, {"id": "{\"name\":\"YamlModelWithoutDefault\",\"package\":\"metagpt/utils/yaml_model.py:YamlModelWithoutDefault\",\"attributes\":{},\"methods\":{\"check_not_default_config\":{\"name\":\"check_not_default_config\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_not_default_config(values)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault:check_not_default_config"}, {"id": "{\"name\":\"check_not_default_config\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_not_default_config(values)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai_api.py"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM"}, {"id": "{\"name\":\"ZhiPuAILLM\",\"package\":\"metagpt/provider/zhipuai_api.py:ZhiPuAILLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"completion\":{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"completion(messages: list[dict], timeout): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:model"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:use_system_prompt"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion_text"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:completion"}, {"id": "{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"completion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuEvent"}, {"id": "{\"name\":\"ZhiPuEvent\",\"package\":\"metagpt/provider/zhipuai_api.py:ZhiPuEvent\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuEvent:name"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI"}, {"id": "{\"name\":\"ZhiPuModelAPI\",\"package\":\"metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI\",\"attributes\":{},\"methods\":{\"acreate\":{\"name\":\"acreate\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acreate(): dict\",\"aggregations\":[]},\"acreate_stream\":{\"name\":\"acreate_stream\",\"args\":[],\"return_args\":{\"type_\":\"AsyncSSEClient\",\"description\":\"AsyncSSEClient\",\"compositions\":[\"AsyncSSEClient\"]},\"description\":\"acreate_stream(): AsyncSSEClient\",\"aggregations\":[\"AsyncSSEClient\"]},\"arequest\":{\"name\":\"arequest\",\"args\":[{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream: bool\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"headers: dict\",\"compositions\":[]},{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"arequest(stream: bool, method: str, headers: dict, kwargs)\",\"aggregations\":[]},\"split_zhipu_api_url\":{\"name\":\"split_zhipu_api_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"split_zhipu_api_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"AsyncSSEClient\"]}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate"}, {"id": "{\"name\":\"acreate\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acreate(): dict\",\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate_stream"}, {"id": "{\"name\":\"acreate_stream\",\"args\":[],\"return_args\":{\"type_\":\"AsyncSSEClient\",\"description\":\"AsyncSSEClient\",\"compositions\":[\"AsyncSSEClient\"]},\"description\":\"acreate_stream(): AsyncSSEClient\",\"aggregations\":[\"AsyncSSEClient\"]}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:arequest"}, {"id": "{\"name\":\"arequest\",\"args\":[{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream: bool\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"headers: dict\",\"compositions\":[]},{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"arequest(stream: bool, method: str, headers: dict, kwargs)\",\"aggregations\":[]}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:split_zhipu_api_url"}, {"id": "{\"name\":\"split_zhipu_api_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"split_zhipu_api_url()\",\"aggregations\":[]}"}, {"id": "?:AsyncSSEClient"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill"}, {"id": "{\"name\":\"_AgentSkill\",\"package\":\"metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"id": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill:name"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView"}, {"id": "{\"name\":\"_VisualClassView\",\"package\":\"metagpt/utils/visual_graph_repo.py:_VisualClassView\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"generalizations\":{\"name\":\"generalizations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"generalizations : List[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"package\":{\"name\":\"package\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"package : str\",\"compositions\":[]},\"uml\":{\"name\":\"uml\",\"type_\":\"Optional[UMLClassView]\",\"default_\":\"\",\"description\":\"uml : Optional[UMLClassView]\",\"compositions\":[\"UMLClassView\"]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"align: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_mermaid(align: int)\",\"aggregations\":[]}},\"compositions\":[\"UMLClassView\"],\"aggregations\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:aggregations"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:compositions"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:generalizations"}, {"id": "{\"name\":\"generalizations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"generalizations : List[str]\",\"compositions\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:package"}, {"id": "{\"name\":\"package\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"package : str\",\"compositions\":[]}"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:uml"}, {"id": "{\"name\":\"uml\",\"type_\":\"Optional[UMLClassView]\",\"default_\":\"\",\"description\":\"uml : Optional[UMLClassView]\",\"compositions\":[\"UMLClassView\"]}"}, {"id": "metagpt/utils/visual_graph_repo.py:_VisualClassView:get_mermaid"}, {"id": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"align: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_mermaid(align: int)\",\"aggregations\":[]}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:_store"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_cost_manager"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:_cost_manager"}, {"id": "metagpt/utils/git_repository.py:GitRepository:_dependency"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:_git_repo"}, {"id": "metagpt/repo_parser.py:DotClassAttribute:_split_literal"}, {"id": "metagpt/repo_parser.py:DotClassMethod:_parse_name"}, {"id": "metagpt/repo_parser.py:DotClassMethod:_parse_args"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_file"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_expr"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_name"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_if"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_if_compare"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_variable"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_assign"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_classes"}, {"id": "metagpt/repo_parser.py:RepoParser:_parse_class_relationships"}, {"id": "metagpt/repo_parser.py:RepoParser:_split_class_line"}, {"id": "metagpt/repo_parser.py:RepoParser:_split_relationship_line"}, {"id": "metagpt/repo_parser.py:RepoParser:_get_label"}, {"id": "metagpt/repo_parser.py:RepoParser:_create_path_mapping"}, {"id": "metagpt/repo_parser.py:RepoParser:_repair_namespaces"}, {"id": "metagpt/repo_parser.py:RepoParser:_repair_ns"}, {"id": "metagpt/repo_parser.py:RepoParser:_find_root"}, {"id": "metagpt/repo_parser.py:is_func"}, {"id": "function"}, {"id": "metagpt/repo_parser.py:ast.Constant:\n@Time : 2023/11/17 17:58\n@Author : alexanderwu\n@File : repo_parser.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/17 17:58\\n@Author : alexanderwu\\n@File : repo_parser.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:module:__future__"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/repo_parser.py:names:['annotations']"}, {"id": "metagpt/repo_parser.py:ast"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:json"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:re"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:subprocess"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:module:pathlib"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/repo_parser.py:names:['Path']"}, {"id": "metagpt/repo_parser.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"id": "metagpt/repo_parser.py:names:['Dict', 'List', 'Optional']"}, {"id": "metagpt/repo_parser.py:pandas as pd"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"id": "metagpt/repo_parser.py:module:pydantic"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"field_validator\"]}}"}, {"id": "metagpt/repo_parser.py:names:['BaseModel', 'Field', 'field_validator']"}, {"id": "metagpt/repo_parser.py:module:metagpt.const"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"id": "metagpt/repo_parser.py:names:['AGGREGATION', 'COMPOSITION', 'GENERALIZATION']"}, {"id": "metagpt/repo_parser.py:module:metagpt.logs"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/repo_parser.py:names:['logger']"}, {"id": "metagpt/repo_parser.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"aread\"]}}"}, {"id": "metagpt/repo_parser.py:names:['any_to_str', 'aread']"}, {"id": "metagpt/repo_parser.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/repo_parser.py:names:['handle_exception']"}, {"id": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoFileInfo\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeBlockInfo\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":157,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassAttribute\"],\"properties\":{}}"}, {"id": "{\"lineno\":160,\"end_lineno\":172,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassInfo\"],\"properties\":{}}"}, {"id": "{\"lineno\":175,\"end_lineno\":179,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassRelationship\"],\"properties\":{}}"}, {"id": "{\"lineno\":182,\"end_lineno\":199,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotReturn\"],\"properties\":{}}"}, {"id": "{\"lineno\":202,\"end_lineno\":264,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassMethod\"],\"properties\":{}}"}, {"id": "{\"lineno\":267,\"end_lineno\":634,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":637,\"end_lineno\":638,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_func\"],\"properties\":{}}"}, {"id": "metagpt/startup.py"}, {"id": "metagpt/startup.py:generate_repo"}, {"id": "metagpt/startup.py:startup"}, {"id": "metagpt/startup.py:copy_config_to"}, {"id": "metagpt/startup.py:app"}, {"id": "global_variable"}, {"id": "metagpt/startup.py:asyncio"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/startup.py:shutil"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"id": "metagpt/startup.py:module:pathlib"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/startup.py:names:['Path']"}, {"id": "metagpt/startup.py:typer"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"typer\"],\"properties\":{}}"}, {"id": "metagpt/startup.py:module:metagpt.config2"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/startup.py:names:['config']"}, {"id": "metagpt/startup.py:module:metagpt.const"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"id": "metagpt/startup.py:names:['CONFIG_ROOT', 'METAGPT_ROOT']"}, {"id": "metagpt/startup.py:module:metagpt.context"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"id": "metagpt/startup.py:names:['Context']"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"app\"],\"properties\":{}}"}, {"id": "{\"lineno\":16,\"end_lineno\":68,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"generate_repo\"],\"properties\":{}}"}, {"id": "{\"lineno\":72,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"startup\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":136,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"copy_config_to\"],\"properties\":{}}"}, {"id": "metagpt/startup.py:__name__:__main__"}, {"id": "{\"lineno\":139,\"end_lineno\":140,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/subscription.py:asyncio"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/subscription.py:module:typing"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Awaitable\",\"Callable\"]}}"}, {"id": "metagpt/subscription.py:names:['AsyncGenerator', 'Awaitable', 'Callable']"}, {"id": "metagpt/subscription.py:module:pydantic"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/subscription.py:names:['BaseModel', 'ConfigDict', 'Field']"}, {"id": "metagpt/subscription.py:module:metagpt.logs"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/subscription.py:names:['logger']"}, {"id": "metagpt/subscription.py:module:metagpt.roles"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/subscription.py:names:['Role']"}, {"id": "metagpt/subscription.py:module:metagpt.schema"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/subscription.py:names:['Message']"}, {"id": "{\"lineno\":11,\"end_lineno\":100,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SubscriptionRunner\"],\"properties\":{}}"}, {"id": "metagpt/__init__.py"}, {"id": "metagpt/__init__.py:module:metagpt"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt\",\"names\":[\"_compat as _\"]}}"}, {"id": "metagpt/__init__.py:names:['_compat as _']"}, {"id": "metagpt/llm.py"}, {"id": "metagpt/llm.py:LLM"}, {"id": "metagpt/llm.py:ast.Constant:\n@Time : 2023/5/11 14:45\n@Author : alexanderwu\n@File : llm.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:45\\n@Author : alexanderwu\\n@File : llm.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/llm.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/llm.py:names:['Optional']"}, {"id": "metagpt/llm.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"id": "metagpt/llm.py:names:['LLMConfig']"}, {"id": "metagpt/llm.py:module:metagpt.context"}, {"id": "metagpt/llm.py:names:['Context']"}, {"id": "metagpt/llm.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/llm.py:names:['BaseLLM']"}, {"id": "{\"lineno\":15,\"end_lineno\":20,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"LLM\"],\"properties\":{}}"}, {"id": "metagpt/config2.py:merge_dict"}, {"id": "metagpt/config2.py:config"}, {"id": "metagpt/config2.py:ast.Constant:\n@Time : 2024/1/4 01:25\n@Author : alexanderwu\n@File : config2.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 01:25\\n@Author : alexanderwu\\n@File : config2.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/config2.py:os"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/config2.py:module:pathlib"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/config2.py:names:['Path']"}, {"id": "metagpt/config2.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Iterable\",\"List\",\"Literal\",\"Optional\"]}}"}, {"id": "metagpt/config2.py:names:['Dict', 'Iterable', 'List', 'Literal', 'Optional']"}, {"id": "metagpt/config2.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"id": "metagpt/config2.py:names:['BaseModel', 'model_validator']"}, {"id": "metagpt/config2.py:module:metagpt.configs.browser_config"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.browser_config\",\"names\":[\"BrowserConfig\"]}}"}, {"id": "metagpt/config2.py:names:['BrowserConfig']"}, {"id": "metagpt/config2.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/config2.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/config2.py:module:metagpt.configs.mermaid_config"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.mermaid_config\",\"names\":[\"MermaidConfig\"]}}"}, {"id": "metagpt/config2.py:names:['MermaidConfig']"}, {"id": "metagpt/config2.py:module:metagpt.configs.redis_config"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"id": "metagpt/config2.py:names:['RedisConfig']"}, {"id": "metagpt/config2.py:module:metagpt.configs.s3_config"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.s3_config\",\"names\":[\"S3Config\"]}}"}, {"id": "metagpt/config2.py:names:['S3Config']"}, {"id": "metagpt/config2.py:module:metagpt.configs.search_config"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.search_config\",\"names\":[\"SearchConfig\"]}}"}, {"id": "metagpt/config2.py:names:['SearchConfig']"}, {"id": "metagpt/config2.py:module:metagpt.configs.workspace_config"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.workspace_config\",\"names\":[\"WorkspaceConfig\"]}}"}, {"id": "metagpt/config2.py:names:['WorkspaceConfig']"}, {"id": "metagpt/config2.py:module:metagpt.const"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"id": "metagpt/config2.py:names:['CONFIG_ROOT', 'METAGPT_ROOT']"}, {"id": "metagpt/config2.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/config2.py:names:['YamlModel']"}, {"id": "{\"lineno\":25,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CLIParams\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":132,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Config\"],\"properties\":{}}"}, {"id": "{\"lineno\":135,\"end_lineno\":140,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"merge_dict\"],\"properties\":{}}"}, {"id": "{\"lineno\":143,\"end_lineno\":143,\"type_name\":\"ast.Assign\",\"tokens\":[\"config\"],\"properties\":{}}"}, {"id": "metagpt/team.py:Team:__init__"}, {"id": "metagpt/team.py:Team:_check_balance"}, {"id": "metagpt/team.py:Team:_save"}, {"id": "metagpt/team.py:ast.Constant:\n@Time : 2023/5/12 00:30\n@Author : alexanderwu\n@File : team.py\n@Modified By: mashenquan, 2023/11/27. Add an archiving operation after completing the project, as specified in\n Section 2.2.3.3 of RFC 135.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/12 00:30\\n@Author : alexanderwu\\n@File : team.py\\n@Modified By: mashenquan, 2023/11/27. Add an archiving operation after completing the project, as specified in\\n Section 2.2.3.3 of RFC 135.\\n\"],\"properties\":{}}"}, {"id": "metagpt/team.py:warnings"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"id": "metagpt/team.py:module:pathlib"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/team.py:names:['Path']"}, {"id": "metagpt/team.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"id": "metagpt/team.py:names:['Any', 'Optional']"}, {"id": "metagpt/team.py:module:pydantic"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/team.py:names:['BaseModel', 'ConfigDict', 'Field']"}, {"id": "metagpt/team.py:module:metagpt.actions"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/team.py:names:['UserRequirement']"}, {"id": "metagpt/team.py:module:metagpt.const"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\",\"SERDESER_PATH\"]}}"}, {"id": "metagpt/team.py:names:['MESSAGE_ROUTE_TO_ALL', 'SERDESER_PATH']"}, {"id": "metagpt/team.py:module:metagpt.context"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"id": "metagpt/team.py:names:['Context']"}, {"id": "metagpt/team.py:module:metagpt.environment"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment\",\"names\":[\"Environment\"]}}"}, {"id": "metagpt/team.py:names:['Environment']"}, {"id": "metagpt/team.py:module:metagpt.logs"}, {"id": "metagpt/team.py:names:['logger']"}, {"id": "metagpt/team.py:module:metagpt.roles"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/team.py:names:['Role']"}, {"id": "metagpt/team.py:module:metagpt.schema"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/team.py:names:['Message']"}, {"id": "metagpt/team.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"NoMoneyException\",\"read_json_file\",\"serialize_decorator\",\"write_json_file\"]}}"}, {"id": "metagpt/team.py:names:['NoMoneyException', 'read_json_file', 'serialize_decorator', 'write_json_file']"}, {"id": "{\"lineno\":32,\"end_lineno\":136,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Team\"],\"properties\":{}}"}, {"id": "metagpt/context.py:AttrDict:__init__"}, {"id": "metagpt/context.py:AttrDict:__getattr__"}, {"id": "metagpt/context.py:AttrDict:__setattr__"}, {"id": "metagpt/context.py:AttrDict:__delattr__"}, {"id": "metagpt/context.py:ast.Constant:\n@Time : 2024/1/4 16:32\n@Author : alexanderwu\n@File : context.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:32\\n@Author : alexanderwu\\n@File : context.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/context.py:os"}, {"id": "metagpt/context.py:module:pathlib"}, {"id": "metagpt/context.py:names:['Path']"}, {"id": "metagpt/context.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"id": "metagpt/context.py:names:['Any', 'Optional']"}, {"id": "metagpt/context.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\"]}}"}, {"id": "metagpt/context.py:names:['BaseModel', 'ConfigDict']"}, {"id": "metagpt/context.py:module:metagpt.config2"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"id": "metagpt/context.py:names:['Config']"}, {"id": "metagpt/context.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"id": "metagpt/context.py:names:['LLMConfig']"}, {"id": "metagpt/context.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/context.py:names:['BaseLLM']"}, {"id": "metagpt/context.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"create_llm_instance\"]}}"}, {"id": "metagpt/context.py:names:['create_llm_instance']"}, {"id": "metagpt/context.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"id": "metagpt/context.py:names:['CostManager']"}, {"id": "metagpt/context.py:module:metagpt.utils.git_repository"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"id": "metagpt/context.py:names:['GitRepository']"}, {"id": "metagpt/context.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/context.py:names:['ProjectRepo']"}, {"id": "{\"lineno\":23,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AttrDict\"],\"properties\":{}}"}, {"id": "{\"lineno\":55,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Context\"],\"properties\":{}}"}, {"id": "metagpt/logs.py"}, {"id": "metagpt/logs.py:define_log_level"}, {"id": "metagpt/logs.py:log_llm_stream"}, {"id": "metagpt/logs.py:set_llm_stream_logfunc"}, {"id": "metagpt/logs.py:logger"}, {"id": "metagpt/logs.py:_llm_stream_log"}, {"id": "metagpt/logs.py:ast.Constant:\n@Time : 2023/6/1 12:41\n@Author : alexanderwu\n@File : logs.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/1 12:41\\n@Author : alexanderwu\\n@File : logs.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/logs.py:sys"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/logs.py:module:datetime"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/logs.py:names:['datetime']"}, {"id": "metagpt/logs.py:module:functools"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"partial\"]}}"}, {"id": "metagpt/logs.py:names:['partial']"}, {"id": "metagpt/logs.py:module:loguru"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger as _logger\"]}}"}, {"id": "metagpt/logs.py:names:['logger as _logger']"}, {"id": "metagpt/logs.py:module:metagpt.const"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"METAGPT_ROOT\"]}}"}, {"id": "metagpt/logs.py:names:['METAGPT_ROOT']"}, {"id": "{\"lineno\":18,\"end_lineno\":26,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"define_log_level\"],\"properties\":{}}"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"logger\"],\"properties\":{}}"}, {"id": "{\"lineno\":32,\"end_lineno\":33,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_llm_stream\"],\"properties\":{}}"}, {"id": "{\"lineno\":36,\"end_lineno\":38,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"set_llm_stream_logfunc\"],\"properties\":{}}"}, {"id": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.Assign\",\"tokens\":[\"_llm_stream_log\"],\"properties\":{}}"}, {"id": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_df"}, {"id": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_langchain"}, {"id": "metagpt/document.py:Repo:_path"}, {"id": "metagpt/document.py:Repo:_set"}, {"id": "metagpt/document.py:validate_cols"}, {"id": "metagpt/document.py:read_data"}, {"id": "metagpt/document.py:ast.Constant:\n@Time : 2023/6/8 14:03\n@Author : alexanderwu\n@File : document.py\n@Desc : Classes and Operations Related to Files in the File System.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/8 14:03\\n@Author : alexanderwu\\n@File : document.py\\n@Desc : Classes and Operations Related to Files in the File System.\\n\"],\"properties\":{}}"}, {"id": "metagpt/document.py:module:enum"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/document.py:names:['Enum']"}, {"id": "metagpt/document.py:module:pathlib"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/document.py:names:['Path']"}, {"id": "metagpt/document.py:module:typing"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"id": "metagpt/document.py:names:['Optional', 'Union']"}, {"id": "metagpt/document.py:pandas as pd"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"id": "metagpt/document.py:module:langchain.document_loaders"}, {"id": "{\"lineno\":14,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.document_loaders\",\"names\":[\"TextLoader\",\"UnstructuredPDFLoader\",\"UnstructuredWordDocumentLoader\"]}}"}, {"id": "metagpt/document.py:names:['TextLoader', 'UnstructuredPDFLoader', 'UnstructuredWordDocumentLoader']"}, {"id": "metagpt/document.py:module:langchain.text_splitter"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.text_splitter\",\"names\":[\"CharacterTextSplitter\"]}}"}, {"id": "metagpt/document.py:names:['CharacterTextSplitter']"}, {"id": "metagpt/document.py:module:pydantic"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/document.py:names:['BaseModel', 'ConfigDict', 'Field']"}, {"id": "metagpt/document.py:module:tqdm"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tqdm\",\"names\":[\"tqdm\"]}}"}, {"id": "metagpt/document.py:names:['tqdm']"}, {"id": "metagpt/document.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"RepoParser\"]}}"}, {"id": "metagpt/document.py:names:['RepoParser']"}, {"id": "{\"lineno\":26,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"validate_cols\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":50,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_data\"],\"properties\":{}}"}, {"id": "{\"lineno\":53,\"end_lineno\":59,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocumentStatus\"],\"properties\":{}}"}, {"id": "{\"lineno\":62,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Document\"],\"properties\":{}}"}, {"id": "{\"lineno\":114,\"end_lineno\":161,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IndexableDocument\"],\"properties\":{}}"}, {"id": "{\"lineno\":164,\"end_lineno\":168,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoMetadata\"],\"properties\":{}}"}, {"id": "{\"lineno\":171,\"end_lineno\":235,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Repo\"],\"properties\":{}}"}, {"id": "metagpt/environment.py:ast.Constant:\n@Time : 2023/5/11 22:12\n@Author : alexanderwu\n@File : environment.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\n 1. Remove the functionality of `Environment` class as a public message buffer.\n 2. Standardize the message forwarding behavior of the `Environment` class.\n 3. Add the `is_idle` property.\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\n functionality is to be consolidated into the `Environment` class.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":13,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 22:12\\n@Author : alexanderwu\\n@File : environment.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\\n 1. Remove the functionality of `Environment` class as a public message buffer.\\n 2. Standardize the message forwarding behavior of the `Environment` class.\\n 3. Add the `is_idle` property.\\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\\n functionality is to be consolidated into the `Environment` class.\\n\"],\"properties\":{}}"}, {"id": "metagpt/environment.py:asyncio"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/environment.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Iterable\",\"Set\"]}}"}, {"id": "metagpt/environment.py:names:['Iterable', 'Set']"}, {"id": "metagpt/environment.py:module:pydantic"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"id": "metagpt/environment.py:names:['BaseModel', 'ConfigDict', 'Field', 'SerializeAsAny', 'model_validator']"}, {"id": "metagpt/environment.py:module:metagpt.context"}, {"id": "metagpt/environment.py:names:['Context']"}, {"id": "metagpt/environment.py:module:metagpt.logs"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/environment.py:names:['logger']"}, {"id": "metagpt/environment.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/environment.py:names:['Role']"}, {"id": "metagpt/environment.py:module:metagpt.schema"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/environment.py:names:['Message']"}, {"id": "metagpt/environment.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"is_send_to\"]}}"}, {"id": "metagpt/environment.py:names:['is_send_to']"}, {"id": "{\"lineno\":26,\"end_lineno\":131,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Environment\"],\"properties\":{}}"}, {"id": "metagpt/_compat.py"}, {"id": "metagpt/_compat.py:platform"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"id": "metagpt/_compat.py:sys"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/_compat.py:warnings"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"id": "metagpt/_compat.py:n:a:m:e:p:l:a:t:f:o:r:m:.:s:y:s:t:e:m"}, {"id": "{\"lineno\":5,\"end_lineno\":23,\"type_name\":\"ast.If\",\"tokens\":[\"n\",\"a\",\"m\",\"e\",\"p\",\"l\",\"a\",\"t\",\"f\",\"o\",\"r\",\"m\",\".\",\"s\",\"y\",\"s\",\"t\",\"e\",\"m\"],\"properties\":{}}"}, {"id": "metagpt/context_mixin.py:ContextMixin:__init__"}, {"id": "metagpt/context_mixin.py:ast.Constant:\n@Time : 2024/1/11 17:25\n@Author : alexanderwu\n@File : context_mixin.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/11 17:25\\n@Author : alexanderwu\\n@File : context_mixin.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/context_mixin.py:module:typing"}, {"id": "metagpt/context_mixin.py:names:['Optional']"}, {"id": "metagpt/context_mixin.py:module:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/context_mixin.py:names:['BaseModel', 'ConfigDict', 'Field']"}, {"id": "metagpt/context_mixin.py:module:metagpt.config2"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"id": "metagpt/context_mixin.py:names:['Config']"}, {"id": "metagpt/context_mixin.py:module:metagpt.context"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"id": "metagpt/context_mixin.py:names:['Context']"}, {"id": "metagpt/context_mixin.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/context_mixin.py:names:['BaseLLM']"}, {"id": "{\"lineno\":17,\"end_lineno\":102,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ContextMixin\"],\"properties\":{}}"}, {"id": "metagpt/const.py"}, {"id": "metagpt/const.py:get_metagpt_package_root"}, {"id": "metagpt/const.py:get_metagpt_root"}, {"id": "metagpt/const.py:CONFIG_ROOT"}, {"id": "metagpt/const.py:METAGPT_ROOT"}, {"id": "metagpt/const.py:DEFAULT_WORKSPACE_ROOT"}, {"id": "metagpt/const.py:EXAMPLE_PATH"}, {"id": "metagpt/const.py:DATA_PATH"}, {"id": "metagpt/const.py:TEST_DATA_PATH"}, {"id": "metagpt/const.py:RESEARCH_PATH"}, {"id": "metagpt/const.py:TUTORIAL_PATH"}, {"id": "metagpt/const.py:INVOICE_OCR_TABLE_PATH"}, {"id": "metagpt/const.py:UT_PATH"}, {"id": "metagpt/const.py:SWAGGER_PATH"}, {"id": "metagpt/const.py:UT_PY_PATH"}, {"id": "metagpt/const.py:API_QUESTIONS_PATH"}, {"id": "metagpt/const.py:SERDESER_PATH"}, {"id": "metagpt/const.py:TMP"}, {"id": "metagpt/const.py:SOURCE_ROOT"}, {"id": "metagpt/const.py:PROMPT_PATH"}, {"id": "metagpt/const.py:SKILL_DIRECTORY"}, {"id": "metagpt/const.py:MEM_TTL"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_FROM"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_TO"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_CAUSE_BY"}, {"id": "metagpt/const.py:MESSAGE_META_ROLE"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_TO_ALL"}, {"id": "metagpt/const.py:MESSAGE_ROUTE_TO_NONE"}, {"id": "metagpt/const.py:REQUIREMENT_FILENAME"}, {"id": "metagpt/const.py:BUGFIX_FILENAME"}, {"id": "metagpt/const.py:PACKAGE_REQUIREMENTS_FILENAME"}, {"id": "metagpt/const.py:CODE_PLAN_AND_CHANGE_FILENAME"}, {"id": "metagpt/const.py:DOCS_FILE_REPO"}, {"id": "metagpt/const.py:PRDS_FILE_REPO"}, {"id": "metagpt/const.py:SYSTEM_DESIGN_FILE_REPO"}, {"id": "metagpt/const.py:TASK_FILE_REPO"}, {"id": "metagpt/const.py:CODE_PLAN_AND_CHANGE_FILE_REPO"}, {"id": "metagpt/const.py:COMPETITIVE_ANALYSIS_FILE_REPO"}, {"id": "metagpt/const.py:DATA_API_DESIGN_FILE_REPO"}, {"id": "metagpt/const.py:SEQ_FLOW_FILE_REPO"}, {"id": "metagpt/const.py:SYSTEM_DESIGN_PDF_FILE_REPO"}, {"id": "metagpt/const.py:PRD_PDF_FILE_REPO"}, {"id": "metagpt/const.py:TASK_PDF_FILE_REPO"}, {"id": "metagpt/const.py:CODE_PLAN_AND_CHANGE_PDF_FILE_REPO"}, {"id": "metagpt/const.py:TEST_CODES_FILE_REPO"}, {"id": "metagpt/const.py:TEST_OUTPUTS_FILE_REPO"}, {"id": "metagpt/const.py:CODE_SUMMARIES_FILE_REPO"}, {"id": "metagpt/const.py:CODE_SUMMARIES_PDF_FILE_REPO"}, {"id": "metagpt/const.py:RESOURCES_FILE_REPO"}, {"id": "metagpt/const.py:SD_OUTPUT_FILE_REPO"}, {"id": "metagpt/const.py:GRAPH_REPO_FILE_REPO"}, {"id": "metagpt/const.py:VISUAL_GRAPH_REPO_FILE_REPO"}, {"id": "metagpt/const.py:CLASS_VIEW_FILE_REPO"}, {"id": "metagpt/const.py:YAPI_URL"}, {"id": "metagpt/const.py:DEFAULT_LANGUAGE"}, {"id": "metagpt/const.py:DEFAULT_MAX_TOKENS"}, {"id": "metagpt/const.py:COMMAND_TOKENS"}, {"id": "metagpt/const.py:BRAIN_MEMORY"}, {"id": "metagpt/const.py:SKILL_PATH"}, {"id": "metagpt/const.py:SERPER_API_KEY"}, {"id": "metagpt/const.py:DEFAULT_TOKEN_SIZE"}, {"id": "metagpt/const.py:BASE64_FORMAT"}, {"id": "metagpt/const.py:REDIS_KEY"}, {"id": "metagpt/const.py:LLM_API_TIMEOUT"}, {"id": "metagpt/const.py:IGNORED_MESSAGE_ID"}, {"id": "metagpt/const.py:GENERALIZATION"}, {"id": "metagpt/const.py:COMPOSITION"}, {"id": "metagpt/const.py:AGGREGATION"}, {"id": "metagpt/const.py:ast.Constant:\n@Time : 2023/5/1 11:59\n@Author : alexanderwu\n@File : const.py\n@Modified By: mashenquan, 2023-11-1. According to Section 2.2.1 and 2.2.2 of RFC 116, added key definitions for\n common properties in the Message.\n@Modified By: mashenquan, 2023-11-27. Defines file repository paths according to Section 2.2.3.4 of RFC 135.\n@Modified By: mashenquan, 2023/12/5. Add directories for code summarization..\n"}, {"id": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/1 11:59\\n@Author : alexanderwu\\n@File : const.py\\n@Modified By: mashenquan, 2023-11-1. According to Section 2.2.1 and 2.2.2 of RFC 116, added key definitions for\\n common properties in the Message.\\n@Modified By: mashenquan, 2023-11-27. Defines file repository paths according to Section 2.2.3.4 of RFC 135.\\n@Modified By: mashenquan, 2023/12/5. Add directories for code summarization..\\n\"],\"properties\":{}}"}, {"id": "metagpt/const.py:os"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/const.py:module:pathlib"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/const.py:names:['Path']"}, {"id": "metagpt/const.py:module:loguru"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/const.py:names:['logger']"}, {"id": "metagpt/const.py:metagpt"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt\"],\"properties\":{}}"}, {"id": "{\"lineno\":20,\"end_lineno\":30,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_metagpt_package_root\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":43,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_metagpt_root\"],\"properties\":{}}"}, {"id": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONFIG_ROOT\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"METAGPT_ROOT\"],\"properties\":{}}"}, {"id": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_WORKSPACE_ROOT\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXAMPLE_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":52,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":53,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_DATA_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":54,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":55,\"end_lineno\":55,\"type_name\":\"ast.Assign\",\"tokens\":[\"TUTORIAL_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":56,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"INVOICE_OCR_TABLE_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"UT_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":59,\"end_lineno\":59,\"type_name\":\"ast.Assign\",\"tokens\":[\"SWAGGER_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"UT_PY_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":61,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"API_QUESTIONS_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":63,\"type_name\":\"ast.Assign\",\"tokens\":[\"SERDESER_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":65,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"TMP\"],\"properties\":{}}"}, {"id": "{\"lineno\":67,\"end_lineno\":67,\"type_name\":\"ast.Assign\",\"tokens\":[\"SOURCE_ROOT\"],\"properties\":{}}"}, {"id": "{\"lineno\":68,\"end_lineno\":68,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":69,\"end_lineno\":69,\"type_name\":\"ast.Assign\",\"tokens\":[\"SKILL_DIRECTORY\"],\"properties\":{}}"}, {"id": "{\"lineno\":73,\"end_lineno\":73,\"type_name\":\"ast.Assign\",\"tokens\":[\"MEM_TTL\"],\"properties\":{}}"}, {"id": "{\"lineno\":75,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_FROM\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO\"],\"properties\":{}}"}, {"id": "{\"lineno\":77,\"end_lineno\":77,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_CAUSE_BY\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":78,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_META_ROLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":79,\"end_lineno\":79,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO_ALL\"],\"properties\":{}}"}, {"id": "{\"lineno\":80,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO_NONE\"],\"properties\":{}}"}, {"id": "{\"lineno\":82,\"end_lineno\":82,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_FILENAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":83,\"end_lineno\":83,\"type_name\":\"ast.Assign\",\"tokens\":[\"BUGFIX_FILENAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":84,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"PACKAGE_REQUIREMENTS_FILENAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":85,\"end_lineno\":85,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_FILENAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":87,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"DOCS_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":88,\"end_lineno\":88,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRDS_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":89,\"end_lineno\":89,\"type_name\":\"ast.Assign\",\"tokens\":[\"SYSTEM_DESIGN_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":90,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":91,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":92,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_ANALYSIS_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":93,\"end_lineno\":93,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_API_DESIGN_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":94,\"end_lineno\":94,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEQ_FLOW_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":95,\"end_lineno\":95,\"type_name\":\"ast.Assign\",\"tokens\":[\"SYSTEM_DESIGN_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":96,\"end_lineno\":96,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRD_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":97,\"end_lineno\":97,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":98,\"end_lineno\":98,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":99,\"end_lineno\":99,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_CODES_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":100,\"end_lineno\":100,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_OUTPUTS_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":101,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_SUMMARIES_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":102,\"end_lineno\":102,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_SUMMARIES_PDF_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":103,\"end_lineno\":103,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESOURCES_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":104,\"end_lineno\":104,\"type_name\":\"ast.Assign\",\"tokens\":[\"SD_OUTPUT_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":105,\"end_lineno\":105,\"type_name\":\"ast.Assign\",\"tokens\":[\"GRAPH_REPO_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":106,\"end_lineno\":106,\"type_name\":\"ast.Assign\",\"tokens\":[\"VISUAL_GRAPH_REPO_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":107,\"end_lineno\":107,\"type_name\":\"ast.Assign\",\"tokens\":[\"CLASS_VIEW_FILE_REPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":109,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"YAPI_URL\"],\"properties\":{}}"}, {"id": "{\"lineno\":111,\"end_lineno\":111,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_LANGUAGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":112,\"end_lineno\":112,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_MAX_TOKENS\"],\"properties\":{}}"}, {"id": "{\"lineno\":113,\"end_lineno\":113,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMAND_TOKENS\"],\"properties\":{}}"}, {"id": "{\"lineno\":114,\"end_lineno\":114,\"type_name\":\"ast.Assign\",\"tokens\":[\"BRAIN_MEMORY\"],\"properties\":{}}"}, {"id": "{\"lineno\":115,\"end_lineno\":115,\"type_name\":\"ast.Assign\",\"tokens\":[\"SKILL_PATH\"],\"properties\":{}}"}, {"id": "{\"lineno\":116,\"end_lineno\":116,\"type_name\":\"ast.Assign\",\"tokens\":[\"SERPER_API_KEY\"],\"properties\":{}}"}, {"id": "{\"lineno\":117,\"end_lineno\":117,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_TOKEN_SIZE\"],\"properties\":{}}"}, {"id": "{\"lineno\":120,\"end_lineno\":120,\"type_name\":\"ast.Assign\",\"tokens\":[\"BASE64_FORMAT\"],\"properties\":{}}"}, {"id": "{\"lineno\":123,\"end_lineno\":123,\"type_name\":\"ast.Assign\",\"tokens\":[\"REDIS_KEY\"],\"properties\":{}}"}, {"id": "{\"lineno\":124,\"end_lineno\":124,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_API_TIMEOUT\"],\"properties\":{}}"}, {"id": "{\"lineno\":127,\"end_lineno\":127,\"type_name\":\"ast.Assign\",\"tokens\":[\"IGNORED_MESSAGE_ID\"],\"properties\":{}}"}, {"id": "{\"lineno\":130,\"end_lineno\":130,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERALIZATION\"],\"properties\":{}}"}, {"id": "{\"lineno\":131,\"end_lineno\":131,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPOSITION\"],\"properties\":{}}"}, {"id": "{\"lineno\":132,\"end_lineno\":132,\"type_name\":\"ast.Assign\",\"tokens\":[\"AGGREGATION\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:SerializationMixin:__serialize_with_class_type__"}, {"id": "metagpt/schema.py:SerializationMixin:__convert_to_real_type__"}, {"id": "metagpt/schema.py:SerializationMixin:__init_subclass__"}, {"id": "metagpt/schema.py:Document:__str__"}, {"id": "metagpt/schema.py:Document:__repr__"}, {"id": "metagpt/schema.py:Message:__init__"}, {"id": "metagpt/schema.py:Message:__setattr__"}, {"id": "metagpt/schema.py:Message:__str__"}, {"id": "metagpt/schema.py:Message:__repr__"}, {"id": "metagpt/schema.py:UserMessage:__init__"}, {"id": "metagpt/schema.py:SystemMessage:__init__"}, {"id": "metagpt/schema.py:AIMessage:__init__"}, {"id": "metagpt/schema.py:CodeSummarizeContext:__hash__"}, {"id": "metagpt/schema.py:T"}, {"id": "metagpt/schema.py:ast.Constant:\n@Time : 2023/5/8 22:12\n@Author : alexanderwu\n@File : schema.py\n@Modified By: mashenquan, 2023-10-31. According to Chapter 2.2.1 of RFC 116:\n Replanned the distribution of responsibilities and functional positioning of `Message` class attributes.\n@Modified By: mashenquan, 2023/11/22.\n 1. Add `Document` and `Documents` for `FileRepository` in Section 2.2.3.4 of RFC 135.\n 2. Encapsulate the common key-values set to pydantic structures to standardize and unify parameter passing\n between actions.\n 3. Add `id` to `Message` according to Section 2.2.3.1.1 of RFC 135.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/8 22:12\\n@Author : alexanderwu\\n@File : schema.py\\n@Modified By: mashenquan, 2023-10-31. According to Chapter 2.2.1 of RFC 116:\\n Replanned the distribution of responsibilities and functional positioning of `Message` class attributes.\\n@Modified By: mashenquan, 2023/11/22.\\n 1. Add `Document` and `Documents` for `FileRepository` in Section 2.2.3.4 of RFC 135.\\n 2. Encapsulate the common key-values set to pydantic structures to standardize and unify parameter passing\\n between actions.\\n 3. Add `id` to `Message` according to Section 2.2.3.1.1 of RFC 135.\\n\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:module:__future__"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/schema.py:names:['annotations']"}, {"id": "metagpt/schema.py:asyncio"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:json"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:os.path"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.Import\",\"tokens\":[\"os.path\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:uuid"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"id": "metagpt/schema.py:module:abc"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"id": "metagpt/schema.py:names:['ABC']"}, {"id": "metagpt/schema.py:module:asyncio"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"asyncio\",\"names\":[\"Queue\",\"QueueEmpty\",\"wait_for\"]}}"}, {"id": "metagpt/schema.py:names:['Queue', 'QueueEmpty', 'wait_for']"}, {"id": "metagpt/schema.py:module:json"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"id": "metagpt/schema.py:names:['JSONDecodeError']"}, {"id": "metagpt/schema.py:module:pathlib"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/schema.py:names:['Path']"}, {"id": "metagpt/schema.py:module:typing"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Iterable\",\"List\",\"Optional\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"id": "metagpt/schema.py:names:['Any', 'Dict', 'Iterable', 'List', 'Optional', 'Type', 'TypeVar', 'Union']"}, {"id": "metagpt/schema.py:module:pydantic"}, {"id": "{\"lineno\":28,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"PrivateAttr\",\"field_serializer\",\"field_validator\",\"model_serializer\",\"model_validator\"]}}"}, {"id": "metagpt/schema.py:names:['BaseModel', 'ConfigDict', 'Field', 'PrivateAttr', 'field_serializer', 'field_validator', 'model_serializer', 'model_validator']"}, {"id": "metagpt/schema.py:module:metagpt.const"}, {"id": "{\"lineno\":39,\"end_lineno\":48,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILENAME\",\"MESSAGE_ROUTE_CAUSE_BY\",\"MESSAGE_ROUTE_FROM\",\"MESSAGE_ROUTE_TO\",\"MESSAGE_ROUTE_TO_ALL\",\"PRDS_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"id": "metagpt/schema.py:names:['CODE_PLAN_AND_CHANGE_FILENAME', 'MESSAGE_ROUTE_CAUSE_BY', 'MESSAGE_ROUTE_FROM', 'MESSAGE_ROUTE_TO', 'MESSAGE_ROUTE_TO_ALL', 'PRDS_FILE_REPO', 'SYSTEM_DESIGN_FILE_REPO', 'TASK_FILE_REPO']"}, {"id": "metagpt/schema.py:module:metagpt.logs"}, {"id": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/schema.py:names:['logger']"}, {"id": "metagpt/schema.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":50,\"end_lineno\":50,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\"]}}"}, {"id": "metagpt/schema.py:names:['DotClassInfo']"}, {"id": "metagpt/schema.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\",\"import_class\"]}}"}, {"id": "metagpt/schema.py:names:['any_to_str', 'any_to_str_set', 'import_class']"}, {"id": "metagpt/schema.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":52,\"end_lineno\":52,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/schema.py:names:['handle_exception']"}, {"id": "metagpt/schema.py:module:metagpt.utils.serialize"}, {"id": "{\"lineno\":53,\"end_lineno\":57,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"actionoutout_schema_to_mapping\",\"actionoutput_mapping_to_str\",\"actionoutput_str_to_mapping\"]}}"}, {"id": "metagpt/schema.py:names:['actionoutout_schema_to_mapping', 'actionoutput_mapping_to_str', 'actionoutput_str_to_mapping']"}, {"id": "{\"lineno\":60,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerializationMixin\"],\"properties\":{}}"}, {"id": "{\"lineno\":122,\"end_lineno\":124,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SimpleMessage\"],\"properties\":{}}"}, {"id": "{\"lineno\":127,\"end_lineno\":156,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Document\"],\"properties\":{}}"}, {"id": "{\"lineno\":159,\"end_lineno\":186,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Documents\"],\"properties\":{}}"}, {"id": "{\"lineno\":189,\"end_lineno\":304,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Message\"],\"properties\":{}}"}, {"id": "{\"lineno\":307,\"end_lineno\":313,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UserMessage\"],\"properties\":{}}"}, {"id": "{\"lineno\":316,\"end_lineno\":322,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SystemMessage\"],\"properties\":{}}"}, {"id": "{\"lineno\":325,\"end_lineno\":331,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AIMessage\"],\"properties\":{}}"}, {"id": "{\"lineno\":334,\"end_lineno\":403,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MessageQueue\"],\"properties\":{}}"}, {"id": "{\"lineno\":407,\"end_lineno\":407,\"type_name\":\"ast.Assign\",\"tokens\":[\"T\"],\"properties\":{}}"}, {"id": "{\"lineno\":410,\"end_lineno\":415,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":418,\"end_lineno\":422,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodingContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":425,\"end_lineno\":428,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TestingContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":431,\"end_lineno\":441,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCodeContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":444,\"end_lineno\":447,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCodeResult\"],\"properties\":{}}"}, {"id": "{\"lineno\":450,\"end_lineno\":469,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeSummarizeContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":472,\"end_lineno\":473,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BugFixContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":476,\"end_lineno\":497,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodePlanAndChangeContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":501,\"end_lineno\":513,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassMeta\"],\"properties\":{}}"}, {"id": "{\"lineno\":516,\"end_lineno\":536,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassAttribute\"],\"properties\":{}}"}, {"id": "{\"lineno\":539,\"end_lineno\":553,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassMethod\"],\"properties\":{}}"}, {"id": "{\"lineno\":556,\"end_lineno\":583,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassView\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_image.py"}, {"id": "metagpt/learn/text_to_image.py:text_to_image"}, {"id": "metagpt/learn/text_to_image.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : text_to_image.py\n@Desc : Text-to-Image skill, which provides text-to-image functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : text_to_image.py\\n@Desc : Text-to-Image skill, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_image.py:base64"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_image.py:metagpt.config2"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.config2"}, {"id": "metagpt/learn/text_to_image.py:names:['Config']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.const"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['BASE64_FORMAT']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.llm"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['LLM']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.tools.metagpt_text_to_image"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.metagpt_text_to_image\",\"names\":[\"oas3_metagpt_text_to_image\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['oas3_metagpt_text_to_image']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.tools.openai_text_to_image"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_image\",\"names\":[\"oas3_openai_text_to_image\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['oas3_openai_text_to_image']"}, {"id": "metagpt/learn/text_to_image.py:module:metagpt.utils.s3"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"id": "metagpt/learn/text_to_image.py:names:['S3']"}, {"id": "{\"lineno\":20,\"end_lineno\":44,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_image\"],\"properties\":{}}"}, {"id": "metagpt/learn/__init__.py"}, {"id": "metagpt/learn/__init__.py:__all__"}, {"id": "metagpt/learn/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:57\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:57\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/__init__.py:module:metagpt.learn.text_to_image"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_image\",\"names\":[\"text_to_image\"]}}"}, {"id": "metagpt/learn/__init__.py:names:['text_to_image']"}, {"id": "metagpt/learn/__init__.py:module:metagpt.learn.text_to_speech"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_speech\",\"names\":[\"text_to_speech\"]}}"}, {"id": "metagpt/learn/__init__.py:names:['text_to_speech']"}, {"id": "metagpt/learn/__init__.py:module:metagpt.learn.google_search"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.google_search\",\"names\":[\"google_search\"]}}"}, {"id": "metagpt/learn/__init__.py:names:['google_search']"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/learn/google_search.py"}, {"id": "metagpt/learn/google_search.py:google_search"}, {"id": "metagpt/learn/google_search.py:module:metagpt.tools.search_engine"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"id": "metagpt/learn/google_search.py:names:['SearchEngine']"}, {"id": "{\"lineno\":4,\"end_lineno\":12,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"google_search\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_speech.py"}, {"id": "metagpt/learn/text_to_speech.py:text_to_speech"}, {"id": "metagpt/learn/text_to_speech.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : text_to_speech.py\n@Desc : Text-to-Speech skill, which provides text-to-speech functionality\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : text_to_speech.py\\n@Desc : Text-to-Speech skill, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_speech.py:metagpt.config2"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.config2"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['Config']"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.const"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['BASE64_FORMAT']"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.tools.azure_tts"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.azure_tts\",\"names\":[\"oas3_azsure_tts\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['oas3_azsure_tts']"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.tools.iflytek_tts"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.iflytek_tts\",\"names\":[\"oas3_iflytek_tts\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['oas3_iflytek_tts']"}, {"id": "metagpt/learn/text_to_speech.py:module:metagpt.utils.s3"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"id": "metagpt/learn/text_to_speech.py:names:['S3']"}, {"id": "{\"lineno\":17,\"end_lineno\":69,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_speech\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_embedding.py"}, {"id": "metagpt/learn/text_to_embedding.py:text_to_embedding"}, {"id": "metagpt/learn/text_to_embedding.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : text_to_embedding.py\n@Desc : Text-to-Embedding skill, which provides text-to-embedding functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : text_to_embedding.py\\n@Desc : Text-to-Embedding skill, which provides text-to-embedding functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/text_to_embedding.py:metagpt.config2"}, {"id": "metagpt/learn/text_to_embedding.py:module:metagpt.config2"}, {"id": "metagpt/learn/text_to_embedding.py:names:['Config']"}, {"id": "metagpt/learn/text_to_embedding.py:module:metagpt.tools.openai_text_to_embedding"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_embedding\",\"names\":[\"oas3_openai_text_to_embedding\"]}}"}, {"id": "metagpt/learn/text_to_embedding.py:names:['oas3_openai_text_to_embedding']"}, {"id": "{\"lineno\":14,\"end_lineno\":24,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_embedding\"],\"properties\":{}}"}, {"id": "metagpt/learn/skill_loader.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : skill_loader.py\n@Desc : Skill YAML Configuration Loader.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : skill_loader.py\\n@Desc : Skill YAML Configuration Loader.\\n\"],\"properties\":{}}"}, {"id": "metagpt/learn/skill_loader.py:module:pathlib"}, {"id": "metagpt/learn/skill_loader.py:names:['Path']"}, {"id": "metagpt/learn/skill_loader.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"id": "metagpt/learn/skill_loader.py:names:['Dict', 'List', 'Optional']"}, {"id": "metagpt/learn/skill_loader.py:aiofiles"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/learn/skill_loader.py:yaml"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"id": "metagpt/learn/skill_loader.py:module:pydantic"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"id": "metagpt/learn/skill_loader.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/learn/skill_loader.py:module:metagpt.context"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"id": "metagpt/learn/skill_loader.py:names:['Context']"}, {"id": "{\"lineno\":19,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Example\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Returns\"],\"properties\":{}}"}, {"id": "{\"lineno\":29,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Parameter\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":50,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Skill\"],\"properties\":{}}"}, {"id": "{\"lineno\":53,\"end_lineno\":55,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Entity\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":59,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Components\"],\"properties\":{}}"}, {"id": "{\"lineno\":62,\"end_lineno\":101,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillsDeclaration\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:__init__"}, {"id": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:_search_from_ddgs"}, {"id": "metagpt/tools/search_engine_ddg.py:module:__future__"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/tools/search_engine_ddg.py:names:['annotations']"}, {"id": "metagpt/tools/search_engine_ddg.py:asyncio"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_ddg.py:json"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_ddg.py:module:concurrent"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"id": "metagpt/tools/search_engine_ddg.py:names:['futures']"}, {"id": "metagpt/tools/search_engine_ddg.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"overload\"]}}"}, {"id": "metagpt/tools/search_engine_ddg.py:names:['Literal', 'overload']"}, {"id": "metagpt/tools/search_engine_ddg.py:module:metagpt.config2"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/tools/search_engine_ddg.py:names:['config']"}, {"id": "{\"lineno\":21,\"end_lineno\":96,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DDGAPIWrapper\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_ddg.py:__name__:__main__"}, {"id": "{\"lineno\":99,\"end_lineno\":102,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:oas_http_svc"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : metagpt_oas3_api_svc.py\n@Desc : MetaGPT OpenAPI Specification 3.0 REST API service\n\n curl -X 'POST' 'http://localhost:8080/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\n"}, {"id": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : metagpt_oas3_api_svc.py\\n@Desc : MetaGPT OpenAPI Specification 3.0 REST API service\\n\\n curl -X 'POST' 'http://localhost:8080/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:module:pathlib"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:names:['Path']"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:connexion"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"connexion\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"oas_http_svc\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_oas3_api_svc.py:__name__:__main__"}, {"id": "{\"lineno\":31,\"end_lineno\":32,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:DataSource:__init__"}, {"id": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:__init__"}, {"id": "metagpt/tools/search_engine_meilisearch.py:ast.Constant:\n@Time : 2023/5/22 21:33\n@Author : alexanderwu\n@File : search_engine_meilisearch.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/22 21:33\\n@Author : alexanderwu\\n@File : search_engine_meilisearch.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:names:['List']"}, {"id": "metagpt/tools/search_engine_meilisearch.py:meilisearch"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"meilisearch\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:module:meilisearch.index"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"meilisearch.index\",\"names\":[\"Index\"]}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:names:['Index']"}, {"id": "metagpt/tools/search_engine_meilisearch.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/tools/search_engine_meilisearch.py:names:['handle_exception']"}, {"id": "{\"lineno\":17,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DataSource\"],\"properties\":{}}"}, {"id": "{\"lineno\":23,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MeilisearchEngine\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:__init__"}, {"id": "metagpt/tools/openai_text_to_embedding.py:oas3_openai_text_to_embedding"}, {"id": "metagpt/tools/openai_text_to_embedding.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : openai_text_to_embedding.py\n@Desc : OpenAI Text-to-Embedding OAS3 api, which provides text-to-embedding functionality.\n For more details, checkout: `https://platform.openai.com/docs/api-reference/embeddings/object`\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : openai_text_to_embedding.py\\n@Desc : OpenAI Text-to-Embedding OAS3 api, which provides text-to-embedding functionality.\\n For more details, checkout: `https://platform.openai.com/docs/api-reference/embeddings/object`\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:names:['List']"}, {"id": "metagpt/tools/openai_text_to_embedding.py:aiohttp"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:requests"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:module:pydantic"}, {"id": "metagpt/tools/openai_text_to_embedding.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/tools/openai_text_to_embedding.py:module:metagpt.logs"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/openai_text_to_embedding.py:names:['logger']"}, {"id": "{\"lineno\":19,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Embedding\"],\"properties\":{}}"}, {"id": "{\"lineno\":29,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Usage\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ResultEmbedding\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":71,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIText2Embedding\"],\"properties\":{}}"}, {"id": "{\"lineno\":75,\"end_lineno\":85,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_openai_text_to_embedding\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:_process_response"}, {"id": "metagpt/tools/search_engine_serpapi.py:ast.Constant:\n@Time : 2023/5/23 18:27\n@Author : alexanderwu\n@File : search_engine_serpapi.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 18:27\\n@Author : alexanderwu\\n@File : search_engine_serpapi.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:names:['Any', 'Dict', 'Optional', 'Tuple']"}, {"id": "metagpt/tools/search_engine_serpapi.py:aiohttp"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"field_validator\"]}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:names:['BaseModel', 'ConfigDict', 'Field', 'field_validator']"}, {"id": "metagpt/tools/search_engine_serpapi.py:module:metagpt.config2"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:names:['config']"}, {"id": "{\"lineno\":16,\"end_lineno\":110,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerpAPIWrapper\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serpapi.py:__name__:__main__"}, {"id": "{\"lineno\":113,\"end_lineno\":116,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:__init__"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_scrape"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_run_precheck"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_get_install_lock"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_install_browsers"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_log_stream"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_install_lock"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:_install_cache"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:__future__"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['annotations']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:asyncio"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:sys"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:pathlib"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['Path']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['Literal']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:playwright.async_api"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['async_playwright']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.config2"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['config']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.logs"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['logger']"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.utils.parse_html"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"id": "metagpt/tools/web_browser_engine_playwright.py:names:['WebPage']"}, {"id": "{\"lineno\":18,\"end_lineno\":95,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PlaywrightWrapper\"],\"properties\":{}}"}, {"id": "{\"lineno\":98,\"end_lineno\":102,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_get_install_lock\"],\"properties\":{}}"}, {"id": "{\"lineno\":105,\"end_lineno\":128,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"_install_browsers\"],\"properties\":{}}"}, {"id": "{\"lineno\":131,\"end_lineno\":136,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"_log_stream\"],\"properties\":{}}"}, {"id": "{\"lineno\":139,\"end_lineno\":139,\"type_name\":\"ast.AnnAssign\",\"tokens\":[\"_install_lock\"],\"properties\":{}}"}, {"id": "{\"lineno\":140,\"end_lineno\":140,\"type_name\":\"ast.Assign\",\"tokens\":[\"_install_cache\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine.py:SkSearchEngine:__init__"}, {"id": "metagpt/tools/search_engine.py:SearchEngine:__init__"}, {"id": "metagpt/tools/search_engine.py:ast.Constant:\n@Time : 2023/5/6 20:15\n@Author : alexanderwu\n@File : search_engine.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/6 20:15\\n@Author : alexanderwu\\n@File : search_engine.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine.py:importlib"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Coroutine\",\"Literal\",\"Optional\",\"Union\",\"overload\"]}}"}, {"id": "metagpt/tools/search_engine.py:names:['Callable', 'Coroutine', 'Literal', 'Optional', 'Union', 'overload']"}, {"id": "metagpt/tools/search_engine.py:module:semantic_kernel.skill_definition"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.skill_definition\",\"names\":[\"sk_function\"]}}"}, {"id": "metagpt/tools/search_engine.py:names:['sk_function']"}, {"id": "metagpt/tools/search_engine.py:module:metagpt.tools"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"id": "metagpt/tools/search_engine.py:names:['SearchEngineType']"}, {"id": "{\"lineno\":16,\"end_lineno\":28,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkSearchEngine\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchEngine\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:__init__"}, {"id": "metagpt/tools/web_browser_engine.py:module:__future__"}, {"id": "metagpt/tools/web_browser_engine.py:names:['annotations']"}, {"id": "metagpt/tools/web_browser_engine.py:importlib"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Coroutine\",\"overload\"]}}"}, {"id": "metagpt/tools/web_browser_engine.py:names:['Any', 'Callable', 'Coroutine', 'overload']"}, {"id": "metagpt/tools/web_browser_engine.py:module:metagpt.tools"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"id": "metagpt/tools/web_browser_engine.py:names:['WebBrowserEngineType']"}, {"id": "metagpt/tools/web_browser_engine.py:module:metagpt.utils.parse_html"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"id": "metagpt/tools/web_browser_engine.py:names:['WebPage']"}, {"id": "{\"lineno\":13,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowserEngine\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serper.py:SerperWrapper:_process_response"}, {"id": "metagpt/tools/search_engine_serper.py:ast.Constant:\n@Time : 2023/5/23 18:27\n@Author : alexanderwu\n@File : search_engine_serpapi.py\n"}, {"id": "metagpt/tools/search_engine_serper.py:json"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serper.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"id": "metagpt/tools/search_engine_serper.py:names:['Any', 'Dict', 'Optional', 'Tuple']"}, {"id": "metagpt/tools/search_engine_serper.py:aiohttp"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serper.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"field_validator\"]}}"}, {"id": "metagpt/tools/search_engine_serper.py:names:['BaseModel', 'ConfigDict', 'Field', 'field_validator']"}, {"id": "metagpt/tools/search_engine_serper.py:module:metagpt.config2"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/tools/search_engine_serper.py:names:['config']"}, {"id": "{\"lineno\":17,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerperWrapper\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_serper.py:__name__:__main__"}, {"id": "{\"lineno\":115,\"end_lineno\":118,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/moderation.py:Moderation:__init__"}, {"id": "metagpt/tools/moderation.py:ast.Constant:\n@Time : 2023/9/26 14:27\n@Author : zhanglei\n@File : moderation.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/26 14:27\\n@Author : zhanglei\\n@File : moderation.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/moderation.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"id": "metagpt/tools/moderation.py:names:['Union']"}, {"id": "metagpt/tools/moderation.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/tools/moderation.py:names:['BaseLLM']"}, {"id": "{\"lineno\":13,\"end_lineno\":40,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Moderation\"],\"properties\":{}}"}, {"id": "metagpt/tools/__init__.py"}, {"id": "metagpt/tools/__init__.py:SearchEngineType"}, {"id": "metagpt/tools/__init__.py:WebBrowserEngineType"}, {"id": "metagpt/tools/__init__.py:WebBrowserEngineType:__missing__"}, {"id": "metagpt/tools/__init__.py:ast.Constant:\n@Time : 2023/4/29 15:35\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:35\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/__init__.py:module:enum"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/tools/__init__.py:names:['Enum']"}, {"id": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchEngineType\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":29,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowserEngineType\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:safe_google_results"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:__future__"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['annotations']"}, {"id": "metagpt/tools/search_engine_googleapi.py:asyncio"}, {"id": "metagpt/tools/search_engine_googleapi.py:json"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:concurrent"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['futures']"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:typing"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['Optional']"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:urllib.parse"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlparse\"]}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['urlparse']"}, {"id": "metagpt/tools/search_engine_googleapi.py:httplib2"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"httplib2\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:pydantic"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['BaseModel', 'ConfigDict', 'Field', 'field_validator']"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:metagpt.config2"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['config']"}, {"id": "metagpt/tools/search_engine_googleapi.py:module:metagpt.logs"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:names:['logger']"}, {"id": "{\"lineno\":27,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GoogleAPIWrapper\"],\"properties\":{}}"}, {"id": "{\"lineno\":120,\"end_lineno\":133,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"safe_google_results\"],\"properties\":{}}"}, {"id": "metagpt/tools/search_engine_googleapi.py:__name__:__main__"}, {"id": "{\"lineno\":136,\"end_lineno\":139,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:__init__"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_run_precheck"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_scrape_website"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:_gen_get_driver_func"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:_webdriver_manager_types"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:__future__"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['annotations']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:asyncio"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:importlib"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:concurrent"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['futures']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:copy"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['deepcopy']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['Literal']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.common.by"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.common.by\",\"names\":[\"By\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['By']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.support"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support\",\"names\":[\"expected_conditions as EC\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['expected_conditions as EC']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.support.wait"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support.wait\",\"names\":[\"WebDriverWait\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['WebDriverWait']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:webdriver_manager.core.download_manager"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.download_manager\",\"names\":[\"WDMDownloadManager\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['WDMDownloadManager']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:webdriver_manager.core.http"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.http\",\"names\":[\"WDMHttpClient\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['WDMHttpClient']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:metagpt.config2"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['config']"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:module:metagpt.utils.parse_html"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"id": "metagpt/tools/web_browser_engine_selenium.py:names:['WebPage']"}, {"id": "{\"lineno\":22,\"end_lineno\":83,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SeleniumWrapper\"],\"properties\":{}}"}, {"id": "{\"lineno\":86,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"_webdriver_manager_types\"],\"properties\":{}}"}, {"id": "{\"lineno\":94,\"end_lineno\":98,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WDMHttpProxyClient\"],\"properties\":{}}"}, {"id": "{\"lineno\":101,\"end_lineno\":125,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_gen_get_driver_func\"],\"properties\":{}}"}, {"id": "metagpt/tools/openapi_v3_hello.py"}, {"id": "metagpt/tools/openapi_v3_hello.py:post_greeting"}, {"id": "metagpt/tools/openapi_v3_hello.py:ast.Constant:\n@Time : 2023/5/2 16:03\n@Author : mashenquan\n@File : openapi_v3_hello.py\n@Desc : Implement the OpenAPI Specification 3.0 demo and use the following command to test the HTTP service:\n\n curl -X 'POST' 'http://localhost:8082/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\n"}, {"id": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/2 16:03\\n@Author : mashenquan\\n@File : openapi_v3_hello.py\\n@Desc : Implement the OpenAPI Specification 3.0 demo and use the following command to test the HTTP service:\\n\\n curl -X 'POST' 'http://localhost:8082/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/openapi_v3_hello.py:module:pathlib"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/tools/openapi_v3_hello.py:names:['Path']"}, {"id": "metagpt/tools/openapi_v3_hello.py:connexion"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"connexion\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":22,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"post_greeting\"],\"properties\":{}}"}, {"id": "metagpt/tools/openapi_v3_hello.py:__name__:__main__"}, {"id": "{\"lineno\":25,\"end_lineno\":29,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/tools/azure_tts.py:AzureTTS:__init__"}, {"id": "metagpt/tools/azure_tts.py:oas3_azsure_tts"}, {"id": "metagpt/tools/azure_tts.py:ast.Constant:\n@Time : 2023/6/9 22:22\n@Author : Leo Xiao\n@File : azure_tts.py\n@Modified by: mashenquan, 2023/8/17. Azure TTS OAS3 api, which provides text-to-speech functionality\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/9 22:22\\n@Author : Leo Xiao\\n@File : azure_tts.py\\n@Modified by: mashenquan, 2023/8/17. Azure TTS OAS3 api, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/azure_tts.py:base64"}, {"id": "metagpt/tools/azure_tts.py:module:pathlib"}, {"id": "metagpt/tools/azure_tts.py:names:['Path']"}, {"id": "metagpt/tools/azure_tts.py:module:uuid"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"id": "metagpt/tools/azure_tts.py:names:['uuid4']"}, {"id": "metagpt/tools/azure_tts.py:aiofiles"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/tools/azure_tts.py:module:azure.cognitiveservices.speech"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"azure.cognitiveservices.speech\",\"names\":[\"AudioConfig\",\"SpeechConfig\",\"SpeechSynthesizer\"]}}"}, {"id": "metagpt/tools/azure_tts.py:names:['AudioConfig', 'SpeechConfig', 'SpeechSynthesizer']"}, {"id": "metagpt/tools/azure_tts.py:module:metagpt.logs"}, {"id": "metagpt/tools/azure_tts.py:names:['logger']"}, {"id": "{\"lineno\":19,\"end_lineno\":56,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AzureTTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":100,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_azsure_tts\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:__init__"}, {"id": "metagpt/tools/openai_text_to_image.py:oas3_openai_text_to_image"}, {"id": "metagpt/tools/openai_text_to_image.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : openai_text_to_image.py\n@Desc : OpenAI Text-to-Image OAS3 api, which provides text-to-image functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : openai_text_to_image.py\\n@Desc : OpenAI Text-to-Image OAS3 api, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_image.py:aiohttp"}, {"id": "metagpt/tools/openai_text_to_image.py:requests"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/tools/openai_text_to_image.py:module:metagpt.logs"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/openai_text_to_image.py:names:['logger']"}, {"id": "metagpt/tools/openai_text_to_image.py:module:metagpt.provider.base_llm"}, {"id": "metagpt/tools/openai_text_to_image.py:names:['BaseLLM']"}, {"id": "{\"lineno\":17,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIText2Image\"],\"properties\":{}}"}, {"id": "{\"lineno\":57,\"end_lineno\":67,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_openai_text_to_image\"],\"properties\":{}}"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:__init__"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:__para_to_str"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:_para_to_str"}, {"id": "metagpt/tools/ut_writer.py:UTGenerator:_generate_ut"}, {"id": "metagpt/tools/ut_writer.py:ICL_SAMPLE"}, {"id": "metagpt/tools/ut_writer.py:ACT_PROMPT_PREFIX"}, {"id": "metagpt/tools/ut_writer.py:YFT_PROMPT_PREFIX"}, {"id": "metagpt/tools/ut_writer.py:OCR_API_DOC"}, {"id": "metagpt/tools/ut_writer.py:json"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/ut_writer.py:module:pathlib"}, {"id": "metagpt/tools/ut_writer.py:names:['Path']"}, {"id": "metagpt/tools/ut_writer.py:module:metagpt.config2"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/tools/ut_writer.py:names:['config']"}, {"id": "metagpt/tools/ut_writer.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM as GPTAPI\"]}}"}, {"id": "metagpt/tools/ut_writer.py:names:['OpenAILLM as GPTAPI']"}, {"id": "metagpt/tools/ut_writer.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"awrite\"]}}"}, {"id": "metagpt/tools/ut_writer.py:names:['awrite']"}, {"id": "{\"lineno\":11,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"ICL_SAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":67,\"end_lineno\":70,\"type_name\":\"ast.Assign\",\"tokens\":[\"ACT_PROMPT_PREFIX\"],\"properties\":{}}"}, {"id": "{\"lineno\":72,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"YFT_PROMPT_PREFIX\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"OCR_API_DOC\"],\"properties\":{}}"}, {"id": "{\"lineno\":104,\"end_lineno\":287,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UTGenerator\"],\"properties\":{}}"}, {"id": "metagpt/tools/translator.py:prompt"}, {"id": "metagpt/tools/translator.py:ast.Constant:\n@Time : 2023/4/29 15:36\n@Author : alexanderwu\n@File : translator.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:36\\n@Author : alexanderwu\\n@File : translator.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":9,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"prompt\"],\"properties\":{}}"}, {"id": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Translator\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:__init__"}, {"id": "metagpt/tools/metagpt_text_to_image.py:oas3_metagpt_text_to_image"}, {"id": "metagpt/tools/metagpt_text_to_image.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : metagpt_text_to_image.py\n@Desc : MetaGPT Text-to-Image OAS3 api, which provides text-to-image functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : metagpt_text_to_image.py\\n@Desc : MetaGPT Text-to-Image OAS3 api, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:base64"}, {"id": "metagpt/tools/metagpt_text_to_image.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:names:['Dict', 'List']"}, {"id": "metagpt/tools/metagpt_text_to_image.py:aiohttp"}, {"id": "metagpt/tools/metagpt_text_to_image.py:requests"}, {"id": "metagpt/tools/metagpt_text_to_image.py:module:pydantic"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/tools/metagpt_text_to_image.py:names:['BaseModel']"}, {"id": "metagpt/tools/metagpt_text_to_image.py:module:metagpt.logs"}, {"id": "metagpt/tools/metagpt_text_to_image.py:names:['logger']"}, {"id": "{\"lineno\":19,\"end_lineno\":81,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MetaGPTText2Image\"],\"properties\":{}}"}, {"id": "{\"lineno\":85,\"end_lineno\":95,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_metagpt_text_to_image\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:__init__"}, {"id": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:_create_url"}, {"id": "metagpt/tools/iflytek_tts.py:oas3_iflytek_tts"}, {"id": "metagpt/tools/iflytek_tts.py:DEFAULT_IFLYTEK_VOICE"}, {"id": "metagpt/tools/iflytek_tts.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : iflytek_tts.py\n@Desc : iFLYTEK TTS OAS3 api, which provides text-to-speech functionality\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : iflytek_tts.py\\n@Desc : iFLYTEK TTS OAS3 api, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:base64"}, {"id": "metagpt/tools/iflytek_tts.py:hashlib"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:hmac"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"hmac\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:json"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:uuid"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:module:datetime"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['datetime']"}, {"id": "metagpt/tools/iflytek_tts.py:module:enum"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['Enum']"}, {"id": "metagpt/tools/iflytek_tts.py:module:pathlib"}, {"id": "metagpt/tools/iflytek_tts.py:names:['Path']"}, {"id": "metagpt/tools/iflytek_tts.py:module:time"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['mktime']"}, {"id": "metagpt/tools/iflytek_tts.py:module:typing"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['Optional']"}, {"id": "metagpt/tools/iflytek_tts.py:module:urllib.parse"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['urlencode']"}, {"id": "metagpt/tools/iflytek_tts.py:module:wsgiref.handlers"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['format_date_time']"}, {"id": "metagpt/tools/iflytek_tts.py:aiofiles"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:websockets as websockets"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"websockets as websockets\"],\"properties\":{}}"}, {"id": "metagpt/tools/iflytek_tts.py:module:pydantic"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['BaseModel']"}, {"id": "metagpt/tools/iflytek_tts.py:module:metagpt.logs"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/tools/iflytek_tts.py:names:['logger']"}, {"id": "{\"lineno\":29,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTSStatus\"],\"properties\":{}}"}, {"id": "{\"lineno\":35,\"end_lineno\":38,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AudioData\"],\"properties\":{}}"}, {"id": "{\"lineno\":41,\"end_lineno\":45,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTSResponse\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_IFLYTEK_VOICE\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":113,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":117,\"end_lineno\":143,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_iflytek_tts\"],\"properties\":{}}"}, {"id": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:__init__"}, {"id": "metagpt/tools/prompt_writer.py:WikiHowTemplate:__init__"}, {"id": "metagpt/tools/prompt_writer.py:EnronTemplate:__init__"}, {"id": "metagpt/tools/prompt_writer.py:BEAGECTemplate:__init__"}, {"id": "metagpt/tools/prompt_writer.py:ast.Constant:\n@Time : 2023/5/2 16:03\n@Author : alexanderwu\n@File : prompt_writer.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/2 16:03\\n@Author : alexanderwu\\n@File : prompt_writer.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/tools/prompt_writer.py:module:typing"}, {"id": "metagpt/tools/prompt_writer.py:names:['Union']"}, {"id": "{\"lineno\":11,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GPTPromptGenerator\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WikiHowTemplate\"],\"properties\":{}}"}, {"id": "{\"lineno\":77,\"end_lineno\":92,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnronTemplate\"],\"properties\":{}}"}, {"id": "{\"lineno\":95,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BEAGECTemplate\"],\"properties\":{}}"}, {"id": "metagpt/memory/memory.py:ast.Constant:\n@Time : 2023/5/20 12:15\n@Author : alexanderwu\n@File : memory.py\n@Modified By: mashenquan, 2023-11-1. According to RFC 116: Updated the type of index key.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/20 12:15\\n@Author : alexanderwu\\n@File : memory.py\\n@Modified By: mashenquan, 2023-11-1. According to RFC 116: Updated the type of index key.\\n\"],\"properties\":{}}"}, {"id": "metagpt/memory/memory.py:module:collections"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"id": "metagpt/memory/memory.py:names:['defaultdict']"}, {"id": "metagpt/memory/memory.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"DefaultDict\",\"Iterable\",\"Set\"]}}"}, {"id": "metagpt/memory/memory.py:names:['DefaultDict', 'Iterable', 'Set']"}, {"id": "metagpt/memory/memory.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"SerializeAsAny\"]}}"}, {"id": "metagpt/memory/memory.py:names:['BaseModel', 'Field', 'SerializeAsAny']"}, {"id": "metagpt/memory/memory.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"IGNORED_MESSAGE_ID\"]}}"}, {"id": "metagpt/memory/memory.py:names:['IGNORED_MESSAGE_ID']"}, {"id": "metagpt/memory/memory.py:module:metagpt.schema"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/memory/memory.py:names:['Message']"}, {"id": "metagpt/memory/memory.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\"]}}"}, {"id": "metagpt/memory/memory.py:names:['any_to_str', 'any_to_str_set']"}, {"id": "{\"lineno\":19,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Memory\"],\"properties\":{}}"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_openai_summarize"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_summarize"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_is_related"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_openai_is_related"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_rewrite"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_openai_rewrite"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_summarize"}, {"id": "metagpt/memory/brain_memory.py:BrainMemory:_get_summary"}, {"id": "metagpt/memory/brain_memory.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : brain_memory.py\n@Desc : Used by AgentStore. Used for long-term storage and automatic compression.\n@Modified By: mashenquan, 2023/9/4. + redis memory cache.\n@Modified By: mashenquan, 2023/12/25. Simplify Functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : brain_memory.py\\n@Desc : Used by AgentStore. Used for long-term storage and automatic compression.\\n@Modified By: mashenquan, 2023/9/4. + redis memory cache.\\n@Modified By: mashenquan, 2023/12/25. Simplify Functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/memory/brain_memory.py:json"}, {"id": "metagpt/memory/brain_memory.py:re"}, {"id": "metagpt/memory/brain_memory.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['Dict', 'List', 'Optional']"}, {"id": "metagpt/memory/brain_memory.py:module:pydantic"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.config2"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['config']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.const"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_MAX_TOKENS\",\"DEFAULT_TOKEN_SIZE\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['DEFAULT_MAX_TOKENS', 'DEFAULT_TOKEN_SIZE']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.logs"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['logger']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.provider"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"MetaGPTLLM\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['MetaGPTLLM']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['BaseLLM']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.schema"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"SimpleMessage\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['Message', 'SimpleMessage']"}, {"id": "metagpt/memory/brain_memory.py:module:metagpt.utils.redis"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.redis\",\"names\":[\"Redis\"]}}"}, {"id": "metagpt/memory/brain_memory.py:names:['Redis']"}, {"id": "{\"lineno\":26,\"end_lineno\":331,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BrainMemory\"],\"properties\":{}}"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:__init__"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:_load"}, {"id": "metagpt/memory/memory_storage.py:MemoryStorage:_get_index_and_store_fname"}, {"id": "metagpt/memory/memory_storage.py:ast.Constant:\n@Desc : the implement of memory storage\n"}, {"id": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Desc : the implement of memory storage\\n\"],\"properties\":{}}"}, {"id": "metagpt/memory/memory_storage.py:module:pathlib"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['Path']"}, {"id": "metagpt/memory/memory_storage.py:module:typing"}, {"id": "metagpt/memory/memory_storage.py:names:['Optional']"}, {"id": "metagpt/memory/memory_storage.py:module:langchain.embeddings"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['OpenAIEmbeddings']"}, {"id": "metagpt/memory/memory_storage.py:module:langchain.vectorstores.faiss"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores.faiss\",\"names\":[\"FAISS\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['FAISS']"}, {"id": "metagpt/memory/memory_storage.py:module:langchain_core.embeddings"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['Embeddings']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\",\"MEM_TTL\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['DATA_PATH', 'MEM_TTL']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.document_store.faiss_store"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['FaissStore']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.logs"}, {"id": "metagpt/memory/memory_storage.py:names:['logger']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.schema"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['Message']"}, {"id": "metagpt/memory/memory_storage.py:module:metagpt.utils.serialize"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"deserialize_message\",\"serialize_message\"]}}"}, {"id": "metagpt/memory/memory_storage.py:names:['deserialize_message', 'serialize_message']"}, {"id": "{\"lineno\":21,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MemoryStorage\"],\"properties\":{}}"}, {"id": "metagpt/memory/__init__.py"}, {"id": "metagpt/memory/__init__.py:__all__"}, {"id": "metagpt/memory/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:57\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "metagpt/memory/__init__.py:module:metagpt.memory.memory"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory\",\"names\":[\"Memory\"]}}"}, {"id": "metagpt/memory/__init__.py:names:['Memory']"}, {"id": "{\"lineno\":14,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/memory/longterm_memory.py:ast.Constant:\n@Desc : the implement of Long-term memory\n"}, {"id": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Desc : the implement of Long-term memory\\n\"],\"properties\":{}}"}, {"id": "metagpt/memory/longterm_memory.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['Optional']"}, {"id": "metagpt/memory/longterm_memory.py:module:pydantic"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['ConfigDict', 'Field']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.logs"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['logger']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.memory"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['Memory']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.memory.memory_storage"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory_storage\",\"names\":[\"MemoryStorage\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['MemoryStorage']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"RoleContext\"]}}"}, {"id": "metagpt/memory/longterm_memory.py:names:['RoleContext']"}, {"id": "metagpt/memory/longterm_memory.py:module:metagpt.schema"}, {"id": "metagpt/memory/longterm_memory.py:names:['Message']"}, {"id": "{\"lineno\":18,\"end_lineno\":77,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LongTermMemory\"],\"properties\":{}}"}, {"id": "metagpt/document_store/qdrant_store.py:QdrantStore:__init__"}, {"id": "metagpt/document_store/qdrant_store.py:module:dataclasses"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"dataclasses\",\"names\":[\"dataclass\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['dataclass']"}, {"id": "metagpt/document_store/qdrant_store.py:module:typing"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['List']"}, {"id": "metagpt/document_store/qdrant_store.py:module:qdrant_client"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client\",\"names\":[\"QdrantClient\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['QdrantClient']"}, {"id": "metagpt/document_store/qdrant_store.py:module:qdrant_client.models"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client.models\",\"names\":[\"Filter\",\"PointStruct\",\"VectorParams\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['Filter', 'PointStruct', 'VectorParams']"}, {"id": "metagpt/document_store/qdrant_store.py:module:metagpt.document_store.base_store"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"id": "metagpt/document_store/qdrant_store.py:names:['BaseStore']"}, {"id": "{\"lineno\":11,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QdrantConnection\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":124,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QdrantStore\"],\"properties\":{}}"}, {"id": "metagpt/document_store/chromadb_store.py:ChromaStore:__init__"}, {"id": "metagpt/document_store/chromadb_store.py:ast.Constant:\n@Time : 2023/5/29 14:46\n@Author : alexanderwu\n@File : chromadb_store.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/29 14:46\\n@Author : alexanderwu\\n@File : chromadb_store.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/chromadb_store.py:chromadb"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"chromadb\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ChromaStore\"],\"properties\":{}}"}, {"id": "metagpt/document_store/lancedb_store.py:LanceStore:__init__"}, {"id": "metagpt/document_store/lancedb_store.py:ast.Constant:\n@Time : 2023/8/9 15:42\n@Author : unkn-wn (Leon Yee)\n@File : lancedb_store.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/9 15:42\\n@Author : unkn-wn (Leon Yee)\\n@File : lancedb_store.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/lancedb_store.py:os"}, {"id": "metagpt/document_store/lancedb_store.py:shutil"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"id": "metagpt/document_store/lancedb_store.py:lancedb"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"lancedb\"],\"properties\":{}}"}, {"id": "{\"lineno\":14,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LanceStore\"],\"properties\":{}}"}, {"id": "metagpt/document_store/__init__.py"}, {"id": "metagpt/document_store/__init__.py:__all__"}, {"id": "metagpt/document_store/__init__.py:ast.Constant:\n@Time : 2023/5/25 10:20\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 10:20\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/__init__.py:module:metagpt.document_store.faiss_store"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"id": "metagpt/document_store/__init__.py:names:['FaissStore']"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:__init__"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:_load"}, {"id": "metagpt/document_store/faiss_store.py:FaissStore:_write"}, {"id": "metagpt/document_store/faiss_store.py:ast.Constant:\n@Time : 2023/5/25 10:20\n@Author : alexanderwu\n@File : faiss_store.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 10:20\\n@Author : alexanderwu\\n@File : faiss_store.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/faiss_store.py:asyncio"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/document_store/faiss_store.py:module:pathlib"}, {"id": "metagpt/document_store/faiss_store.py:names:['Path']"}, {"id": "metagpt/document_store/faiss_store.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['Optional']"}, {"id": "metagpt/document_store/faiss_store.py:module:langchain.vectorstores"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores\",\"names\":[\"FAISS\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['FAISS']"}, {"id": "metagpt/document_store/faiss_store.py:module:langchain_core.embeddings"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['Embeddings']"}, {"id": "metagpt/document_store/faiss_store.py:module:metagpt.document"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document\",\"names\":[\"IndexableDocument\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['IndexableDocument']"}, {"id": "metagpt/document_store/faiss_store.py:module:metagpt.document_store.base_store"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"LocalStore\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['LocalStore']"}, {"id": "metagpt/document_store/faiss_store.py:module:metagpt.logs"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['logger']"}, {"id": "metagpt/document_store/faiss_store.py:module:metagpt.utils.embedding"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.embedding\",\"names\":[\"get_embedding\"]}}"}, {"id": "metagpt/document_store/faiss_store.py:names:['get_embedding']"}, {"id": "{\"lineno\":21,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FaissStore\"],\"properties\":{}}"}, {"id": "metagpt/document_store/base_store.py:LocalStore:__init__"}, {"id": "metagpt/document_store/base_store.py:LocalStore:_get_index_and_store_fname"}, {"id": "metagpt/document_store/base_store.py:LocalStore:_load"}, {"id": "metagpt/document_store/base_store.py:LocalStore:_write"}, {"id": "metagpt/document_store/base_store.py:ast.Constant:\n@Time : 2023/5/28 00:01\n@Author : alexanderwu\n@File : base_store.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/28 00:01\\n@Author : alexanderwu\\n@File : base_store.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/document_store/base_store.py:module:abc"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"id": "metagpt/document_store/base_store.py:names:['ABC', 'abstractmethod']"}, {"id": "metagpt/document_store/base_store.py:module:pathlib"}, {"id": "metagpt/document_store/base_store.py:names:['Path']"}, {"id": "{\"lineno\":12,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseStore\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LocalStore\"],\"properties\":{}}"}, {"id": "metagpt/provider/anthropic_api.py:Claude2:__init__"}, {"id": "metagpt/provider/anthropic_api.py:ast.Constant:\n@Time : 2023/7/21 11:15\n@Author : Leo Xiao\n@File : anthropic_api.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/21 11:15\\n@Author : Leo Xiao\\n@File : anthropic_api.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/anthropic_api.py:anthropic"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"anthropic\"],\"properties\":{}}"}, {"id": "metagpt/provider/anthropic_api.py:module:anthropic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anthropic\",\"names\":[\"Anthropic\",\"AsyncAnthropic\"]}}"}, {"id": "metagpt/provider/anthropic_api.py:names:['Anthropic', 'AsyncAnthropic']"}, {"id": "metagpt/provider/anthropic_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"id": "metagpt/provider/anthropic_api.py:names:['LLMConfig']"}, {"id": "{\"lineno\":15,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Claude2\"],\"properties\":{}}"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init__"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init_gemini"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_user_msg"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_assistant_msg"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_const_kwargs"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_update_costs"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion"}, {"id": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion_stream"}, {"id": "metagpt/provider/google_gemini_api.py:google.generativeai as genai"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"google.generativeai as genai\"],\"properties\":{}}"}, {"id": "metagpt/provider/google_gemini_api.py:module:google.ai"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.ai\",\"names\":[\"generativelanguage as glm\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['generativelanguage as glm']"}, {"id": "metagpt/provider/google_gemini_api.py:module:google.generativeai.generative_models"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.generative_models\",\"names\":[\"GenerativeModel\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['GenerativeModel']"}, {"id": "metagpt/provider/google_gemini_api.py:module:google.generativeai.types"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types\",\"names\":[\"content_types\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['content_types']"}, {"id": "metagpt/provider/google_gemini_api.py:module:google.generativeai.types.generation_types"}, {"id": "{\"lineno\":9,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types.generation_types\",\"names\":[\"AsyncGenerateContentResponse\",\"GenerateContentResponse\",\"GenerationConfig\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['AsyncGenerateContentResponse', 'GenerateContentResponse', 'GenerationConfig']"}, {"id": "metagpt/provider/google_gemini_api.py:module:tenacity"}, {"id": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['log_llm_stream', 'logger']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['register_provider']"}, {"id": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"id": "metagpt/provider/google_gemini_api.py:names:['log_and_reraise']"}, {"id": "{\"lineno\":29,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeminiGenerativeModel\"],\"properties\":{}}"}, {"id": "{\"lineno\":45,\"end_lineno\":143,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeminiLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_init_client"}, {"id": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_make_client_kwargs"}, {"id": "metagpt/provider/azure_openai_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : openai.py\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\n"}, {"id": "{\"lineno\":2,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : openai.py\\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/azure_openai_api.py:module:openai"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncAzureOpenAI\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['AsyncAzureOpenAI']"}, {"id": "metagpt/provider/azure_openai_api.py:module:openai._base_client"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['AsyncHttpxClientWrapper']"}, {"id": "metagpt/provider/azure_openai_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['LLMType']"}, {"id": "metagpt/provider/azure_openai_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['register_provider']"}, {"id": "metagpt/provider/azure_openai_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"id": "metagpt/provider/azure_openai_api.py:names:['OpenAILLM']"}, {"id": "{\"lineno\":20,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AzureOpenAILLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:__init__"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:_make_client_kwargs"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:_update_costs"}, {"id": "metagpt/provider/fireworks_api.py:FireworksLLM:_achat_completion_stream"}, {"id": "metagpt/provider/fireworks_api.py:MODEL_GRADE_TOKEN_COSTS"}, {"id": "metagpt/provider/fireworks_api.py:re"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/provider/fireworks_api.py:module:openai"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncStream\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['APIConnectionError', 'AsyncStream']"}, {"id": "metagpt/provider/fireworks_api.py:module:openai.types"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['CompletionUsage']"}, {"id": "metagpt/provider/fireworks_api.py:module:openai.types.chat"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletionChunk\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['ChatCompletionChunk']"}, {"id": "metagpt/provider/fireworks_api.py:module:tenacity"}, {"id": "{\"lineno\":10,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.logs"}, {"id": "metagpt/provider/fireworks_api.py:names:['logger']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['register_provider']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\",\"log_and_reraise\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['OpenAILLM', 'log_and_reraise']"}, {"id": "metagpt/provider/fireworks_api.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"id": "metagpt/provider/fireworks_api.py:names:['CostManager', 'Costs']"}, {"id": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"MODEL_GRADE_TOKEN_COSTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":32,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FireworksCostManager\"],\"properties\":{}}"}, {"id": "{\"lineno\":74,\"end_lineno\":131,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FireworksLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:__init__"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:__init_ollama"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_const_kwargs"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_update_costs"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_decode_and_load"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion"}, {"id": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion_stream"}, {"id": "metagpt/provider/ollama_api.py:json"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/provider/ollama_api.py:module:requests"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['ConnectionError']"}, {"id": "metagpt/provider/ollama_api.py:module:tenacity"}, {"id": "{\"lineno\":8,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.const"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"LLM_API_TIMEOUT\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['LLM_API_TIMEOUT']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['log_llm_stream', 'logger']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.provider.general_api_requestor"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['GeneralAPIRequestor']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['register_provider']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['log_and_reraise']"}, {"id": "metagpt/provider/ollama_api.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"TokenCostManager\"]}}"}, {"id": "metagpt/provider/ollama_api.py:names:['TokenCostManager']"}, {"id": "{\"lineno\":27,\"end_lineno\":126,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OllamaLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/__init__.py"}, {"id": "metagpt/provider/__init__.py:__all__"}, {"id": "metagpt/provider/__init__.py:ast.Constant:\n@Time : 2023/5/5 22:59\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 22:59\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.fireworks_api"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.fireworks_api\",\"names\":[\"FireworksLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['FireworksLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.google_gemini_api"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.google_gemini_api\",\"names\":[\"GeminiLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['GeminiLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.ollama_api"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.ollama_api\",\"names\":[\"OllamaLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['OllamaLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.open_llm_api"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.open_llm_api\",\"names\":[\"OpenLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['OpenLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['OpenAILLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.zhipuai_api"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai_api\",\"names\":[\"ZhiPuAILLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['ZhiPuAILLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.azure_openai_api"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.azure_openai_api\",\"names\":[\"AzureOpenAILLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['AzureOpenAILLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.metagpt_api"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.metagpt_api\",\"names\":[\"MetaGPTLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['MetaGPTLLM']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.human_provider"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.human_provider\",\"names\":[\"HumanProvider\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['HumanProvider']"}, {"id": "metagpt/provider/__init__.py:module:metagpt.provider.spark_api"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.spark_api\",\"names\":[\"SparkLLM\"]}}"}, {"id": "metagpt/provider/__init__.py:names:['SparkLLM']"}, {"id": "{\"lineno\":20,\"end_lineno\":31,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:__init__"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_init_model"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_init_client"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_make_client_kwargs"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_get_proxy_params"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_stream"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_cons_kwargs"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_func_configs"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_function"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_process_message"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_calc_usage"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_update_costs"}, {"id": "metagpt/provider/openai_api.py:OpenAILLM:_get_max_tokens"}, {"id": "metagpt/provider/openai_api.py:log_and_reraise"}, {"id": "metagpt/provider/openai_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : openai.py\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\n"}, {"id": "metagpt/provider/openai_api.py:json"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/provider/openai_api.py:module:typing"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncIterator\",\"Optional\",\"Union\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['AsyncIterator', 'Optional', 'Union']"}, {"id": "metagpt/provider/openai_api.py:module:openai"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncOpenAI\",\"AsyncStream\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['APIConnectionError', 'AsyncOpenAI', 'AsyncStream']"}, {"id": "metagpt/provider/openai_api.py:module:openai._base_client"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['AsyncHttpxClientWrapper']"}, {"id": "metagpt/provider/openai_api.py:module:openai.types"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['CompletionUsage']"}, {"id": "metagpt/provider/openai_api.py:module:openai.types.chat"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletion\",\"ChatCompletionChunk\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['ChatCompletion', 'ChatCompletionChunk']"}, {"id": "metagpt/provider/openai_api.py:module:tenacity"}, {"id": "{\"lineno\":17,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['log_llm_stream', 'logger']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.provider.constant"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.constant\",\"names\":[\"GENERAL_FUNCTION_SCHEMA\",\"GENERAL_TOOL_CHOICE\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['GENERAL_FUNCTION_SCHEMA', 'GENERAL_TOOL_CHOICE']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['register_provider']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.schema"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['Message']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['CostManager', 'Costs']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['handle_exception']"}, {"id": "metagpt/provider/openai_api.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":33,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\",\"get_max_completion_tokens\"]}}"}, {"id": "metagpt/provider/openai_api.py:names:['count_message_tokens', 'count_string_tokens', 'get_max_completion_tokens']"}, {"id": "{\"lineno\":40,\"end_lineno\":48,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_and_reraise\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":245,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAILLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:SparkLLM:__init__"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:__init__"}, {"id": "metagpt/provider/spark_api.py:GetMessageFromWeb:_run"}, {"id": "metagpt/provider/spark_api.py:ast.Constant:\n@File : spark_api.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@File : spark_api.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:_thread as thread"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"_thread as thread\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:base64"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:datetime"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"datetime\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:hashlib"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:hmac"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"hmac\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:json"}, {"id": "metagpt/provider/spark_api.py:ssl"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"ssl\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:module:time"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['mktime']"}, {"id": "metagpt/provider/spark_api.py:module:urllib.parse"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlparse\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['urlencode', 'urlparse']"}, {"id": "metagpt/provider/spark_api.py:module:wsgiref.handlers"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['format_date_time']"}, {"id": "metagpt/provider/spark_api.py:websocket"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"websocket\"],\"properties\":{}}"}, {"id": "metagpt/provider/spark_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/spark_api.py:module:metagpt.logs"}, {"id": "metagpt/provider/spark_api.py:names:['logger']"}, {"id": "metagpt/provider/spark_api.py:module:metagpt.provider.base_llm"}, {"id": "metagpt/provider/spark_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/spark_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/spark_api.py:names:['register_provider']"}, {"id": "{\"lineno\":26,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SparkLLM\"],\"properties\":{}}"}, {"id": "{\"lineno\":46,\"end_lineno\":168,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GetMessageFromWeb\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response_line"}, {"id": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response"}, {"id": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_async_response"}, {"id": "metagpt/provider/general_api_requestor.py:parse_stream_helper"}, {"id": "metagpt/provider/general_api_requestor.py:parse_stream"}, {"id": "metagpt/provider/general_api_requestor.py:asyncio"}, {"id": "metagpt/provider/general_api_requestor.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Generator\",\"Iterator\",\"Tuple\",\"Union\"]}}"}, {"id": "metagpt/provider/general_api_requestor.py:names:['AsyncGenerator', 'Generator', 'Iterator', 'Tuple', 'Union']"}, {"id": "metagpt/provider/general_api_requestor.py:aiohttp"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_requestor.py:requests"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_requestor.py:module:metagpt.logs"}, {"id": "metagpt/provider/general_api_requestor.py:names:['logger']"}, {"id": "metagpt/provider/general_api_requestor.py:module:metagpt.provider.general_api_base"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_base\",\"names\":[\"APIRequestor\"]}}"}, {"id": "metagpt/provider/general_api_requestor.py:names:['APIRequestor']"}, {"id": "{\"lineno\":15,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream_helper\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":35,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream\"],\"properties\":{}}"}, {"id": "{\"lineno\":38,\"end_lineno\":104,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeneralAPIRequestor\"],\"properties\":{}}"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:__init__"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_user_msg"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_assistant_msg"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_system_msg"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_system_msgs"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_default_system_msg"}, {"id": "metagpt/provider/base_llm.py:BaseLLM:_extract_assistant_rsp"}, {"id": "metagpt/provider/base_llm.py:ast.Constant:\n@Time : 2023/5/5 23:04\n@Author : alexanderwu\n@File : base_llm.py\n@Desc : mashenquan, 2023/8/22. + try catch\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:04\\n@Author : alexanderwu\\n@File : base_llm.py\\n@Desc : mashenquan, 2023/8/22. + try catch\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/base_llm.py:json"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/provider/base_llm.py:module:abc"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"id": "metagpt/provider/base_llm.py:names:['ABC', 'abstractmethod']"}, {"id": "metagpt/provider/base_llm.py:module:typing"}, {"id": "metagpt/provider/base_llm.py:names:['Optional', 'Union']"}, {"id": "metagpt/provider/base_llm.py:module:openai"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncOpenAI\"]}}"}, {"id": "metagpt/provider/base_llm.py:names:['AsyncOpenAI']"}, {"id": "metagpt/provider/base_llm.py:module:metagpt.configs.llm_config"}, {"id": "metagpt/provider/base_llm.py:names:['LLMConfig']"}, {"id": "metagpt/provider/base_llm.py:module:metagpt.logs"}, {"id": "metagpt/provider/base_llm.py:names:['logger']"}, {"id": "metagpt/provider/base_llm.py:module:metagpt.schema"}, {"id": "metagpt/provider/base_llm.py:names:['Message']"}, {"id": "metagpt/provider/base_llm.py:module:metagpt.utils.cost_manager"}, {"id": "metagpt/provider/base_llm.py:names:['CostManager']"}, {"id": "{\"lineno\":21,\"end_lineno\":151,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/constant.py"}, {"id": "metagpt/provider/constant.py:GENERAL_FUNCTION_SCHEMA"}, {"id": "metagpt/provider/constant.py:GENERAL_TOOL_CHOICE"}, {"id": "{\"lineno\":3,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERAL_FUNCTION_SCHEMA\"],\"properties\":{}}"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERAL_TOOL_CHOICE\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init__"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init_zhipuai"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_const_kwargs"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_update_costs"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion"}, {"id": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion_stream"}, {"id": "metagpt/provider/zhipuai_api.py:module:enum"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['Enum']"}, {"id": "metagpt/provider/zhipuai_api.py:openai"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"openai\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai_api.py:zhipuai"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"zhipuai\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai_api.py:module:requests"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['ConnectionError']"}, {"id": "metagpt/provider/zhipuai_api.py:module:tenacity"}, {"id": "metagpt/provider/zhipuai_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.configs.llm_config"}, {"id": "metagpt/provider/zhipuai_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['log_llm_stream', 'logger']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['BaseLLM']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "metagpt/provider/zhipuai_api.py:names:['register_provider']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.openai_api"}, {"id": "metagpt/provider/zhipuai_api.py:names:['log_and_reraise']"}, {"id": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.zhipuai.zhipu_model_api"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.zhipu_model_api\",\"names\":[\"ZhiPuModelAPI\"]}}"}, {"id": "metagpt/provider/zhipuai_api.py:names:['ZhiPuModelAPI']"}, {"id": "{\"lineno\":26,\"end_lineno\":30,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuEvent\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":116,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuAILLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:OpenAIResponse:__init__"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:__init__"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_validate_headers"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_prepare_request_raw"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_async_response"}, {"id": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response_line"}, {"id": "metagpt/provider/general_api_base.py:_console_log_level"}, {"id": "metagpt/provider/general_api_base.py:log_debug"}, {"id": "metagpt/provider/general_api_base.py:log_info"}, {"id": "metagpt/provider/general_api_base.py:log_warn"}, {"id": "metagpt/provider/general_api_base.py:logfmt"}, {"id": "metagpt/provider/general_api_base.py:_build_api_url"}, {"id": "metagpt/provider/general_api_base.py:_requests_proxies_arg"}, {"id": "metagpt/provider/general_api_base.py:_aiohttp_proxies_arg"}, {"id": "metagpt/provider/general_api_base.py:_make_session"}, {"id": "metagpt/provider/general_api_base.py:parse_stream_helper"}, {"id": "metagpt/provider/general_api_base.py:parse_stream"}, {"id": "metagpt/provider/general_api_base.py:parse_stream_async"}, {"id": "metagpt/provider/general_api_base.py:aiohttp_session"}, {"id": "metagpt/provider/general_api_base.py:logger"}, {"id": "metagpt/provider/general_api_base.py:TIMEOUT_SECS"}, {"id": "metagpt/provider/general_api_base.py:MAX_SESSION_LIFETIME_SECS"}, {"id": "metagpt/provider/general_api_base.py:MAX_CONNECTION_RETRIES"}, {"id": "metagpt/provider/general_api_base.py:_thread_context"}, {"id": "metagpt/provider/general_api_base.py:LLM_LOG"}, {"id": "metagpt/provider/general_api_base.py:api_key_to_header"}, {"id": "metagpt/provider/general_api_base.py:asyncio"}, {"id": "metagpt/provider/general_api_base.py:json"}, {"id": "metagpt/provider/general_api_base.py:os"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:platform"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:re"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:sys"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:threading"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"threading\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:time"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"time\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:module:contextlib"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"contextlib\",\"names\":[\"asynccontextmanager\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['asynccontextmanager']"}, {"id": "metagpt/provider/general_api_base.py:module:enum"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['Enum']"}, {"id": "metagpt/provider/general_api_base.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"AsyncIterator\",\"Dict\",\"Iterator\",\"Optional\",\"Tuple\",\"Union\",\"overload\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['AsyncGenerator', 'AsyncIterator', 'Dict', 'Iterator', 'Optional', 'Tuple', 'Union', 'overload']"}, {"id": "metagpt/provider/general_api_base.py:module:urllib.parse"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlsplit\",\"urlunsplit\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['urlencode', 'urlsplit', 'urlunsplit']"}, {"id": "metagpt/provider/general_api_base.py:aiohttp"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:requests"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:sys.version_info"}, {"id": "{\"lineno\":30,\"end_lineno\":33,\"type_name\":\"ast.If\",\"tokens\":[\"sys.version_info\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:logging"}, {"id": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.Import\",\"tokens\":[\"logging\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:openai"}, {"id": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.Import\",\"tokens\":[\"openai\"],\"properties\":{}}"}, {"id": "metagpt/provider/general_api_base.py:module:openai"}, {"id": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"version\"]}}"}, {"id": "metagpt/provider/general_api_base.py:names:['version']"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"logger\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"TIMEOUT_SECS\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"MAX_SESSION_LIFETIME_SECS\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"MAX_CONNECTION_RETRIES\"],\"properties\":{}}"}, {"id": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"_thread_context\"],\"properties\":{}}"}, {"id": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_LOG\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":68,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ApiType\"],\"properties\":{}}"}, {"id": "{\"lineno\":71,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"api_key_to_header\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":82,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_console_log_level\"],\"properties\":{}}"}, {"id": "{\"lineno\":85,\"end_lineno\":89,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_debug\"],\"properties\":{}}"}, {"id": "{\"lineno\":92,\"end_lineno\":96,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_info\"],\"properties\":{}}"}, {"id": "{\"lineno\":99,\"end_lineno\":102,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_warn\"],\"properties\":{}}"}, {"id": "{\"lineno\":105,\"end_lineno\":120,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"logfmt\"],\"properties\":{}}"}, {"id": "{\"lineno\":123,\"end_lineno\":150,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIResponse\"],\"properties\":{}}"}, {"id": "{\"lineno\":153,\"end_lineno\":159,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_build_api_url\"],\"properties\":{}}"}, {"id": "{\"lineno\":162,\"end_lineno\":173,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_requests_proxies_arg\"],\"properties\":{}}"}, {"id": "{\"lineno\":176,\"end_lineno\":187,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_aiohttp_proxies_arg\"],\"properties\":{}}"}, {"id": "{\"lineno\":190,\"end_lineno\":196,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_make_session\"],\"properties\":{}}"}, {"id": "{\"lineno\":199,\"end_lineno\":210,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream_helper\"],\"properties\":{}}"}, {"id": "{\"lineno\":213,\"end_lineno\":217,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream\"],\"properties\":{}}"}, {"id": "{\"lineno\":220,\"end_lineno\":224,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"parse_stream_async\"],\"properties\":{}}"}, {"id": "{\"lineno\":227,\"end_lineno\":616,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"APIRequestor\"],\"properties\":{}}"}, {"id": "{\"lineno\":620,\"end_lineno\":622,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aiohttp_session\"],\"properties\":{}}"}, {"id": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:__init__"}, {"id": "metagpt/provider/llm_provider_registry.py:register_provider"}, {"id": "metagpt/provider/llm_provider_registry.py:create_llm_instance"}, {"id": "metagpt/provider/llm_provider_registry.py:LLM_REGISTRY"}, {"id": "metagpt/provider/llm_provider_registry.py:ast.Constant:\n@Time : 2023/12/19 17:26\n@Author : alexanderwu\n@File : llm_provider_registry.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19 17:26\\n@Author : alexanderwu\\n@File : llm_provider_registry.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/llm_provider_registry.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/llm_provider_registry.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/llm_provider_registry.py:module:metagpt.provider.base_llm"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/provider/llm_provider_registry.py:names:['BaseLLM']"}, {"id": "{\"lineno\":12,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMProviderRegistry\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":31,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_provider\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":36,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"create_llm_instance\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_REGISTRY\"],\"properties\":{}}"}, {"id": "metagpt/provider/metagpt_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : metagpt_api.py\n@Desc : MetaGPT LLM provider.\n"}, {"id": "{\"lineno\":2,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : metagpt_api.py\\n@Desc : MetaGPT LLM provider.\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/metagpt_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"id": "metagpt/provider/metagpt_api.py:names:['LLMType']"}, {"id": "metagpt/provider/metagpt_api.py:module:metagpt.provider"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"OpenAILLM\"]}}"}, {"id": "metagpt/provider/metagpt_api.py:names:['OpenAILLM']"}, {"id": "metagpt/provider/metagpt_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/metagpt_api.py:names:['register_provider']"}, {"id": "{\"lineno\":14,\"end_lineno\":15,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MetaGPTLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:__init__"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:_make_client_kwargs"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:_calc_usage"}, {"id": "metagpt/provider/open_llm_api.py:OpenLLM:_update_costs"}, {"id": "metagpt/provider/open_llm_api.py:module:openai.types"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['CompletionUsage']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['LLMConfig', 'LLMType']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.logs"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['logger']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.provider.llm_provider_registry"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['register_provider']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.provider.openai_api"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['OpenAILLM']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.utils.cost_manager"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"Costs\",\"TokenCostManager\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['Costs', 'TokenCostManager']"}, {"id": "metagpt/provider/open_llm_api.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"id": "metagpt/provider/open_llm_api.py:names:['count_message_tokens', 'count_string_tokens']"}, {"id": "{\"lineno\":16,\"end_lineno\":47,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenLLM\"],\"properties\":{}}"}, {"id": "metagpt/provider/human_provider.py:HumanProvider:__init__"}, {"id": "metagpt/provider/human_provider.py:ast.Constant:\nFilename: MetaGPT/metagpt/provider/human_provider.py\nCreated Date: Wednesday, November 8th 2023, 11:55:46 pm\nAuthor: garylin2099\n"}, {"id": "{\"lineno\":1,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\nFilename: MetaGPT/metagpt/provider/human_provider.py\\nCreated Date: Wednesday, November 8th 2023, 11:55:46 pm\\nAuthor: garylin2099\\n\"],\"properties\":{}}"}, {"id": "metagpt/provider/human_provider.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/provider/human_provider.py:names:['Optional']"}, {"id": "metagpt/provider/human_provider.py:module:metagpt.configs.llm_config"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"id": "metagpt/provider/human_provider.py:names:['LLMConfig']"}, {"id": "metagpt/provider/human_provider.py:module:metagpt.logs"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/provider/human_provider.py:names:['logger']"}, {"id": "metagpt/provider/human_provider.py:module:metagpt.provider.base_llm"}, {"id": "metagpt/provider/human_provider.py:names:['BaseLLM']"}, {"id": "{\"lineno\":13,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"HumanProvider\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:__init__"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:json"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterator\"]}}"}, {"id": "metagpt/provider/zhipuai/async_sse_client.py:names:['Any', 'Iterator']"}, {"id": "{\"lineno\":10,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AsyncSSEClient\"],\"properties\":{}}"}, {"id": "metagpt/provider/zhipuai/__init__.py"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:json"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:module:zhipuai"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai\",\"names\":[\"ZhipuAI\"]}}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['ZhipuAI']"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:module:zhipuai.core._http_client"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai.core._http_client\",\"names\":[\"ZHIPUAI_DEFAULT_TIMEOUT\"]}}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['ZHIPUAI_DEFAULT_TIMEOUT']"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:module:metagpt.provider.general_api_requestor"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['GeneralAPIRequestor']"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:module:metagpt.provider.zhipuai.async_sse_client"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.async_sse_client\",\"names\":[\"AsyncSSEClient\"]}}"}, {"id": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['AsyncSSEClient']"}, {"id": "{\"lineno\":14,\"end_lineno\":54,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuModelAPI\"],\"properties\":{}}"}, {"id": "metagpt/provider/postprocess/__init__.py"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:module:typing"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:names:['Union']"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:module:metagpt.utils.repair_llm_raw_output"}, {"id": "{\"lineno\":7,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"RepairType\",\"extract_content_from_output\",\"repair_llm_raw_output\",\"retry_parse_json_text\"]}}"}, {"id": "metagpt/provider/postprocess/base_postprocess_plugin.py:names:['RepairType', 'extract_content_from_output', 'repair_llm_raw_output', 'retry_parse_json_text']"}, {"id": "{\"lineno\":15,\"end_lineno\":69,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BasePostProcessPlugin\"],\"properties\":{}}"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:llm_output_postprocess"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:module:typing"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:names:['Union']"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:module:metagpt.provider.postprocess.base_postprocess_plugin"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.base_postprocess_plugin\",\"names\":[\"BasePostProcessPlugin\"]}}"}, {"id": "metagpt/provider/postprocess/llm_output_postprocess.py:names:['BasePostProcessPlugin']"}, {"id": "{\"lineno\":10,\"end_lineno\":20,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"llm_output_postprocess\"],\"properties\":{}}"}, {"id": "metagpt/management/__init__.py"}, {"id": "metagpt/management/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:58\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:58\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/management/skill_manager.py:SkillManager:__init__"}, {"id": "metagpt/management/skill_manager.py:Skill"}, {"id": "metagpt/management/skill_manager.py:ast.Constant:\n@Time : 2023/6/5 01:44\n@Author : alexanderwu\n@File : skill_manager.py\n@Modified By: mashenquan, 2023/8/20. Remove useless `llm`\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/5 01:44\\n@Author : alexanderwu\\n@File : skill_manager.py\\n@Modified By: mashenquan, 2023/8/20. Remove useless `llm`\\n\"],\"properties\":{}}"}, {"id": "metagpt/management/skill_manager.py:module:metagpt.actions"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/management/skill_manager.py:names:['Action']"}, {"id": "metagpt/management/skill_manager.py:module:metagpt.const"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PROMPT_PATH\"]}}"}, {"id": "metagpt/management/skill_manager.py:names:['PROMPT_PATH']"}, {"id": "metagpt/management/skill_manager.py:module:metagpt.document_store.chromadb_store"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.chromadb_store\",\"names\":[\"ChromaStore\"]}}"}, {"id": "metagpt/management/skill_manager.py:names:['ChromaStore']"}, {"id": "metagpt/management/skill_manager.py:module:metagpt.logs"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/management/skill_manager.py:names:['logger']"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Assign\",\"tokens\":[\"Skill\"],\"properties\":{}}"}, {"id": "{\"lineno\":17,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillManager\"],\"properties\":{}}"}, {"id": "metagpt/management/skill_manager.py:__name__:__main__"}, {"id": "{\"lineno\":77,\"end_lineno\":79,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/roles/engineer.py:Engineer:__init__"}, {"id": "metagpt/roles/engineer.py:Engineer:_parse_tasks"}, {"id": "metagpt/roles/engineer.py:Engineer:_act_sp_with_cr"}, {"id": "metagpt/roles/engineer.py:Engineer:_act"}, {"id": "metagpt/roles/engineer.py:Engineer:_act_write_code"}, {"id": "metagpt/roles/engineer.py:Engineer:_act_summarize"}, {"id": "metagpt/roles/engineer.py:Engineer:_act_code_plan_and_change"}, {"id": "metagpt/roles/engineer.py:Engineer:_is_pass"}, {"id": "metagpt/roles/engineer.py:Engineer:_think"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_coding_context"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_coding_doc"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_code_actions"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_summarize_actions"}, {"id": "metagpt/roles/engineer.py:Engineer:_new_code_plan_and_change_action"}, {"id": "metagpt/roles/engineer.py:IS_PASS_PROMPT"}, {"id": "metagpt/roles/engineer.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : engineer.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116:\n 1. Modify the data type of the `cause_by` value in the `Message` to a string, and utilize the new message\n distribution feature for message filtering.\n 2. Consolidate message reception and processing logic within `_observe`.\n 3. Fix bug: Add logic for handling asynchronous message processing when messages are not ready.\n 4. Supplemented the external transmission of internal messages.\n@Modified By: mashenquan, 2023-11-27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.5 of RFC 135, add incremental iteration functionality.\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\n of SummarizeCode.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":18,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : engineer.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116:\\n 1. Modify the data type of the `cause_by` value in the `Message` to a string, and utilize the new message\\n distribution feature for message filtering.\\n 2. Consolidate message reception and processing logic within `_observe`.\\n 3. Fix bug: Add logic for handling asynchronous message processing when messages are not ready.\\n 4. Supplemented the external transmission of internal messages.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.5 of RFC 135, add incremental iteration functionality.\\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\\n of SummarizeCode.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/engineer.py:module:__future__"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['annotations']"}, {"id": "metagpt/roles/engineer.py:json"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/roles/engineer.py:os"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/roles/engineer.py:module:collections"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['defaultdict']"}, {"id": "metagpt/roles/engineer.py:module:pathlib"}, {"id": "metagpt/roles/engineer.py:names:['Path']"}, {"id": "metagpt/roles/engineer.py:module:typing"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['Set']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"WriteCode\",\"WriteCodeReview\",\"WriteTasks\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['Action', 'WriteCode', 'WriteCodeReview', 'WriteTasks']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions.fix_bug"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['FixBug']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions.project_management_an"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['REFINED_TASK_LIST', 'TASK_LIST']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions.summarize_code"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['SummarizeCode']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.actions.write_code_plan_and_change_an"}, {"id": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"WriteCodePlanAndChange\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['WriteCodePlanAndChange']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.const"}, {"id": "{\"lineno\":33,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_FILENAME\",\"REQUIREMENT_FILENAME\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['CODE_PLAN_AND_CHANGE_FILE_REPO', 'CODE_PLAN_AND_CHANGE_FILENAME', 'REQUIREMENT_FILENAME', 'SYSTEM_DESIGN_FILE_REPO', 'TASK_FILE_REPO']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.logs"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['logger']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.roles"}, {"id": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['Role']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.schema"}, {"id": "{\"lineno\":42,\"end_lineno\":49,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['CodePlanAndChangeContext', 'CodeSummarizeContext', 'CodingContext', 'Document', 'Documents', 'Message']"}, {"id": "metagpt/roles/engineer.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":50,\"end_lineno\":50,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"any_to_str_set\"]}}"}, {"id": "metagpt/roles/engineer.py:names:['any_to_name', 'any_to_str', 'any_to_str_set']"}, {"id": "{\"lineno\":52,\"end_lineno\":59,\"type_name\":\"ast.Assign\",\"tokens\":[\"IS_PASS_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":62,\"end_lineno\":360,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Engineer\"],\"properties\":{}}"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:__init__"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_write_test"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_run_code"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_debug_error"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_act"}, {"id": "metagpt/roles/qa_engineer.py:QaEngineer:_observe"}, {"id": "metagpt/roles/qa_engineer.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : qa_engineer.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, modify the data\n type of the `cause_by` value in the `Message` to a string, and utilize the new message filtering feature.\n@Modified By: mashenquan, 2023-11-27.\n 1. Following the think-act principle, solidify the task parameters when creating the\n WriteTest/RunCode/DebugError object, rather than passing them in when calling the run function.\n 2. According to Section 2.2.3.5.7 of RFC 135, change the method of transferring files from using the Message\n to using file references.\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\n of SummarizeCode.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : qa_engineer.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, modify the data\\n type of the `cause_by` value in the `Message` to a string, and utilize the new message filtering feature.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. Following the think-act principle, solidify the task parameters when creating the\\n WriteTest/RunCode/DebugError object, rather than passing them in when calling the run function.\\n 2. According to Section 2.2.3.5.7 of RFC 135, change the method of transferring files from using the Message\\n to using file references.\\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\\n of SummarizeCode.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.actions"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"DebugError\",\"RunCode\",\"WriteTest\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['DebugError', 'RunCode', 'WriteTest']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.actions.summarize_code"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['SummarizeCode']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.const"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_NONE\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['MESSAGE_ROUTE_TO_NONE']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.logs"}, {"id": "metagpt/roles/qa_engineer.py:names:['logger']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.roles"}, {"id": "metagpt/roles/qa_engineer.py:names:['Role']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.schema"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Message\",\"RunCodeContext\",\"TestingContext\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['Document', 'Message', 'RunCodeContext', 'TestingContext']"}, {"id": "metagpt/roles/qa_engineer.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str_set\",\"parse_recipient\"]}}"}, {"id": "metagpt/roles/qa_engineer.py:names:['any_to_str_set', 'parse_recipient']"}, {"id": "{\"lineno\":27,\"end_lineno\":181,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QaEngineer\"],\"properties\":{}}"}, {"id": "metagpt/roles/teacher.py:Teacher:__init__"}, {"id": "metagpt/roles/teacher.py:Teacher:_think"}, {"id": "metagpt/roles/teacher.py:Teacher:_react"}, {"id": "metagpt/roles/teacher.py:ast.Constant:\n@Time : 2023/7/27\n@Author : mashenquan\n@File : teacher.py\n@Desc : Used by Agent Store\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/27\\n@Author : mashenquan\\n@File : teacher.py\\n@Desc : Used by Agent Store\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/teacher.py:re"}, {"id": "metagpt/roles/teacher.py:module:metagpt.actions"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['UserRequirement']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.actions.write_teaching_plan"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_teaching_plan\",\"names\":[\"TeachingPlanBlock\",\"WriteTeachingPlanPart\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['TeachingPlanBlock', 'WriteTeachingPlanPart']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.logs"}, {"id": "metagpt/roles/teacher.py:names:['logger']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.roles"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['Role']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.schema"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['Message']"}, {"id": "metagpt/roles/teacher.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"awrite\"]}}"}, {"id": "metagpt/roles/teacher.py:names:['any_to_str', 'awrite']"}, {"id": "{\"lineno\":22,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Teacher\"],\"properties\":{}}"}, {"id": "metagpt/roles/product_manager.py:ProductManager:__init__"}, {"id": "metagpt/roles/product_manager.py:ProductManager:_think"}, {"id": "metagpt/roles/product_manager.py:ProductManager:_observe"}, {"id": "metagpt/roles/product_manager.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : product_manager.py\n@Modified By: mashenquan, 2023/11/27. Add `PrepareDocuments` action according to Section 2.2.3.5.1 of RFC 135.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : product_manager.py\\n@Modified By: mashenquan, 2023/11/27. Add `PrepareDocuments` action according to Section 2.2.3.5.1 of RFC 135.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/product_manager.py:module:metagpt.actions"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\",\"WritePRD\"]}}"}, {"id": "metagpt/roles/product_manager.py:names:['UserRequirement', 'WritePRD']"}, {"id": "metagpt/roles/product_manager.py:module:metagpt.actions.prepare_documents"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.prepare_documents\",\"names\":[\"PrepareDocuments\"]}}"}, {"id": "metagpt/roles/product_manager.py:names:['PrepareDocuments']"}, {"id": "metagpt/roles/product_manager.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/product_manager.py:names:['Role']"}, {"id": "metagpt/roles/product_manager.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\"]}}"}, {"id": "metagpt/roles/product_manager.py:names:['any_to_name']"}, {"id": "{\"lineno\":16,\"end_lineno\":51,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProductManager\"],\"properties\":{}}"}, {"id": "metagpt/roles/sales.py:Sales:__init__"}, {"id": "metagpt/roles/sales.py:Sales:_set_store"}, {"id": "metagpt/roles/sales.py:ast.Constant:\n@Time : 2023/5/25 17:21\n@Author : alexanderwu\n@File : sales.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 17:21\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/sales.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/roles/sales.py:names:['Optional']"}, {"id": "metagpt/roles/sales.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/roles/sales.py:names:['Field']"}, {"id": "metagpt/roles/sales.py:module:metagpt.actions"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\",\"UserRequirement\"]}}"}, {"id": "metagpt/roles/sales.py:names:['SearchAndSummarize', 'UserRequirement']"}, {"id": "metagpt/roles/sales.py:module:metagpt.document_store.base_store"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"id": "metagpt/roles/sales.py:names:['BaseStore']"}, {"id": "metagpt/roles/sales.py:module:metagpt.roles"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/sales.py:names:['Role']"}, {"id": "metagpt/roles/sales.py:module:metagpt.tools"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"id": "metagpt/roles/sales.py:names:['SearchEngineType']"}, {"id": "{\"lineno\":19,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Sales\"],\"properties\":{}}"}, {"id": "metagpt/roles/searcher.py:Searcher:__init__"}, {"id": "metagpt/roles/searcher.py:Searcher:_act_sp"}, {"id": "metagpt/roles/searcher.py:Searcher:_act"}, {"id": "metagpt/roles/searcher.py:ast.Constant:\n@Time : 2023/5/23 17:25\n@Author : alexanderwu\n@File : searcher.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 17:25\\n@Author : alexanderwu\\n@File : searcher.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/searcher.py:module:pydantic"}, {"id": "metagpt/roles/searcher.py:names:['Field']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.actions"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['SearchAndSummarize']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['ActionNode']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.actions.action_output"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['ActionOutput']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.logs"}, {"id": "metagpt/roles/searcher.py:names:['logger']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.roles"}, {"id": "metagpt/roles/searcher.py:names:['Role']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.schema"}, {"id": "metagpt/roles/searcher.py:names:['Message']"}, {"id": "metagpt/roles/searcher.py:module:metagpt.tools"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"id": "metagpt/roles/searcher.py:names:['SearchEngineType']"}, {"id": "{\"lineno\":22,\"end_lineno\":78,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Searcher\"],\"properties\":{}}"}, {"id": "metagpt/roles/assistant.py:Assistant:__init__"}, {"id": "metagpt/roles/assistant.py:Assistant:_plan"}, {"id": "metagpt/roles/assistant.py:ast.Constant:\n@Time : 2023/8/7\n@Author : mashenquan\n@File : assistant.py\n@Desc : I am attempting to incorporate certain symbol concepts from UML into MetaGPT, enabling it to have the\n ability to freely construct flows through symbol concatenation. Simultaneously, I am also striving to\n make these symbols configurable and standardized, making the process of building flows more convenient.\n For more about `fork` node in activity diagrams, see: `https://www.uml-diagrams.org/activity-diagrams.html`\n This file defines a `fork` style meta role capable of generating arbitrary roles at runtime based on a\n configuration file.\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false\n indicates that further reasoning cannot continue.\n\n"}, {"id": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/7\\n@Author : mashenquan\\n@File : assistant.py\\n@Desc : I am attempting to incorporate certain symbol concepts from UML into MetaGPT, enabling it to have the\\n ability to freely construct flows through symbol concatenation. Simultaneously, I am also striving to\\n make these symbols configurable and standardized, making the process of building flows more convenient.\\n For more about `fork` node in activity diagrams, see: `https://www.uml-diagrams.org/activity-diagrams.html`\\n This file defines a `fork` style meta role capable of generating arbitrary roles at runtime based on a\\n configuration file.\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false\\n indicates that further reasoning cannot continue.\\n\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/assistant.py:module:enum"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Enum']"}, {"id": "metagpt/roles/assistant.py:module:pathlib"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Path']"}, {"id": "metagpt/roles/assistant.py:module:typing"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Optional']"}, {"id": "metagpt/roles/assistant.py:module:pydantic"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Field']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.actions.skill_action"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.skill_action\",\"names\":[\"ArgumentsParingAction\",\"SkillAction\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['ArgumentsParingAction', 'SkillAction']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.actions.talk_action"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.talk_action\",\"names\":[\"TalkAction\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['TalkAction']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.learn.skill_loader"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"SkillsDeclaration\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['SkillsDeclaration']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.logs"}, {"id": "metagpt/roles/assistant.py:names:['logger']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.memory.brain_memory"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.brain_memory\",\"names\":[\"BrainMemory\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['BrainMemory']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.roles"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Role']"}, {"id": "metagpt/roles/assistant.py:module:metagpt.schema"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/roles/assistant.py:names:['Message']"}, {"id": "{\"lineno\":32,\"end_lineno\":34,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MessageType\"],\"properties\":{}}"}, {"id": "{\"lineno\":37,\"end_lineno\":139,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Assistant\"],\"properties\":{}}"}, {"id": "metagpt/roles/__init__.py"}, {"id": "metagpt/roles/__init__.py:__all__"}, {"id": "metagpt/roles/__init__.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Role']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.architect"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.architect\",\"names\":[\"Architect\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Architect']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.project_manager"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.project_manager\",\"names\":[\"ProjectManager\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['ProjectManager']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.product_manager"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.product_manager\",\"names\":[\"ProductManager\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['ProductManager']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.engineer"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.engineer\",\"names\":[\"Engineer\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Engineer']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.qa_engineer"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.qa_engineer\",\"names\":[\"QaEngineer\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['QaEngineer']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.searcher"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.searcher\",\"names\":[\"Searcher\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Searcher']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.sales"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.sales\",\"names\":[\"Sales\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['Sales']"}, {"id": "metagpt/roles/__init__.py:module:metagpt.roles.customer_service"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.customer_service\",\"names\":[\"CustomerService\"]}}"}, {"id": "metagpt/roles/__init__.py:names:['CustomerService']"}, {"id": "{\"lineno\":20,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/roles/role.py:Role:__init__"}, {"id": "metagpt/roles/role.py:Role:_reset"}, {"id": "metagpt/roles/role.py:Role:_setting"}, {"id": "metagpt/roles/role.py:Role:_check_actions"}, {"id": "metagpt/roles/role.py:Role:_init_action"}, {"id": "metagpt/roles/role.py:Role:_set_react_mode"}, {"id": "metagpt/roles/role.py:Role:_watch"}, {"id": "metagpt/roles/role.py:Role:_set_state"}, {"id": "metagpt/roles/role.py:Role:_get_prefix"}, {"id": "metagpt/roles/role.py:Role:_think"}, {"id": "metagpt/roles/role.py:Role:_act"}, {"id": "metagpt/roles/role.py:Role:_observe"}, {"id": "metagpt/roles/role.py:Role:_react"}, {"id": "metagpt/roles/role.py:Role:_act_by_order"}, {"id": "metagpt/roles/role.py:Role:_plan_and_act"}, {"id": "metagpt/roles/role.py:PREFIX_TEMPLATE"}, {"id": "metagpt/roles/role.py:CONSTRAINT_TEMPLATE"}, {"id": "metagpt/roles/role.py:STATE_TEMPLATE"}, {"id": "metagpt/roles/role.py:ROLE_TEMPLATE"}, {"id": "metagpt/roles/role.py:ast.Constant:\n@Time : 2023/5/11 14:42\n@Author : alexanderwu\n@File : role.py\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116:\n 1. Merge the `recv` functionality into the `_observe` function. Future message reading operations will be\n consolidated within the `_observe` function.\n 2. Standardize the message filtering for string label matching. Role objects can access the message labels\n they've subscribed to through the `subscribed_tags` property.\n 3. Move the message receive buffer from the global variable `self.rc.env.memory` to the role's private variable\n `self.rc.msg_buffer` for easier message identification and asynchronous appending of messages.\n 4. Standardize the way messages are passed: `publish_message` sends messages out, while `put_message` places\n messages into the Role object's private message receive buffer. There are no other message transmit methods.\n 5. Standardize the parameters for the `run` function: the `test_message` parameter is used for testing purposes\n only. In the normal workflow, you should use `publish_message` or `put_message` to transmit messages.\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\n functionality is to be consolidated into the `Environment` class.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":21,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:42\\n@Author : alexanderwu\\n@File : role.py\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116:\\n 1. Merge the `recv` functionality into the `_observe` function. Future message reading operations will be\\n consolidated within the `_observe` function.\\n 2. Standardize the message filtering for string label matching. Role objects can access the message labels\\n they've subscribed to through the `subscribed_tags` property.\\n 3. Move the message receive buffer from the global variable `self.rc.env.memory` to the role's private variable\\n `self.rc.msg_buffer` for easier message identification and asynchronous appending of messages.\\n 4. Standardize the way messages are passed: `publish_message` sends messages out, while `put_message` places\\n messages into the Role object's private message receive buffer. There are no other message transmit methods.\\n 5. Standardize the parameters for the `run` function: the `test_message` parameter is used for testing purposes\\n only. In the normal workflow, you should use `publish_message` or `put_message` to transmit messages.\\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\\n functionality is to be consolidated into the `Environment` class.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/role.py:module:__future__"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/roles/role.py:names:['annotations']"}, {"id": "metagpt/roles/role.py:module:enum"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/roles/role.py:names:['Enum']"}, {"id": "metagpt/roles/role.py:module:typing"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterable\",\"Optional\",\"Set\",\"Type\",\"Union\"]}}"}, {"id": "metagpt/roles/role.py:names:['Any', 'Iterable', 'Optional', 'Set', 'Type', 'Union']"}, {"id": "metagpt/roles/role.py:module:pydantic"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"id": "metagpt/roles/role.py:names:['BaseModel', 'ConfigDict', 'Field', 'SerializeAsAny', 'model_validator']"}, {"id": "metagpt/roles/role.py:module:metagpt.actions"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"id": "metagpt/roles/role.py:names:['Action', 'ActionOutput']"}, {"id": "metagpt/roles/role.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/roles/role.py:names:['ActionNode']"}, {"id": "metagpt/roles/role.py:module:metagpt.actions.add_requirement"}, {"id": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/roles/role.py:names:['UserRequirement']"}, {"id": "metagpt/roles/role.py:module:metagpt.context_mixin"}, {"id": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"id": "metagpt/roles/role.py:names:['ContextMixin']"}, {"id": "metagpt/roles/role.py:module:metagpt.logs"}, {"id": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/roles/role.py:names:['logger']"}, {"id": "metagpt/roles/role.py:module:metagpt.memory"}, {"id": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"id": "metagpt/roles/role.py:names:['Memory']"}, {"id": "metagpt/roles/role.py:module:metagpt.provider"}, {"id": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"HumanProvider\"]}}"}, {"id": "metagpt/roles/role.py:names:['HumanProvider']"}, {"id": "metagpt/roles/role.py:module:metagpt.schema"}, {"id": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"MessageQueue\",\"SerializationMixin\"]}}"}, {"id": "metagpt/roles/role.py:names:['Message', 'MessageQueue', 'SerializationMixin']"}, {"id": "metagpt/roles/role.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"role_raise_decorator\"]}}"}, {"id": "metagpt/roles/role.py:names:['any_to_name', 'any_to_str', 'role_raise_decorator']"}, {"id": "metagpt/roles/role.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/roles/role.py:names:['ProjectRepo']"}, {"id": "metagpt/roles/role.py:module:metagpt.utils.repair_llm_raw_output"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"extract_state_value_from_output\"]}}"}, {"id": "metagpt/roles/role.py:names:['extract_state_value_from_output']"}, {"id": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"PREFIX_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONSTRAINT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":45,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"STATE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":62,\"end_lineno\":70,\"type_name\":\"ast.Assign\",\"tokens\":[\"ROLE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":73,\"end_lineno\":80,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleReactMode\"],\"properties\":{}}"}, {"id": "{\"lineno\":83,\"end_lineno\":118,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleContext\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":556,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Role\"],\"properties\":{}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:__init__"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:_act"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:ast.Constant:\n@Time : 2023/9/21 14:10:05\n@Author : Stitch-z\n@File : invoice_ocr_assistant.py\n"}, {"id": "{\"lineno\":4,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 14:10:05\\n@Author : Stitch-z\\n@File : invoice_ocr_assistant.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:json"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:pathlib"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['Path']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:typing"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['Optional']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:pandas as pd"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:pydantic"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['BaseModel']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.actions.invoice_ocr"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.invoice_ocr\",\"names\":[\"GenerateTable\",\"InvoiceOCR\",\"ReplyQuestion\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['GenerateTable', 'InvoiceOCR', 'ReplyQuestion']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.prompts.invoice_ocr"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"INVOICE_OCR_SUCCESS\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['INVOICE_OCR_SUCCESS']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['Role', 'RoleReactMode']"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.schema"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/roles/invoice_ocr_assistant.py:names:['Message']"}, {"id": "{\"lineno\":23,\"end_lineno\":24,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoicePath\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":28,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OCRResults\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceData\"],\"properties\":{}}"}, {"id": "{\"lineno\":35,\"end_lineno\":36,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReplyData\"],\"properties\":{}}"}, {"id": "{\"lineno\":39,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceOCRAssistant\"],\"properties\":{}}"}, {"id": "metagpt/roles/architect.py:Architect:__init__"}, {"id": "metagpt/roles/architect.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : architect.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : architect.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/architect.py:module:metagpt.actions"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WritePRD\"]}}"}, {"id": "metagpt/roles/architect.py:names:['WritePRD']"}, {"id": "metagpt/roles/architect.py:module:metagpt.actions.design_api"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"id": "metagpt/roles/architect.py:names:['WriteDesign']"}, {"id": "metagpt/roles/architect.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/architect.py:names:['Role']"}, {"id": "{\"lineno\":14,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Architect\"],\"properties\":{}}"}, {"id": "metagpt/roles/customer_service.py:DESC"}, {"id": "metagpt/roles/customer_service.py:ast.Constant:\n@Time : 2023/5/25 17:21\n@Author : alexanderwu\n@File : sales.py\n"}, {"id": "metagpt/roles/customer_service.py:module:typing"}, {"id": "metagpt/roles/customer_service.py:names:['Optional']"}, {"id": "metagpt/roles/customer_service.py:module:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/roles/customer_service.py:names:['Field']"}, {"id": "metagpt/roles/customer_service.py:module:metagpt.document_store.base_store"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"id": "metagpt/roles/customer_service.py:names:['BaseStore']"}, {"id": "metagpt/roles/customer_service.py:module:metagpt.roles"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Sales\"]}}"}, {"id": "metagpt/roles/customer_service.py:names:['Sales']"}, {"id": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"DESC\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CustomerService\"],\"properties\":{}}"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:__init__"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:_think"}, {"id": "metagpt/roles/sk_agent.py:SkAgent:_act"}, {"id": "metagpt/roles/sk_agent.py:ast.Constant:\n@Time : 2023/9/13 12:23\n@Author : femto Zheng\n@File : sk_agent.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, utilize the new message\n distribution feature for message filtering.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:23\\n@Author : femto Zheng\\n@File : sk_agent.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, utilize the new message\\n distribution feature for message filtering.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/sk_agent.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Union\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['Any', 'Callable', 'Union']"}, {"id": "metagpt/roles/sk_agent.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['Field']"}, {"id": "metagpt/roles/sk_agent.py:module:semantic_kernel"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel\",\"names\":[\"Kernel\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['Kernel']"}, {"id": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning\",\"names\":[\"SequentialPlanner\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['SequentialPlanner']"}, {"id": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning.action_planner.action_planner"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.action_planner.action_planner\",\"names\":[\"ActionPlanner\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['ActionPlanner']"}, {"id": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning.basic_planner"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.basic_planner\",\"names\":[\"BasicPlanner\",\"Plan\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['BasicPlanner', 'Plan']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.actions"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['UserRequirement']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.actions.execute_task"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.execute_task\",\"names\":[\"ExecuteTask\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['ExecuteTask']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.logs"}, {"id": "metagpt/roles/sk_agent.py:names:['logger']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.roles"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['Role']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.schema"}, {"id": "metagpt/roles/sk_agent.py:names:['Message']"}, {"id": "metagpt/roles/sk_agent.py:module:metagpt.utils.make_sk_kernel"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.make_sk_kernel\",\"names\":[\"make_sk_kernel\"]}}"}, {"id": "metagpt/roles/sk_agent.py:names:['make_sk_kernel']"}, {"id": "{\"lineno\":26,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkAgent\"],\"properties\":{}}"}, {"id": "metagpt/roles/prompt.py:PREFIX"}, {"id": "metagpt/roles/prompt.py:FORMAT_INSTRUCTIONS"}, {"id": "metagpt/roles/prompt.py:SUFFIX"}, {"id": "metagpt/roles/prompt.py:ast.Constant:\n@Time : 2023/5/18 22:43\n@Author : alexanderwu\n@File : prompt.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/18 22:43\\n@Author : alexanderwu\\n@File : prompt.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/prompt.py:module:enum"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/roles/prompt.py:names:['Enum']"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Assign\",\"tokens\":[\"PREFIX\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_INSTRUCTIONS\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUFFIX\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":46,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PromptString\"],\"properties\":{}}"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:__init__"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_handle_directory"}, {"id": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_act"}, {"id": "metagpt/roles/tutorial_assistant.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/tutorial_assistant.py:module:datetime"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['datetime']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:typing"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['Dict']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.actions.write_tutorial"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_tutorial\",\"names\":[\"WriteContent\",\"WriteDirectory\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['WriteContent', 'WriteDirectory']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.const"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TUTORIAL_PATH\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['TUTORIAL_PATH']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.logs"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['logger']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['Role', 'RoleReactMode']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.schema"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['Message']"}, {"id": "metagpt/roles/tutorial_assistant.py:module:metagpt.utils.file"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"id": "metagpt/roles/tutorial_assistant.py:names:['File']"}, {"id": "{\"lineno\":20,\"end_lineno\":94,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TutorialAssistant\"],\"properties\":{}}"}, {"id": "metagpt/roles/project_manager.py:ProjectManager:__init__"}, {"id": "metagpt/roles/project_manager.py:ast.Constant:\n@Time : 2023/5/11 15:04\n@Author : alexanderwu\n@File : project_manager.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 15:04\\n@Author : alexanderwu\\n@File : project_manager.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/project_manager.py:module:metagpt.actions"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteTasks\"]}}"}, {"id": "metagpt/roles/project_manager.py:names:['WriteTasks']"}, {"id": "metagpt/roles/project_manager.py:module:metagpt.actions.design_api"}, {"id": "metagpt/roles/project_manager.py:names:['WriteDesign']"}, {"id": "metagpt/roles/project_manager.py:module:metagpt.roles.role"}, {"id": "metagpt/roles/project_manager.py:names:['Role']"}, {"id": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProjectManager\"],\"properties\":{}}"}, {"id": "metagpt/roles/researcher.py:Researcher:__init__"}, {"id": "metagpt/roles/researcher.py:Researcher:_think"}, {"id": "metagpt/roles/researcher.py:Researcher:_act"}, {"id": "metagpt/roles/researcher.py:ast.Constant:\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\n"}, {"id": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\\n\"],\"properties\":{}}"}, {"id": "metagpt/roles/researcher.py:asyncio"}, {"id": "metagpt/roles/researcher.py:re"}, {"id": "metagpt/roles/researcher.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['BaseModel']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.actions"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"CollectLinks\",\"ConductResearch\",\"WebBrowseAndSummarize\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['Action', 'CollectLinks', 'ConductResearch', 'WebBrowseAndSummarize']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.actions.research"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"get_research_system_text\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['get_research_system_text']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.const"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"RESEARCH_PATH\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['RESEARCH_PATH']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.logs"}, {"id": "metagpt/roles/researcher.py:names:['logger']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.roles.role"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"id": "metagpt/roles/researcher.py:names:['Role', 'RoleReactMode']"}, {"id": "metagpt/roles/researcher.py:module:metagpt.schema"}, {"id": "metagpt/roles/researcher.py:names:['Message']"}, {"id": "{\"lineno\":21,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Report\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":116,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Researcher\"],\"properties\":{}}"}, {"id": "metagpt/roles/researcher.py:__name__:__main__"}, {"id": "{\"lineno\":119,\"end_lineno\":126,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/utils/serialize.py"}, {"id": "metagpt/utils/serialize.py:actionoutout_schema_to_mapping"}, {"id": "metagpt/utils/serialize.py:actionoutput_mapping_to_str"}, {"id": "metagpt/utils/serialize.py:actionoutput_str_to_mapping"}, {"id": "metagpt/utils/serialize.py:serialize_message"}, {"id": "metagpt/utils/serialize.py:deserialize_message"}, {"id": "metagpt/utils/serialize.py:copy"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"copy\"],\"properties\":{}}"}, {"id": "metagpt/utils/serialize.py:pickle"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"pickle\"],\"properties\":{}}"}, {"id": "metagpt/utils/serialize.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"id": "metagpt/utils/serialize.py:names:['import_class']"}, {"id": "{\"lineno\":11,\"end_lineno\":40,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutout_schema_to_mapping\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":47,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutput_mapping_to_str\"],\"properties\":{}}"}, {"id": "{\"lineno\":50,\"end_lineno\":57,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutput_str_to_mapping\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":71,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"serialize_message\"],\"properties\":{}}"}, {"id": "{\"lineno\":74,\"end_lineno\":83,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"deserialize_message\"],\"properties\":{}}"}, {"id": "metagpt/utils/project_repo.py:DocFileRepositories:__init__"}, {"id": "metagpt/utils/project_repo.py:ResourceFileRepositories:__init__"}, {"id": "metagpt/utils/project_repo.py:ProjectRepo:__init__"}, {"id": "metagpt/utils/project_repo.py:ast.Constant:\n@Time : 2024/1/8\n@Author : mashenquan\n@File : project_repo.py\n@Desc : Wrapper for GitRepository and FileRepository of project.\n Implementation of Chapter 4.6 of https://deepwisdom.feishu.cn/wiki/CUK4wImd7id9WlkQBNscIe9cnqh\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/8\\n@Author : mashenquan\\n@File : project_repo.py\\n@Desc : Wrapper for GitRepository and FileRepository of project.\\n Implementation of Chapter 4.6 of https://deepwisdom.feishu.cn/wiki/CUK4wImd7id9WlkQBNscIe9cnqh\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/project_repo.py:module:__future__"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/utils/project_repo.py:names:['annotations']"}, {"id": "metagpt/utils/project_repo.py:module:pathlib"}, {"id": "metagpt/utils/project_repo.py:names:['Path']"}, {"id": "metagpt/utils/project_repo.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CLASS_VIEW_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\",\"CODE_SUMMARIES_FILE_REPO\",\"CODE_SUMMARIES_PDF_FILE_REPO\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"DATA_API_DESIGN_FILE_REPO\",\"DOCS_FILE_REPO\",\"GRAPH_REPO_FILE_REPO\",\"PRD_PDF_FILE_REPO\",\"PRDS_FILE_REPO\",\"REQUIREMENT_FILENAME\",\"RESOURCES_FILE_REPO\",\"SD_OUTPUT_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"SYSTEM_DESIGN_PDF_FILE_REPO\",\"TASK_FILE_REPO\",\"TASK_PDF_FILE_REPO\",\"TEST_CODES_FILE_REPO\",\"TEST_OUTPUTS_FILE_REPO\",\"VISUAL_GRAPH_REPO_FILE_REPO\"]}}"}, {"id": "metagpt/utils/project_repo.py:names:['CLASS_VIEW_FILE_REPO', 'CODE_PLAN_AND_CHANGE_FILE_REPO', 'CODE_PLAN_AND_CHANGE_PDF_FILE_REPO', 'CODE_SUMMARIES_FILE_REPO', 'CODE_SUMMARIES_PDF_FILE_REPO', 'COMPETITIVE_ANALYSIS_FILE_REPO', 'DATA_API_DESIGN_FILE_REPO', 'DOCS_FILE_REPO', 'GRAPH_REPO_FILE_REPO', 'PRD_PDF_FILE_REPO', 'PRDS_FILE_REPO', 'REQUIREMENT_FILENAME', 'RESOURCES_FILE_REPO', 'SD_OUTPUT_FILE_REPO', 'SEQ_FLOW_FILE_REPO', 'SYSTEM_DESIGN_FILE_REPO', 'SYSTEM_DESIGN_PDF_FILE_REPO', 'TASK_FILE_REPO', 'TASK_PDF_FILE_REPO', 'TEST_CODES_FILE_REPO', 'TEST_OUTPUTS_FILE_REPO', 'VISUAL_GRAPH_REPO_FILE_REPO']"}, {"id": "metagpt/utils/project_repo.py:module:metagpt.utils.file_repository"}, {"id": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"id": "metagpt/utils/project_repo.py:names:['FileRepository']"}, {"id": "metagpt/utils/project_repo.py:module:metagpt.utils.git_repository"}, {"id": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"id": "metagpt/utils/project_repo.py:names:['GitRepository']"}, {"id": "{\"lineno\":42,\"end_lineno\":60,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocFileRepositories\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ResourceFileRepositories\"],\"properties\":{}}"}, {"id": "{\"lineno\":90,\"end_lineno\":142,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProjectRepo\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_playwright.py"}, {"id": "metagpt/utils/mmdc_playwright.py:mermaid_to_file"}, {"id": "metagpt/utils/mmdc_playwright.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : Steven Lee\n@File : mmdc_playwright.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : Steven Lee\\n@File : mmdc_playwright.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_playwright.py:os"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_playwright.py:module:urllib.parse"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"id": "metagpt/utils/mmdc_playwright.py:names:['urljoin']"}, {"id": "metagpt/utils/mmdc_playwright.py:module:playwright.async_api"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"id": "metagpt/utils/mmdc_playwright.py:names:['async_playwright']"}, {"id": "metagpt/utils/mmdc_playwright.py:module:metagpt.logs"}, {"id": "metagpt/utils/mmdc_playwright.py:names:['logger']"}, {"id": "{\"lineno\":17,\"end_lineno\":121,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"id": "metagpt/utils/dependency_file.py:DependencyFile:__init__"}, {"id": "metagpt/utils/dependency_file.py:ast.Constant:\n@Time : 2023/11/22\n@Author : mashenquan\n@File : dependency_file.py\n@Desc: Implementation of the dependency file described in Section 2.2.3.2 of RFC 135.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/22\\n@Author : mashenquan\\n@File : dependency_file.py\\n@Desc: Implementation of the dependency file described in Section 2.2.3.2 of RFC 135.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/dependency_file.py:module:__future__"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/utils/dependency_file.py:names:['annotations']"}, {"id": "metagpt/utils/dependency_file.py:json"}, {"id": "metagpt/utils/dependency_file.py:re"}, {"id": "metagpt/utils/dependency_file.py:module:pathlib"}, {"id": "metagpt/utils/dependency_file.py:names:['Path']"}, {"id": "metagpt/utils/dependency_file.py:module:typing"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"id": "metagpt/utils/dependency_file.py:names:['Set']"}, {"id": "metagpt/utils/dependency_file.py:aiofiles"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/dependency_file.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"id": "metagpt/utils/dependency_file.py:names:['aread']"}, {"id": "metagpt/utils/dependency_file.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/utils/dependency_file.py:names:['handle_exception']"}, {"id": "{\"lineno\":22,\"end_lineno\":108,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DependencyFile\"],\"properties\":{}}"}, {"id": "metagpt/utils/make_sk_kernel.py"}, {"id": "metagpt/utils/make_sk_kernel.py:make_sk_kernel"}, {"id": "metagpt/utils/make_sk_kernel.py:ast.Constant:\n@Time : 2023/9/13 12:29\n@Author : femto Zheng\n@File : make_sk_kernel.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:29\\n@Author : femto Zheng\\n@File : make_sk_kernel.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/make_sk_kernel.py:semantic_kernel as sk"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"semantic_kernel as sk\"],\"properties\":{}}"}, {"id": "metagpt/utils/make_sk_kernel.py:module:semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion"}, {"id": "{\"lineno\":9,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion\",\"names\":[\"AzureChatCompletion\"]}}"}, {"id": "metagpt/utils/make_sk_kernel.py:names:['AzureChatCompletion']"}, {"id": "metagpt/utils/make_sk_kernel.py:module:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion"}, {"id": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion\",\"names\":[\"OpenAIChatCompletion\"]}}"}, {"id": "metagpt/utils/make_sk_kernel.py:names:['OpenAIChatCompletion']"}, {"id": "metagpt/utils/make_sk_kernel.py:module:metagpt.config2"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/utils/make_sk_kernel.py:names:['config']"}, {"id": "{\"lineno\":19,\"end_lineno\":32,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"make_sk_kernel\"],\"properties\":{}}"}, {"id": "metagpt/utils/token_counter.py"}, {"id": "metagpt/utils/token_counter.py:count_message_tokens"}, {"id": "metagpt/utils/token_counter.py:count_string_tokens"}, {"id": "metagpt/utils/token_counter.py:get_max_completion_tokens"}, {"id": "metagpt/utils/token_counter.py:TOKEN_COSTS"}, {"id": "metagpt/utils/token_counter.py:TOKEN_MAX"}, {"id": "metagpt/utils/token_counter.py:ast.Constant:\n@Time : 2023/5/18 00:40\n@Author : alexanderwu\n@File : token_counter.py\nref1: https://openai.com/pricing\nref2: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\nref3: https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/llm/token_counter.py\nref4: https://github.com/hwchase17/langchain/blob/master/langchain/chat_models/openai.py\nref5: https://ai.google.dev/models/gemini\n"}, {"id": "{\"lineno\":3,\"end_lineno\":12,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/18 00:40\\n@Author : alexanderwu\\n@File : token_counter.py\\nref1: https://openai.com/pricing\\nref2: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\\nref3: https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/llm/token_counter.py\\nref4: https://github.com/hwchase17/langchain/blob/master/langchain/chat_models/openai.py\\nref5: https://ai.google.dev/models/gemini\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/token_counter.py:tiktoken"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"tiktoken\"],\"properties\":{}}"}, {"id": "{\"lineno\":15,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOKEN_COSTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOKEN_MAX\"],\"properties\":{}}"}, {"id": "{\"lineno\":64,\"end_lineno\":119,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"count_message_tokens\"],\"properties\":{}}"}, {"id": "{\"lineno\":122,\"end_lineno\":138,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"count_string_tokens\"],\"properties\":{}}"}, {"id": "{\"lineno\":141,\"end_lineno\":153,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_max_completion_tokens\"],\"properties\":{}}"}, {"id": "metagpt/utils/embedding.py"}, {"id": "metagpt/utils/embedding.py:get_embedding"}, {"id": "metagpt/utils/embedding.py:ast.Constant:\n@Time : 2024/1/4 20:58\n@Author : alexanderwu\n@File : embedding.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 20:58\\n@Author : alexanderwu\\n@File : embedding.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/embedding.py:module:langchain_community.embeddings"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_community.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"id": "metagpt/utils/embedding.py:names:['OpenAIEmbeddings']"}, {"id": "metagpt/utils/embedding.py:module:metagpt.config2"}, {"id": "metagpt/utils/embedding.py:names:['config']"}, {"id": "{\"lineno\":13,\"end_lineno\":16,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_embedding\"],\"properties\":{}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_case_sensitivity"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_special_character_missing"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_required_key_pair_missing"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_json_format"}, {"id": "metagpt/utils/repair_llm_raw_output.py:_repair_llm_raw_output"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_llm_raw_output"}, {"id": "metagpt/utils/repair_llm_raw_output.py:repair_invalid_json"}, {"id": "metagpt/utils/repair_llm_raw_output.py:run_after_exp_and_passon_next_retry"}, {"id": "metagpt/utils/repair_llm_raw_output.py:retry_parse_json_text"}, {"id": "metagpt/utils/repair_llm_raw_output.py:extract_content_from_output"}, {"id": "metagpt/utils/repair_llm_raw_output.py:extract_state_value_from_output"}, {"id": "metagpt/utils/repair_llm_raw_output.py:copy"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:enum"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['Enum']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Union\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['Callable', 'Union']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:regex as re"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"regex as re\"],\"properties\":{}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:tenacity"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"retry\",\"stop_after_attempt\",\"wait_fixed\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['RetryCallState', 'retry', 'stop_after_attempt', 'wait_fixed']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.config2"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['config']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.logs"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['logger']"}, {"id": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.utils.custom_decoder"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.custom_decoder\",\"names\":[\"CustomDecoder\"]}}"}, {"id": "metagpt/utils/repair_llm_raw_output.py:names:['CustomDecoder']"}, {"id": "{\"lineno\":17,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepairType\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":41,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_case_sensitivity\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":64,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_special_character_missing\"],\"properties\":{}}"}, {"id": "{\"lineno\":67,\"end_lineno\":105,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_required_key_pair_missing\"],\"properties\":{}}"}, {"id": "{\"lineno\":108,\"end_lineno\":132,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_json_format\"],\"properties\":{}}"}, {"id": "{\"lineno\":135,\"end_lineno\":146,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_repair_llm_raw_output\"],\"properties\":{}}"}, {"id": "{\"lineno\":149,\"end_lineno\":170,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_llm_raw_output\"],\"properties\":{}}"}, {"id": "{\"lineno\":173,\"end_lineno\":220,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_invalid_json\"],\"properties\":{}}"}, {"id": "{\"lineno\":223,\"end_lineno\":257,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"run_after_exp_and_passon_next_retry\"],\"properties\":{}}"}, {"id": "{\"lineno\":265,\"end_lineno\":279,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"retry_parse_json_text\"],\"properties\":{}}"}, {"id": "{\"lineno\":282,\"end_lineno\":312,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"extract_content_from_output\"],\"properties\":{}}"}, {"id": "{\"lineno\":315,\"end_lineno\":328,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"extract_state_value_from_output\"],\"properties\":{}}"}, {"id": "metagpt/utils/mermaid.py"}, {"id": "metagpt/utils/mermaid.py:mermaid_to_file"}, {"id": "metagpt/utils/mermaid.py:MMC1"}, {"id": "metagpt/utils/mermaid.py:MMC2"}, {"id": "metagpt/utils/mermaid.py:ast.Constant:\n@Time : 2023/7/4 10:53\n@Author : alexanderwu alitrack\n@File : mermaid.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/4 10:53\\n@Author : alexanderwu alitrack\\n@File : mermaid.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/mermaid.py:asyncio"}, {"id": "metagpt/utils/mermaid.py:os"}, {"id": "metagpt/utils/mermaid.py:module:pathlib"}, {"id": "metagpt/utils/mermaid.py:names:['Path']"}, {"id": "metagpt/utils/mermaid.py:aiofiles"}, {"id": "metagpt/utils/mermaid.py:module:metagpt.config2"}, {"id": "metagpt/utils/mermaid.py:names:['config']"}, {"id": "metagpt/utils/mermaid.py:module:metagpt.logs"}, {"id": "metagpt/utils/mermaid.py:names:['logger']"}, {"id": "metagpt/utils/mermaid.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"check_cmd_exists\"]}}"}, {"id": "metagpt/utils/mermaid.py:names:['check_cmd_exists']"}, {"id": "{\"lineno\":19,\"end_lineno\":90,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"id": "{\"lineno\":93,\"end_lineno\":125,\"type_name\":\"ast.Assign\",\"tokens\":[\"MMC1\"],\"properties\":{}}"}, {"id": "{\"lineno\":127,\"end_lineno\":145,\"type_name\":\"ast.Assign\",\"tokens\":[\"MMC2\"],\"properties\":{}}"}, {"id": "metagpt/utils/parse_html.py:get_html_content"}, {"id": "metagpt/utils/parse_html.py:_get_soup"}, {"id": "metagpt/utils/parse_html.py:module:__future__"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['annotations']"}, {"id": "metagpt/utils/parse_html.py:module:typing"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Optional\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['Generator', 'Optional']"}, {"id": "metagpt/utils/parse_html.py:module:urllib.parse"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\",\"urlparse\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['urljoin', 'urlparse']"}, {"id": "metagpt/utils/parse_html.py:module:bs4"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"bs4\",\"names\":[\"BeautifulSoup\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['BeautifulSoup']"}, {"id": "metagpt/utils/parse_html.py:module:pydantic"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"PrivateAttr\"]}}"}, {"id": "metagpt/utils/parse_html.py:names:['BaseModel', 'PrivateAttr']"}, {"id": "{\"lineno\":11,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebPage\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":45,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_html_content\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":54,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_get_soup\"],\"properties\":{}}"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:__init__"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_get_class_view"}, {"id": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_refine_name"}, {"id": "metagpt/utils/visual_graph_repo.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : visualize_graph.py\n@Desc : Visualize the graph.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : visualize_graph.py\\n@Desc : Visualize the graph.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/visual_graph_repo.py:module:__future__"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['annotations']"}, {"id": "metagpt/utils/visual_graph_repo.py:re"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/utils/visual_graph_repo.py:module:abc"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['ABC']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:pathlib"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['Path']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:typing"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['List', 'Optional']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:pydantic"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.const"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['AGGREGATION', 'COMPOSITION', 'GENERALIZATION']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.schema"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['UMLClassView']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"split_namespace\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['split_namespace']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.di_graph_repository"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['DiGraphRepository']"}, {"id": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.graph_repository"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"id": "metagpt/utils/visual_graph_repo.py:names:['GraphKeyword', 'GraphRepository']"}, {"id": "{\"lineno\":25,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"_VisualClassView\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":56,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VisualGraphRepo\"],\"properties\":{}}"}, {"id": "{\"lineno\":59,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VisualDiGraphRepo\"],\"properties\":{}}"}, {"id": "metagpt/utils/special_tokens.py"}, {"id": "metagpt/utils/special_tokens.py:MSG_SEP"}, {"id": "metagpt/utils/special_tokens.py:FILENAME_CODE_SEP"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Assign\",\"tokens\":[\"MSG_SEP\"],\"properties\":{}}"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Assign\",\"tokens\":[\"FILENAME_CODE_SEP\"],\"properties\":{}}"}, {"id": "metagpt/utils/ahttp_client.py"}, {"id": "metagpt/utils/ahttp_client.py:apost"}, {"id": "metagpt/utils/ahttp_client.py:apost_stream"}, {"id": "metagpt/utils/ahttp_client.py:module:typing"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Mapping\",\"Optional\",\"Union\"]}}"}, {"id": "metagpt/utils/ahttp_client.py:names:['Any', 'Mapping', 'Optional', 'Union']"}, {"id": "metagpt/utils/ahttp_client.py:aiohttp"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"id": "metagpt/utils/ahttp_client.py:module:aiohttp.client"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp.client\",\"names\":[\"DEFAULT_TIMEOUT\"]}}"}, {"id": "metagpt/utils/ahttp_client.py:names:['DEFAULT_TIMEOUT']"}, {"id": "{\"lineno\":11,\"end_lineno\":28,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"apost\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":49,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"apost_stream\"],\"properties\":{}}"}, {"id": "metagpt/utils/__init__.py"}, {"id": "metagpt/utils/__init__.py:__all__"}, {"id": "metagpt/utils/__init__.py:ast.Constant:\n@Time : 2023/4/29 15:50\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:50\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/__init__.py:module:metagpt.utils.read_document"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.read_document\",\"names\":[\"read_docx\"]}}"}, {"id": "metagpt/utils/__init__.py:names:['read_docx']"}, {"id": "metagpt/utils/__init__.py:module:metagpt.utils.singleton"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.singleton\",\"names\":[\"Singleton\"]}}"}, {"id": "metagpt/utils/__init__.py:names:['Singleton']"}, {"id": "metagpt/utils/__init__.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\",\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"id": "metagpt/utils/__init__.py:names:['TOKEN_COSTS', 'count_message_tokens', 'count_string_tokens']"}, {"id": "{\"lineno\":18,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_ink.py"}, {"id": "metagpt/utils/mmdc_ink.py:mermaid_to_file"}, {"id": "metagpt/utils/mmdc_ink.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : alitrack\n@File : mermaid.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : alitrack\\n@File : mermaid.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_ink.py:base64"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_ink.py:module:aiohttp"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp\",\"names\":[\"ClientError\",\"ClientSession\"]}}"}, {"id": "metagpt/utils/mmdc_ink.py:names:['ClientError', 'ClientSession']"}, {"id": "metagpt/utils/mmdc_ink.py:module:metagpt.logs"}, {"id": "metagpt/utils/mmdc_ink.py:names:['logger']"}, {"id": "{\"lineno\":15,\"end_lineno\":41,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"id": "metagpt/utils/di_graph_repository.py:DiGraphRepository:__init__"}, {"id": "metagpt/utils/di_graph_repository.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : di_graph_repository.py\n@Desc : Graph repository based on DiGraph\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : di_graph_repository.py\\n@Desc : Graph repository based on DiGraph\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/di_graph_repository.py:module:__future__"}, {"id": "metagpt/utils/di_graph_repository.py:names:['annotations']"}, {"id": "metagpt/utils/di_graph_repository.py:json"}, {"id": "metagpt/utils/di_graph_repository.py:module:pathlib"}, {"id": "metagpt/utils/di_graph_repository.py:names:['Path']"}, {"id": "metagpt/utils/di_graph_repository.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/utils/di_graph_repository.py:names:['List']"}, {"id": "metagpt/utils/di_graph_repository.py:networkx"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"networkx\"],\"properties\":{}}"}, {"id": "metagpt/utils/di_graph_repository.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\",\"awrite\"]}}"}, {"id": "metagpt/utils/di_graph_repository.py:names:['aread', 'awrite']"}, {"id": "metagpt/utils/di_graph_repository.py:module:metagpt.utils.graph_repository"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphRepository\"]}}"}, {"id": "metagpt/utils/di_graph_repository.py:names:['SPO', 'GraphRepository']"}, {"id": "{\"lineno\":21,\"end_lineno\":88,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DiGraphRepository\"],\"properties\":{}}"}, {"id": "metagpt/utils/yaml_model.py:ast.Constant:\n@Time : 2024/1/4 10:18\n@Author : alexanderwu\n@File : YamlModel.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 10:18\\n@Author : alexanderwu\\n@File : YamlModel.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/yaml_model.py:module:pathlib"}, {"id": "metagpt/utils/yaml_model.py:names:['Path']"}, {"id": "metagpt/utils/yaml_model.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"id": "metagpt/utils/yaml_model.py:names:['Dict', 'Optional']"}, {"id": "metagpt/utils/yaml_model.py:yaml"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"id": "metagpt/utils/yaml_model.py:module:pydantic"}, {"id": "metagpt/utils/yaml_model.py:names:['BaseModel', 'model_validator']"}, {"id": "{\"lineno\":15,\"end_lineno\":36,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"YamlModel\"],\"properties\":{}}"}, {"id": "{\"lineno\":39,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"YamlModelWithoutDefault\"],\"properties\":{}}"}, {"id": "metagpt/utils/cost_manager.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : openai.py\n@Desc : mashenquan, 2023/8/28. Separate the `CostManager` class to support user-level cost accounting.\n"}, {"id": "{\"lineno\":2,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : openai.py\\n@Desc : mashenquan, 2023/8/28. Separate the `CostManager` class to support user-level cost accounting.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/cost_manager.py:module:typing"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"NamedTuple\"]}}"}, {"id": "metagpt/utils/cost_manager.py:names:['NamedTuple']"}, {"id": "metagpt/utils/cost_manager.py:module:pydantic"}, {"id": "metagpt/utils/cost_manager.py:names:['BaseModel']"}, {"id": "metagpt/utils/cost_manager.py:module:metagpt.logs"}, {"id": "metagpt/utils/cost_manager.py:names:['logger']"}, {"id": "metagpt/utils/cost_manager.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\"]}}"}, {"id": "metagpt/utils/cost_manager.py:names:['TOKEN_COSTS']"}, {"id": "{\"lineno\":17,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Costs\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":82,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CostManager\"],\"properties\":{}}"}, {"id": "{\"lineno\":85,\"end_lineno\":99,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TokenCostManager\"],\"properties\":{}}"}, {"id": "metagpt/utils/file.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : file.py\n@Describe : General file operations.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : file.py\\n@Describe : General file operations.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/file.py:module:pathlib"}, {"id": "metagpt/utils/file.py:names:['Path']"}, {"id": "metagpt/utils/file.py:aiofiles"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/file.py:module:metagpt.logs"}, {"id": "metagpt/utils/file.py:names:['logger']"}, {"id": "metagpt/utils/file.py:module:metagpt.utils.exceptions"}, {"id": "metagpt/utils/file.py:names:['handle_exception']"}, {"id": "{\"lineno\":17,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"File\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:NoMoneyException:__init__"}, {"id": "metagpt/utils/common.py:NoMoneyException:__str__"}, {"id": "metagpt/utils/common.py:check_cmd_exists"}, {"id": "metagpt/utils/common.py:require_python_version"}, {"id": "metagpt/utils/common.py:print_members"}, {"id": "metagpt/utils/common.py:parse_recipient"}, {"id": "metagpt/utils/common.py:get_class_name"}, {"id": "metagpt/utils/common.py:any_to_str"}, {"id": "metagpt/utils/common.py:any_to_str_set"}, {"id": "metagpt/utils/common.py:is_send_to"}, {"id": "metagpt/utils/common.py:any_to_name"}, {"id": "metagpt/utils/common.py:concat_namespace"}, {"id": "metagpt/utils/common.py:split_namespace"}, {"id": "metagpt/utils/common.py:general_after_log"}, {"id": "metagpt/utils/common.py:read_json_file"}, {"id": "metagpt/utils/common.py:write_json_file"}, {"id": "metagpt/utils/common.py:import_class"}, {"id": "metagpt/utils/common.py:import_class_inst"}, {"id": "metagpt/utils/common.py:format_trackback_info"}, {"id": "metagpt/utils/common.py:serialize_decorator"}, {"id": "metagpt/utils/common.py:role_raise_decorator"}, {"id": "metagpt/utils/common.py:aread"}, {"id": "metagpt/utils/common.py:awrite"}, {"id": "metagpt/utils/common.py:read_file_block"}, {"id": "metagpt/utils/common.py:list_files"}, {"id": "metagpt/utils/common.py:parse_json_code_block"}, {"id": "metagpt/utils/common.py:ast.Constant:\n@Time : 2023/4/29 16:07\n@Author : alexanderwu\n@File : common.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\n Add generic class-to-string and object-to-string conversion functionality.\n@Modified By: mashenquan, 2023/11/27. Bug fix: `parse_recipient` failed to parse the recipient in certain GPT-3.5\n responses.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 16:07\\n@Author : alexanderwu\\n@File : common.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\\n Add generic class-to-string and object-to-string conversion functionality.\\n@Modified By: mashenquan, 2023/11/27. Bug fix: `parse_recipient` failed to parse the recipient in certain GPT-3.5\\n responses.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:module:__future__"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/utils/common.py:names:['annotations']"}, {"id": "metagpt/utils/common.py:ast"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:contextlib"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"contextlib\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:importlib"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:inspect"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"inspect\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:json"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:os"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:platform"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:re"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:sys"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:traceback"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:typing"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.Import\",\"tokens\":[\"typing\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:module:pathlib"}, {"id": "metagpt/utils/common.py:names:['Path']"}, {"id": "metagpt/utils/common.py:module:typing"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"List\",\"Tuple\",\"Union\"]}}"}, {"id": "metagpt/utils/common.py:names:['Any', 'List', 'Tuple', 'Union']"}, {"id": "metagpt/utils/common.py:aiofiles"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:loguru"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.Import\",\"tokens\":[\"loguru\"],\"properties\":{}}"}, {"id": "metagpt/utils/common.py:module:pydantic_core"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic_core\",\"names\":[\"to_jsonable_python\"]}}"}, {"id": "metagpt/utils/common.py:names:['to_jsonable_python']"}, {"id": "metagpt/utils/common.py:module:tenacity"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"RetryError\",\"_utils\"]}}"}, {"id": "metagpt/utils/common.py:names:['RetryCallState', 'RetryError', '_utils']"}, {"id": "metagpt/utils/common.py:module:metagpt.const"}, {"id": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\"]}}"}, {"id": "metagpt/utils/common.py:names:['MESSAGE_ROUTE_TO_ALL']"}, {"id": "metagpt/utils/common.py:module:metagpt.logs"}, {"id": "metagpt/utils/common.py:names:['logger']"}, {"id": "metagpt/utils/common.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/utils/common.py:names:['handle_exception']"}, {"id": "{\"lineno\":38,\"end_lineno\":48,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"check_cmd_exists\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":54,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"require_python_version\"],\"properties\":{}}"}, {"id": "{\"lineno\":57,\"end_lineno\":231,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OutputParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":234,\"end_lineno\":304,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":307,\"end_lineno\":316,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"NoMoneyException\"],\"properties\":{}}"}, {"id": "{\"lineno\":319,\"end_lineno\":335,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"print_members\"],\"properties\":{}}"}, {"id": "{\"lineno\":338,\"end_lineno\":348,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_recipient\"],\"properties\":{}}"}, {"id": "{\"lineno\":351,\"end_lineno\":353,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_class_name\"],\"properties\":{}}"}, {"id": "{\"lineno\":356,\"end_lineno\":363,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_str\"],\"properties\":{}}"}, {"id": "{\"lineno\":366,\"end_lineno\":381,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_str_set\"],\"properties\":{}}"}, {"id": "{\"lineno\":384,\"end_lineno\":392,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_send_to\"],\"properties\":{}}"}, {"id": "{\"lineno\":395,\"end_lineno\":403,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_name\"],\"properties\":{}}"}, {"id": "{\"lineno\":406,\"end_lineno\":407,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"concat_namespace\"],\"properties\":{}}"}, {"id": "{\"lineno\":410,\"end_lineno\":411,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"split_namespace\"],\"properties\":{}}"}, {"id": "{\"lineno\":414,\"end_lineno\":444,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"general_after_log\"],\"properties\":{}}"}, {"id": "{\"lineno\":447,\"end_lineno\":456,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_json_file\"],\"properties\":{}}"}, {"id": "{\"lineno\":459,\"end_lineno\":465,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"write_json_file\"],\"properties\":{}}"}, {"id": "{\"lineno\":468,\"end_lineno\":471,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"import_class\"],\"properties\":{}}"}, {"id": "{\"lineno\":474,\"end_lineno\":477,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"import_class_inst\"],\"properties\":{}}"}, {"id": "{\"lineno\":480,\"end_lineno\":481,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"format_trackback_info\"],\"properties\":{}}"}, {"id": "{\"lineno\":484,\"end_lineno\":495,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"serialize_decorator\"],\"properties\":{}}"}, {"id": "{\"lineno\":498,\"end_lineno\":525,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"role_raise_decorator\"],\"properties\":{}}"}, {"id": "{\"lineno\":529,\"end_lineno\":533,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aread\"],\"properties\":{}}"}, {"id": "{\"lineno\":536,\"end_lineno\":541,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"awrite\"],\"properties\":{}}"}, {"id": "{\"lineno\":544,\"end_lineno\":558,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"read_file_block\"],\"properties\":{}}"}, {"id": "{\"lineno\":561,\"end_lineno\":575,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"list_files\"],\"properties\":{}}"}, {"id": "{\"lineno\":578,\"end_lineno\":580,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_json_code_block\"],\"properties\":{}}"}, {"id": "metagpt/utils/redis.py:Redis:__init__"}, {"id": "metagpt/utils/redis.py:Redis:_connect"}, {"id": "metagpt/utils/redis.py:ast.Constant:\n@Time : 2023/12/27\n@Author : mashenquan\n@File : redis.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/27\\n@Author : mashenquan\\n@File : redis.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/redis.py:module:__future__"}, {"id": "metagpt/utils/redis.py:names:['annotations']"}, {"id": "metagpt/utils/redis.py:traceback"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/utils/redis.py:module:datetime"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"timedelta\"]}}"}, {"id": "metagpt/utils/redis.py:names:['timedelta']"}, {"id": "metagpt/utils/redis.py:aioredis"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aioredis\"],\"properties\":{}}"}, {"id": "metagpt/utils/redis.py:module:metagpt.configs.redis_config"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"id": "metagpt/utils/redis.py:names:['RedisConfig']"}, {"id": "metagpt/utils/redis.py:module:metagpt.logs"}, {"id": "metagpt/utils/redis.py:names:['logger']"}, {"id": "{\"lineno\":19,\"end_lineno\":63,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Redis\"],\"properties\":{}}"}, {"id": "metagpt/utils/text.py"}, {"id": "metagpt/utils/text.py:reduce_message_length"}, {"id": "metagpt/utils/text.py:generate_prompt_chunk"}, {"id": "metagpt/utils/text.py:split_paragraph"}, {"id": "metagpt/utils/text.py:decode_unicode_escape"}, {"id": "metagpt/utils/text.py:_split_by_count"}, {"id": "metagpt/utils/text.py:_split_text_with_ends"}, {"id": "metagpt/utils/text.py:module:typing"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Sequence\"]}}"}, {"id": "metagpt/utils/text.py:names:['Generator', 'Sequence']"}, {"id": "metagpt/utils/text.py:module:metagpt.utils.token_counter"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_MAX\",\"count_string_tokens\"]}}"}, {"id": "metagpt/utils/text.py:names:['TOKEN_MAX', 'count_string_tokens']"}, {"id": "{\"lineno\":6,\"end_lineno\":31,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"reduce_message_length\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":76,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"generate_prompt_chunk\"],\"properties\":{}}"}, {"id": "{\"lineno\":79,\"end_lineno\":96,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"split_paragraph\"],\"properties\":{}}"}, {"id": "{\"lineno\":99,\"end_lineno\":108,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"decode_unicode_escape\"],\"properties\":{}}"}, {"id": "{\"lineno\":111,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_split_by_count\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":129,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_split_text_with_ends\"],\"properties\":{}}"}, {"id": "metagpt/utils/graph_repository.py:GraphRepository:__init__"}, {"id": "metagpt/utils/graph_repository.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : graph_repository.py\n@Desc : Superclass for graph repository.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : graph_repository.py\\n@Desc : Superclass for graph repository.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/graph_repository.py:module:abc"}, {"id": "metagpt/utils/graph_repository.py:names:['ABC', 'abstractmethod']"}, {"id": "metagpt/utils/graph_repository.py:module:collections"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"id": "metagpt/utils/graph_repository.py:names:['defaultdict']"}, {"id": "metagpt/utils/graph_repository.py:module:pathlib"}, {"id": "metagpt/utils/graph_repository.py:names:['Path']"}, {"id": "metagpt/utils/graph_repository.py:module:typing"}, {"id": "metagpt/utils/graph_repository.py:names:['List']"}, {"id": "metagpt/utils/graph_repository.py:module:pydantic"}, {"id": "metagpt/utils/graph_repository.py:names:['BaseModel']"}, {"id": "metagpt/utils/graph_repository.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"DotClassRelationship\",\"RepoFileInfo\"]}}"}, {"id": "metagpt/utils/graph_repository.py:names:['DotClassInfo', 'DotClassRelationship', 'RepoFileInfo']"}, {"id": "metagpt/utils/graph_repository.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"id": "metagpt/utils/graph_repository.py:names:['concat_namespace', 'split_namespace']"}, {"id": "{\"lineno\":21,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GraphKeyword\"],\"properties\":{}}"}, {"id": "{\"lineno\":46,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SPO\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":232,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GraphRepository\"],\"properties\":{}}"}, {"id": "metagpt/utils/singleton.py:Singleton:__call__"}, {"id": "metagpt/utils/singleton.py:ast.Constant:\n@Time : 2023/5/11 16:15\n@Author : alexanderwu\n@File : singleton.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 16:15\\n@Author : alexanderwu\\n@File : singleton.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/singleton.py:abc"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"abc\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":22,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Singleton\"],\"properties\":{}}"}, {"id": "metagpt/utils/file_repository.py:FileRepository:__init__"}, {"id": "metagpt/utils/file_repository.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : git_repository.py\n@Desc: File repository management. RFC 135 2.2.3.2, 2.2.3.4 and 2.2.3.13.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : git_repository.py\\n@Desc: File repository management. RFC 135 2.2.3.2, 2.2.3.4 and 2.2.3.13.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/file_repository.py:module:__future__"}, {"id": "metagpt/utils/file_repository.py:names:['annotations']"}, {"id": "metagpt/utils/file_repository.py:json"}, {"id": "metagpt/utils/file_repository.py:os"}, {"id": "metagpt/utils/file_repository.py:module:datetime"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['datetime']"}, {"id": "metagpt/utils/file_repository.py:module:pathlib"}, {"id": "metagpt/utils/file_repository.py:names:['Path']"}, {"id": "metagpt/utils/file_repository.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Set\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['Dict', 'List', 'Set']"}, {"id": "metagpt/utils/file_repository.py:aiofiles"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/file_repository.py:module:metagpt.logs"}, {"id": "metagpt/utils/file_repository.py:names:['logger']"}, {"id": "metagpt/utils/file_repository.py:module:metagpt.schema"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['Document']"}, {"id": "metagpt/utils/file_repository.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['aread']"}, {"id": "metagpt/utils/file_repository.py:module:metagpt.utils.json_to_markdown"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.json_to_markdown\",\"names\":[\"json_to_markdown\"]}}"}, {"id": "metagpt/utils/file_repository.py:names:['json_to_markdown']"}, {"id": "{\"lineno\":25,\"end_lineno\":240,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FileRepository\"],\"properties\":{}}"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:__init__"}, {"id": "metagpt/utils/pycst.py:DocstringCollector:_leave"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:__init__"}, {"id": "metagpt/utils/pycst.py:DocstringTransformer:_leave"}, {"id": "metagpt/utils/pycst.py:get_docstring_statement"}, {"id": "metagpt/utils/pycst.py:has_decorator"}, {"id": "metagpt/utils/pycst.py:merge_docstring"}, {"id": "metagpt/utils/pycst.py:DocstringNode"}, {"id": "metagpt/utils/pycst.py:module:__future__"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/utils/pycst.py:names:['annotations']"}, {"id": "metagpt/utils/pycst.py:module:typing"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"id": "metagpt/utils/pycst.py:names:['Union']"}, {"id": "metagpt/utils/pycst.py:libcst as cst"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"libcst as cst\"],\"properties\":{}}"}, {"id": "metagpt/utils/pycst.py:module:libcst._nodes.module"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"libcst._nodes.module\",\"names\":[\"Module\"]}}"}, {"id": "metagpt/utils/pycst.py:names:['Module']"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"DocstringNode\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":49,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_docstring_statement\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":57,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"has_decorator\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":98,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringCollector\"],\"properties\":{}}"}, {"id": "{\"lineno\":101,\"end_lineno\":156,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringTransformer\"],\"properties\":{}}"}, {"id": "{\"lineno\":159,\"end_lineno\":176,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"merge_docstring\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py"}, {"id": "metagpt/utils/exceptions.py:handle_exception"}, {"id": "metagpt/utils/exceptions.py:ReturnType"}, {"id": "metagpt/utils/exceptions.py:ast.Constant:\n@Time : 2023/12/19 14:46\n@Author : alexanderwu\n@File : exceptions.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19 14:46\\n@Author : alexanderwu\\n@File : exceptions.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py:asyncio"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py:functools"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"functools\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py:traceback"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/utils/exceptions.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Tuple\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"id": "metagpt/utils/exceptions.py:names:['Any', 'Callable', 'Tuple', 'Type', 'TypeVar', 'Union']"}, {"id": "metagpt/utils/exceptions.py:module:metagpt.logs"}, {"id": "metagpt/utils/exceptions.py:names:['logger']"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"ReturnType\"],\"properties\":{}}"}, {"id": "{\"lineno\":20,\"end_lineno\":61,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"handle_exception\"],\"properties\":{}}"}, {"id": "metagpt/utils/human_interaction.py:json"}, {"id": "metagpt/utils/human_interaction.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Tuple\",\"Type\"]}}"}, {"id": "metagpt/utils/human_interaction.py:names:['Any', 'Tuple', 'Type']"}, {"id": "metagpt/utils/human_interaction.py:module:pydantic"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/utils/human_interaction.py:names:['BaseModel']"}, {"id": "metagpt/utils/human_interaction.py:module:metagpt.logs"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/utils/human_interaction.py:names:['logger']"}, {"id": "metagpt/utils/human_interaction.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"id": "metagpt/utils/human_interaction.py:names:['import_class']"}, {"id": "{\"lineno\":14,\"end_lineno\":107,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"HumanInteraction\"],\"properties\":{}}"}, {"id": "metagpt/utils/highlight.py"}, {"id": "metagpt/utils/highlight.py:highlight"}, {"id": "metagpt/utils/highlight.py:module:pygments"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments\",\"names\":[\"highlight as highlight_\"]}}"}, {"id": "metagpt/utils/highlight.py:names:['highlight as highlight_']"}, {"id": "metagpt/utils/highlight.py:module:pygments.formatters"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.formatters\",\"names\":[\"HtmlFormatter\",\"TerminalFormatter\"]}}"}, {"id": "metagpt/utils/highlight.py:names:['HtmlFormatter', 'TerminalFormatter']"}, {"id": "metagpt/utils/highlight.py:module:pygments.lexers"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.lexers\",\"names\":[\"PythonLexer\",\"SqlLexer\"]}}"}, {"id": "metagpt/utils/highlight.py:names:['PythonLexer', 'SqlLexer']"}, {"id": "{\"lineno\":7,\"end_lineno\":25,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"highlight\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_pyppeteer.py"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:mermaid_to_file"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : alitrack\n@File : mmdc_pyppeteer.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : alitrack\\n@File : mmdc_pyppeteer.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:os"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:module:urllib.parse"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:names:['urljoin']"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:module:pyppeteer"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pyppeteer\",\"names\":[\"launch\"]}}"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:names:['launch']"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:module:metagpt.config2"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:names:['config']"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:module:metagpt.logs"}, {"id": "metagpt/utils/mmdc_pyppeteer.py:names:['logger']"}, {"id": "{\"lineno\":17,\"end_lineno\":128,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:S3:__init__"}, {"id": "metagpt/utils/s3.py:base64"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:os.path"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"os.path\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:traceback"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:uuid"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:module:pathlib"}, {"id": "metagpt/utils/s3.py:names:['Path']"}, {"id": "metagpt/utils/s3.py:module:typing"}, {"id": "metagpt/utils/s3.py:names:['Optional']"}, {"id": "metagpt/utils/s3.py:aioboto3"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"aioboto3\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:aiofiles"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"id": "metagpt/utils/s3.py:module:metagpt.config2"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"S3Config\"]}}"}, {"id": "metagpt/utils/s3.py:names:['S3Config']"}, {"id": "metagpt/utils/s3.py:module:metagpt.const"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"id": "metagpt/utils/s3.py:names:['BASE64_FORMAT']"}, {"id": "metagpt/utils/s3.py:module:metagpt.logs"}, {"id": "metagpt/utils/s3.py:names:['logger']"}, {"id": "{\"lineno\":16,\"end_lineno\":154,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"S3\"],\"properties\":{}}"}, {"id": "metagpt/utils/json_to_markdown.py"}, {"id": "metagpt/utils/json_to_markdown.py:json_to_markdown"}, {"id": "metagpt/utils/json_to_markdown.py:ast.Constant:\n@Time : 2023/9/11 11:50\n@Author : femto Zheng\n@File : json_to_markdown.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/11 11:50\\n@Author : femto Zheng\\n@File : json_to_markdown.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":42,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"json_to_markdown\"],\"properties\":{}}"}, {"id": "metagpt/utils/custom_decoder.py:CustomDecoder:__init__"}, {"id": "metagpt/utils/custom_decoder.py:py_make_scanner"}, {"id": "metagpt/utils/custom_decoder.py:JSONObject"}, {"id": "metagpt/utils/custom_decoder.py:py_scanstring"}, {"id": "metagpt/utils/custom_decoder.py:NUMBER_RE"}, {"id": "metagpt/utils/custom_decoder.py:FLAGS"}, {"id": "metagpt/utils/custom_decoder.py:STRINGCHUNK"}, {"id": "metagpt/utils/custom_decoder.py:STRINGCHUNK_SINGLEQUOTE"}, {"id": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_DOUBLE_QUOTE"}, {"id": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_SINGLEQUOTE"}, {"id": "metagpt/utils/custom_decoder.py:BACKSLASH"}, {"id": "metagpt/utils/custom_decoder.py:WHITESPACE"}, {"id": "metagpt/utils/custom_decoder.py:WHITESPACE_STR"}, {"id": "metagpt/utils/custom_decoder.py:scanstring"}, {"id": "metagpt/utils/custom_decoder.py:json"}, {"id": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/utils/custom_decoder.py:re"}, {"id": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"id": "metagpt/utils/custom_decoder.py:module:json"}, {"id": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"id": "metagpt/utils/custom_decoder.py:names:['JSONDecodeError']"}, {"id": "metagpt/utils/custom_decoder.py:module:json.decoder"}, {"id": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json.decoder\",\"names\":[\"_decode_uXXXX\"]}}"}, {"id": "metagpt/utils/custom_decoder.py:names:['_decode_uXXXX']"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Assign\",\"tokens\":[\"NUMBER_RE\"],\"properties\":{}}"}, {"id": "{\"lineno\":9,\"end_lineno\":69,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"py_make_scanner\"],\"properties\":{}}"}, {"id": "{\"lineno\":72,\"end_lineno\":72,\"type_name\":\"ast.Assign\",\"tokens\":[\"FLAGS\"],\"properties\":{}}"}, {"id": "{\"lineno\":73,\"end_lineno\":73,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK\"],\"properties\":{}}"}, {"id": "{\"lineno\":74,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_SINGLEQUOTE\"],\"properties\":{}}"}, {"id": "{\"lineno\":75,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_TRIPLE_DOUBLE_QUOTE\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_TRIPLE_SINGLEQUOTE\"],\"properties\":{}}"}, {"id": "{\"lineno\":77,\"end_lineno\":86,\"type_name\":\"ast.Assign\",\"tokens\":[\"BACKSLASH\"],\"properties\":{}}"}, {"id": "{\"lineno\":87,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"WHITESPACE\"],\"properties\":{}}"}, {"id": "{\"lineno\":88,\"end_lineno\":88,\"type_name\":\"ast.Assign\",\"tokens\":[\"WHITESPACE_STR\"],\"properties\":{}}"}, {"id": "{\"lineno\":91,\"end_lineno\":192,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"JSONObject\"],\"properties\":{}}"}, {"id": "{\"lineno\":195,\"end_lineno\":267,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"py_scanstring\"],\"properties\":{}}"}, {"id": "{\"lineno\":270,\"end_lineno\":270,\"type_name\":\"ast.Assign\",\"tokens\":[\"scanstring\"],\"properties\":{}}"}, {"id": "{\"lineno\":273,\"end_lineno\":297,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CustomDecoder\"],\"properties\":{}}"}, {"id": "metagpt/utils/git_repository.py:GitRepository:__init__"}, {"id": "metagpt/utils/git_repository.py:GitRepository:_init"}, {"id": "metagpt/utils/git_repository.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : git_repository.py\n@Desc: Git repository management. RFC 135 2.2.3.3.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : git_repository.py\\n@Desc: Git repository management. RFC 135 2.2.3.3.\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/git_repository.py:module:__future__"}, {"id": "metagpt/utils/git_repository.py:names:['annotations']"}, {"id": "metagpt/utils/git_repository.py:shutil"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"id": "metagpt/utils/git_repository.py:module:enum"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['Enum']"}, {"id": "metagpt/utils/git_repository.py:module:pathlib"}, {"id": "metagpt/utils/git_repository.py:names:['Path']"}, {"id": "metagpt/utils/git_repository.py:module:typing"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['Dict', 'List']"}, {"id": "metagpt/utils/git_repository.py:module:git.repo"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo\",\"names\":[\"Repo\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['Repo']"}, {"id": "metagpt/utils/git_repository.py:module:git.repo.fun"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo.fun\",\"names\":[\"is_git_dir\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['is_git_dir']"}, {"id": "metagpt/utils/git_repository.py:module:gitignore_parser"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"gitignore_parser\",\"names\":[\"parse_gitignore\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['parse_gitignore']"}, {"id": "metagpt/utils/git_repository.py:module:metagpt.logs"}, {"id": "metagpt/utils/git_repository.py:names:['logger']"}, {"id": "metagpt/utils/git_repository.py:module:metagpt.utils.dependency_file"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.dependency_file\",\"names\":[\"DependencyFile\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['DependencyFile']"}, {"id": "metagpt/utils/git_repository.py:module:metagpt.utils.file_repository"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"id": "metagpt/utils/git_repository.py:names:['FileRepository']"}, {"id": "{\"lineno\":25,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ChangeType\"],\"properties\":{}}"}, {"id": "{\"lineno\":35,\"end_lineno\":285,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GitRepository\"],\"properties\":{}}"}, {"id": "metagpt/utils/read_document.py"}, {"id": "metagpt/utils/read_document.py:read_docx"}, {"id": "metagpt/utils/read_document.py:ast.Constant:\n@Time : 2023/4/29 15:45\n@Author : alexanderwu\n@File : read_document.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:45\\n@Author : alexanderwu\\n@File : read_document.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/utils/read_document.py:docx"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"docx\"],\"properties\":{}}"}, {"id": "{\"lineno\":12,\"end_lineno\":23,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_docx\"],\"properties\":{}}"}, {"id": "metagpt/configs/s3_config.py:ast.Constant:\n@Time : 2024/1/4 19:07\n@Author : alexanderwu\n@File : s3_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:07\\n@Author : alexanderwu\\n@File : s3_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/s3_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"id": "metagpt/configs/s3_config.py:names:['YamlModelWithoutDefault']"}, {"id": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"S3Config\"],\"properties\":{}}"}, {"id": "metagpt/configs/browser_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : browser_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : browser_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/browser_config.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"id": "metagpt/configs/browser_config.py:names:['Literal']"}, {"id": "metagpt/configs/browser_config.py:module:metagpt.tools"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"id": "metagpt/configs/browser_config.py:names:['WebBrowserEngineType']"}, {"id": "metagpt/configs/browser_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/configs/browser_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BrowserConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/workspace_config.py:ast.Constant:\n@Time : 2024/1/4 19:09\n@Author : alexanderwu\n@File : workspace_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:09\\n@Author : alexanderwu\\n@File : workspace_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/workspace_config.py:module:datetime"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['datetime']"}, {"id": "metagpt/configs/workspace_config.py:module:pathlib"}, {"id": "metagpt/configs/workspace_config.py:names:['Path']"}, {"id": "metagpt/configs/workspace_config.py:module:uuid"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['uuid4']"}, {"id": "metagpt/configs/workspace_config.py:module:pydantic"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\",\"model_validator\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['field_validator', 'model_validator']"}, {"id": "metagpt/configs/workspace_config.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_WORKSPACE_ROOT\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['DEFAULT_WORKSPACE_ROOT']"}, {"id": "metagpt/configs/workspace_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/configs/workspace_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":18,\"end_lineno\":38,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WorkspaceConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/mermaid_config.py:ast.Constant:\n@Time : 2024/1/4 19:07\n@Author : alexanderwu\n@File : mermaid_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:07\\n@Author : alexanderwu\\n@File : mermaid_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/mermaid_config.py:module:typing"}, {"id": "metagpt/configs/mermaid_config.py:names:['Literal']"}, {"id": "metagpt/configs/mermaid_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/configs/mermaid_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MermaidConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/__init__.py"}, {"id": "metagpt/configs/__init__.py:ast.Constant:\n@Time : 2024/1/4 16:33\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:33\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/llm_config.py:LLMType:__missing__"}, {"id": "metagpt/configs/llm_config.py:ast.Constant:\n@Time : 2024/1/4 16:33\n@Author : alexanderwu\n@File : llm_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:33\\n@Author : alexanderwu\\n@File : llm_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/llm_config.py:module:enum"}, {"id": "metagpt/configs/llm_config.py:names:['Enum']"}, {"id": "metagpt/configs/llm_config.py:module:typing"}, {"id": "metagpt/configs/llm_config.py:names:['Optional']"}, {"id": "metagpt/configs/llm_config.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\"]}}"}, {"id": "metagpt/configs/llm_config.py:names:['field_validator']"}, {"id": "metagpt/configs/llm_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/configs/llm_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":16,\"end_lineno\":29,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMType\"],\"properties\":{}}"}, {"id": "{\"lineno\":32,\"end_lineno\":78,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/redis_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : redis_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : redis_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/redis_config.py:module:metagpt.utils.yaml_model"}, {"id": "metagpt/configs/redis_config.py:names:['YamlModelWithoutDefault']"}, {"id": "{\"lineno\":11,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RedisConfig\"],\"properties\":{}}"}, {"id": "metagpt/configs/search_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : search_config.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : search_config.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/configs/search_config.py:module:metagpt.tools"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"id": "metagpt/configs/search_config.py:names:['SearchEngineType']"}, {"id": "metagpt/configs/search_config.py:module:metagpt.utils.yaml_model"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"id": "metagpt/configs/search_config.py:names:['YamlModel']"}, {"id": "{\"lineno\":12,\"end_lineno\":17,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchConfig\"],\"properties\":{}}"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class_views"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_relationship"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_diff_path"}, {"id": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_align_root"}, {"id": "metagpt/actions/rebuild_class_view.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : rebuild_class_view.py\n@Desc : Rebuild class view info\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : rebuild_class_view.py\\n@Desc : Rebuild class view info\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/rebuild_class_view.py:module:pathlib"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['Path']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:typing"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['Optional']"}, {"id": "metagpt/actions/rebuild_class_view.py:aiofiles"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.actions"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['Action']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.config2"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['config']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.const"}, {"id": "{\"lineno\":17,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"DATA_API_DESIGN_FILE_REPO\",\"GENERALIZATION\",\"GRAPH_REPO_FILE_REPO\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['AGGREGATION', 'COMPOSITION', 'DATA_API_DESIGN_FILE_REPO', 'GENERALIZATION', 'GRAPH_REPO_FILE_REPO']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.logs"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['logger']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"RepoParser\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['DotClassInfo', 'RepoParser']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.schema"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['UMLClassView']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['concat_namespace', 'split_namespace']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.di_graph_repository"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['DiGraphRepository']"}, {"id": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.graph_repository"}, {"id": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"id": "metagpt/actions/rebuild_class_view.py:names:['GraphKeyword', 'GraphRepository']"}, {"id": "{\"lineno\":32,\"end_lineno\":156,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RebuildClassView\"],\"properties\":{}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_main_sequence_view"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_sequence_view"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_main_entry"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_use_case"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_sequence_view"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_participants"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_use_cases"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_detail"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_uml_class_view"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_source_code"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_full_filename"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_new_participant"}, {"id": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_participant"}, {"id": "metagpt/actions/rebuild_sequence_view.py:ast.Constant:\n@Time : 2024/1/4\n@Author : mashenquan\n@File : rebuild_sequence_view.py\n@Desc : Rebuild sequence view info\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4\\n@Author : mashenquan\\n@File : rebuild_sequence_view.py\\n@Desc : Rebuild sequence view info\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:__future__"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['annotations']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:re"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:datetime"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['datetime']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:pathlib"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['Path']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:typing"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['List', 'Optional']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:pydantic"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['BaseModel']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:tenacity"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.actions"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['Action']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.config2"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['config']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.const"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"GRAPH_REPO_FILE_REPO\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['GRAPH_REPO_FILE_REPO']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.logs"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['logger']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.repo_parser"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"CodeBlockInfo\",\"DotClassInfo\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['CodeBlockInfo', 'DotClassInfo']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.schema"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['UMLClassView']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":25,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\",\"concat_namespace\",\"general_after_log\",\"list_files\",\"parse_json_code_block\",\"read_file_block\",\"split_namespace\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['aread', 'concat_namespace', 'general_after_log', 'list_files', 'parse_json_code_block', 'read_file_block', 'split_namespace']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.di_graph_repository"}, {"id": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['DiGraphRepository']"}, {"id": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.graph_repository"}, {"id": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphKeyword\",\"GraphRepository\"]}}"}, {"id": "metagpt/actions/rebuild_sequence_view.py:names:['SPO', 'GraphKeyword', 'GraphRepository']"}, {"id": "{\"lineno\":38,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SQVUseCase\"],\"properties\":{}}"}, {"id": "{\"lineno\":47,\"end_lineno\":50,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SQVUseCaseDetails\"],\"properties\":{}}"}, {"id": "{\"lineno\":53,\"end_lineno\":397,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RebuildSequenceView\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/write_code.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_code.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.1.3 of RFC 116, modify the data type of the `cause_by`\n value of the `Message` object.\n@Modified By: mashenquan, 2023-11-27.\n 1. Mark the location of Design, Tasks, Legacy Code and Debug logs in the PROMPT_TEMPLATE with markdown\n code-block formatting to enhance the understanding for the LLM.\n 2. Following the think-act principle, solidify the task parameters when creating the WriteCode object, rather\n than passing them in when calling the run function.\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_code.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.1.3 of RFC 116, modify the data type of the `cause_by`\\n value of the `Message` object.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. Mark the location of Design, Tasks, Legacy Code and Debug logs in the PROMPT_TEMPLATE with markdown\\n code-block formatting to enhance the understanding for the LLM.\\n 2. Following the think-act principle, solidify the task parameters when creating the WriteCode object, rather\\n than passing them in when calling the run function.\\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code.py:json"}, {"id": "metagpt/actions/write_code.py:module:pydantic"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['Field']"}, {"id": "metagpt/actions/write_code.py:module:tenacity"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['Action']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.actions.project_management_an"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['REFINED_TASK_LIST', 'TASK_LIST']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.actions.write_code_plan_and_change_an"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"REFINED_TEMPLATE\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['REFINED_TEMPLATE']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.const"}, {"id": "{\"lineno\":26,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"CODE_PLAN_AND_CHANGE_FILENAME\",\"REQUIREMENT_FILENAME\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['BUGFIX_FILENAME', 'CODE_PLAN_AND_CHANGE_FILENAME', 'REQUIREMENT_FILENAME']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.logs"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['logger']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.schema"}, {"id": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\",\"Document\",\"RunCodeResult\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['CodingContext', 'Document', 'RunCodeResult']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['CodeParser']"}, {"id": "metagpt/actions/write_code.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/actions/write_code.py:names:['ProjectRepo']"}, {"id": "{\"lineno\":36,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":87,\"end_lineno\":219,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCode\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd_an.py"}, {"id": "metagpt/actions/write_prd_an.py:LANGUAGE"}, {"id": "metagpt/actions/write_prd_an.py:PROGRAMMING_LANGUAGE"}, {"id": "metagpt/actions/write_prd_an.py:ORIGINAL_REQUIREMENTS"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENTS"}, {"id": "metagpt/actions/write_prd_an.py:PROJECT_NAME"}, {"id": "metagpt/actions/write_prd_an.py:PRODUCT_GOALS"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_PRODUCT_GOALS"}, {"id": "metagpt/actions/write_prd_an.py:USER_STORIES"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_USER_STORIES"}, {"id": "metagpt/actions/write_prd_an.py:COMPETITIVE_ANALYSIS"}, {"id": "metagpt/actions/write_prd_an.py:COMPETITIVE_QUADRANT_CHART"}, {"id": "metagpt/actions/write_prd_an.py:REQUIREMENT_ANALYSIS"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_ANALYSIS"}, {"id": "metagpt/actions/write_prd_an.py:REQUIREMENT_POOL"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_POOL"}, {"id": "metagpt/actions/write_prd_an.py:UI_DESIGN_DRAFT"}, {"id": "metagpt/actions/write_prd_an.py:ANYTHING_UNCLEAR"}, {"id": "metagpt/actions/write_prd_an.py:ISSUE_TYPE"}, {"id": "metagpt/actions/write_prd_an.py:IS_RELATIVE"}, {"id": "metagpt/actions/write_prd_an.py:REASON"}, {"id": "metagpt/actions/write_prd_an.py:NODES"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_NODES"}, {"id": "metagpt/actions/write_prd_an.py:WRITE_PRD_NODE"}, {"id": "metagpt/actions/write_prd_an.py:REFINED_PRD_NODE"}, {"id": "metagpt/actions/write_prd_an.py:WP_ISSUE_TYPE_NODE"}, {"id": "metagpt/actions/write_prd_an.py:WP_IS_RELATIVE_NODE"}, {"id": "metagpt/actions/write_prd_an.py:ast.Constant:\n@Time : 2023/12/14 11:40\n@Author : alexanderwu\n@File : write_prd_an.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/14 11:40\\n@Author : alexanderwu\\n@File : write_prd_an.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd_an.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/actions/write_prd_an.py:names:['List']"}, {"id": "metagpt/actions/write_prd_an.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/write_prd_an.py:names:['ActionNode']"}, {"id": "{\"lineno\":12,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANGUAGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":19,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROGRAMMING_LANGUAGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.Assign\",\"tokens\":[\"ORIGINAL_REQUIREMENTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":38,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENTS\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":46,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROJECT_NAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRODUCT_GOALS\"],\"properties\":{}}"}, {"id": "{\"lineno\":55,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PRODUCT_GOALS\"],\"properties\":{}}"}, {"id": "{\"lineno\":67,\"end_lineno\":78,\"type_name\":\"ast.Assign\",\"tokens\":[\"USER_STORIES\"],\"properties\":{}}"}, {"id": "{\"lineno\":80,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_USER_STORIES\"],\"properties\":{}}"}, {"id": "{\"lineno\":94,\"end_lineno\":103,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":105,\"end_lineno\":124,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_QUADRANT_CHART\"],\"properties\":{}}"}, {"id": "{\"lineno\":126,\"end_lineno\":131,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":133,\"end_lineno\":140,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENT_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":142,\"end_lineno\":147,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_POOL\"],\"properties\":{}}"}, {"id": "{\"lineno\":149,\"end_lineno\":155,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENT_POOL\"],\"properties\":{}}"}, {"id": "{\"lineno\":157,\"end_lineno\":162,\"type_name\":\"ast.Assign\",\"tokens\":[\"UI_DESIGN_DRAFT\"],\"properties\":{}}"}, {"id": "{\"lineno\":164,\"end_lineno\":169,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR\"],\"properties\":{}}"}, {"id": "{\"lineno\":171,\"end_lineno\":176,\"type_name\":\"ast.Assign\",\"tokens\":[\"ISSUE_TYPE\"],\"properties\":{}}"}, {"id": "{\"lineno\":178,\"end_lineno\":183,\"type_name\":\"ast.Assign\",\"tokens\":[\"IS_RELATIVE\"],\"properties\":{}}"}, {"id": "{\"lineno\":185,\"end_lineno\":187,\"type_name\":\"ast.Assign\",\"tokens\":[\"REASON\"],\"properties\":{}}"}, {"id": "{\"lineno\":190,\"end_lineno\":203,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":205,\"end_lineno\":218,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":220,\"end_lineno\":220,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_PRD_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":221,\"end_lineno\":221,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PRD_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":222,\"end_lineno\":222,\"type_name\":\"ast.Assign\",\"tokens\":[\"WP_ISSUE_TYPE_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":223,\"end_lineno\":223,\"type_name\":\"ast.Assign\",\"tokens\":[\"WP_IS_RELATIVE_NODE\"],\"properties\":{}}"}, {"id": "metagpt/actions/summarize_code.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/summarize_code.py:FORMAT_EXAMPLE"}, {"id": "metagpt/actions/summarize_code.py:ast.Constant:\n@Author : alexanderwu\n@File : summarize_code.py\n@Modified By: mashenquan, 2023/12/5. Archive the summarization content of issue discovery for use in WriteCode.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : summarize_code.py\\n@Modified By: mashenquan, 2023/12/5. Archive the summarization content of issue discovery for use in WriteCode.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/summarize_code.py:module:pathlib"}, {"id": "metagpt/actions/summarize_code.py:names:['Path']"}, {"id": "metagpt/actions/summarize_code.py:module:pydantic"}, {"id": "metagpt/actions/summarize_code.py:names:['Field']"}, {"id": "metagpt/actions/summarize_code.py:module:tenacity"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/actions/summarize_code.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/summarize_code.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/summarize_code.py:names:['Action']"}, {"id": "metagpt/actions/summarize_code.py:module:metagpt.logs"}, {"id": "metagpt/actions/summarize_code.py:names:['logger']"}, {"id": "metagpt/actions/summarize_code.py:module:metagpt.schema"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodeSummarizeContext\"]}}"}, {"id": "metagpt/actions/summarize_code.py:names:['CodeSummarizeContext']"}, {"id": "{\"lineno\":17,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":46,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_EXAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":90,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SummarizeCode\"],\"properties\":{}}"}, {"id": "metagpt/actions/research.py:CollectLinks:_search_and_rank_urls"}, {"id": "metagpt/actions/research.py:WebBrowseAndSummarize:__init__"}, {"id": "metagpt/actions/research.py:ConductResearch:__init__"}, {"id": "metagpt/actions/research.py:get_research_system_text"}, {"id": "metagpt/actions/research.py:LANG_PROMPT"}, {"id": "metagpt/actions/research.py:RESEARCH_BASE_SYSTEM"}, {"id": "metagpt/actions/research.py:RESEARCH_TOPIC_SYSTEM"}, {"id": "metagpt/actions/research.py:SEARCH_TOPIC_PROMPT"}, {"id": "metagpt/actions/research.py:SUMMARIZE_SEARCH_PROMPT"}, {"id": "metagpt/actions/research.py:COLLECT_AND_RANKURLS_PROMPT"}, {"id": "metagpt/actions/research.py:WEB_BROWSE_AND_SUMMARIZE_PROMPT"}, {"id": "metagpt/actions/research.py:CONDUCT_RESEARCH_PROMPT"}, {"id": "metagpt/actions/research.py:module:__future__"}, {"id": "metagpt/actions/research.py:names:['annotations']"}, {"id": "metagpt/actions/research.py:asyncio"}, {"id": "metagpt/actions/research.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Optional\",\"Union\"]}}"}, {"id": "metagpt/actions/research.py:names:['Callable', 'Optional', 'Union']"}, {"id": "metagpt/actions/research.py:module:pydantic"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\",\"parse_obj_as\"]}}"}, {"id": "metagpt/actions/research.py:names:['Field', 'parse_obj_as']"}, {"id": "metagpt/actions/research.py:module:metagpt.actions"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/research.py:names:['Action']"}, {"id": "metagpt/actions/research.py:module:metagpt.config2"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"id": "metagpt/actions/research.py:names:['config']"}, {"id": "metagpt/actions/research.py:module:metagpt.logs"}, {"id": "metagpt/actions/research.py:names:['logger']"}, {"id": "metagpt/actions/research.py:module:metagpt.tools.search_engine"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"id": "metagpt/actions/research.py:names:['SearchEngine']"}, {"id": "metagpt/actions/research.py:module:metagpt.tools.web_browser_engine"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.web_browser_engine\",\"names\":[\"WebBrowserEngine\",\"WebBrowserEngineType\"]}}"}, {"id": "metagpt/actions/research.py:names:['WebBrowserEngine', 'WebBrowserEngineType']"}, {"id": "metagpt/actions/research.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"id": "metagpt/actions/research.py:names:['OutputParser']"}, {"id": "metagpt/actions/research.py:module:metagpt.utils.text"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.text\",\"names\":[\"generate_prompt_chunk\",\"reduce_message_length\"]}}"}, {"id": "metagpt/actions/research.py:names:['generate_prompt_chunk', 'reduce_message_length']"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANG_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":20,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_BASE_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_TOPIC_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":25,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_TOPIC_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":35,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_SEARCH_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":37,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"COLLECT_AND_RANKURLS_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"WEB_BROWSE_AND_SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONDUCT_RESEARCH_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":171,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CollectLinks\"],\"properties\":{}}"}, {"id": "{\"lineno\":174,\"end_lineno\":237,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowseAndSummarize\"],\"properties\":{}}"}, {"id": "{\"lineno\":240,\"end_lineno\":265,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ConductResearch\"],\"properties\":{}}"}, {"id": "{\"lineno\":268,\"end_lineno\":278,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_research_system_text\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : skill_action.py\n@Desc : Call learned skill\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : skill_action.py\\n@Desc : Call learned skill\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:module:__future__"}, {"id": "metagpt/actions/skill_action.py:names:['annotations']"}, {"id": "metagpt/actions/skill_action.py:ast"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:importlib"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:traceback"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"id": "metagpt/actions/skill_action.py:module:copy"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"id": "metagpt/actions/skill_action.py:names:['deepcopy']"}, {"id": "metagpt/actions/skill_action.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"id": "metagpt/actions/skill_action.py:names:['Dict', 'Optional']"}, {"id": "metagpt/actions/skill_action.py:module:metagpt.actions"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/skill_action.py:names:['Action']"}, {"id": "metagpt/actions/skill_action.py:module:metagpt.learn.skill_loader"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"Skill\"]}}"}, {"id": "metagpt/actions/skill_action.py:names:['Skill']"}, {"id": "metagpt/actions/skill_action.py:module:metagpt.logs"}, {"id": "metagpt/actions/skill_action.py:names:['logger']"}, {"id": "metagpt/actions/skill_action.py:module:metagpt.schema"}, {"id": "metagpt/actions/skill_action.py:names:['Message']"}, {"id": "{\"lineno\":24,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ArgumentsParingAction\"],\"properties\":{}}"}, {"id": "{\"lineno\":82,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillAction\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_test.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/write_test.py:ast.Constant:\n@Time : 2023/5/11 22:12\n@Author : alexanderwu\n@File : write_test.py\n@Modified By: mashenquan, 2023-11-27. Following the think-act principle, solidify the task parameters when creating the\n WriteTest object, rather than passing them in when calling the run function.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 22:12\\n@Author : alexanderwu\\n@File : write_test.py\\n@Modified By: mashenquan, 2023-11-27. Following the think-act principle, solidify the task parameters when creating the\\n WriteTest object, rather than passing them in when calling the run function.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_test.py:module:typing"}, {"id": "metagpt/actions/write_test.py:names:['Optional']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.actions.action"}, {"id": "metagpt/actions/write_test.py:names:['Action']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.const"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TEST_CODES_FILE_REPO\"]}}"}, {"id": "metagpt/actions/write_test.py:names:['TEST_CODES_FILE_REPO']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.logs"}, {"id": "metagpt/actions/write_test.py:names:['logger']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.schema"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"TestingContext\"]}}"}, {"id": "metagpt/actions/write_test.py:names:['Document', 'TestingContext']"}, {"id": "metagpt/actions/write_test.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/write_test.py:names:['CodeParser']"}, {"id": "{\"lineno\":19,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTest\"],\"properties\":{}}"}, {"id": "metagpt/actions/debug_error.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/debug_error.py:ast.Constant:\n@Time : 2023/5/11 17:46\n@Author : alexanderwu\n@File : debug_error.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Divide the context into three components: legacy code, unit test code, and console log.\n 2. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:46\\n@Author : alexanderwu\\n@File : debug_error.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Divide the context into three components: legacy code, unit test code, and console log.\\n 2. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/debug_error.py:re"}, {"id": "metagpt/actions/debug_error.py:module:pydantic"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/actions/debug_error.py:names:['Field']"}, {"id": "metagpt/actions/debug_error.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/debug_error.py:names:['Action']"}, {"id": "metagpt/actions/debug_error.py:module:metagpt.logs"}, {"id": "metagpt/actions/debug_error.py:names:['logger']"}, {"id": "metagpt/actions/debug_error.py:module:metagpt.schema"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"id": "metagpt/actions/debug_error.py:names:['RunCodeContext', 'RunCodeResult']"}, {"id": "metagpt/actions/debug_error.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/debug_error.py:names:['CodeParser']"}, {"id": "{\"lineno\":20,\"end_lineno\":45,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":48,\"end_lineno\":75,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DebugError\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_new_system_design"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_merge"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_update_system_design"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_save_data_api_design"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_save_seq_flow"}, {"id": "metagpt/actions/design_api.py:WriteDesign:_save_mermaid_file"}, {"id": "metagpt/actions/design_api.py:NEW_REQ_TEMPLATE"}, {"id": "metagpt/actions/design_api.py:ast.Constant:\n@Time : 2023/5/11 19:26\n@Author : alexanderwu\n@File : design_api.py\n@Modified By: mashenquan, 2023/11/27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.3 of RFC 135, add incremental iteration functionality.\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:26\\n@Author : alexanderwu\\n@File : design_api.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.3 of RFC 135, add incremental iteration functionality.\\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api.py:json"}, {"id": "metagpt/actions/design_api.py:module:pathlib"}, {"id": "metagpt/actions/design_api.py:names:['Path']"}, {"id": "metagpt/actions/design_api.py:module:typing"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['Optional']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.actions"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['Action', 'ActionOutput']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.actions.design_api_an"}, {"id": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_an\",\"names\":[\"DATA_STRUCTURES_AND_INTERFACES\",\"DESIGN_API_NODE\",\"PROGRAM_CALL_FLOW\",\"REFINED_DATA_STRUCTURES_AND_INTERFACES\",\"REFINED_DESIGN_NODE\",\"REFINED_PROGRAM_CALL_FLOW\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['DATA_STRUCTURES_AND_INTERFACES', 'DESIGN_API_NODE', 'PROGRAM_CALL_FLOW', 'REFINED_DATA_STRUCTURES_AND_INTERFACES', 'REFINED_DESIGN_NODE', 'REFINED_PROGRAM_CALL_FLOW']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.const"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_API_DESIGN_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['DATA_API_DESIGN_FILE_REPO', 'SEQ_FLOW_FILE_REPO']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.logs"}, {"id": "metagpt/actions/design_api.py:names:['logger']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.schema"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\",\"Message\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['Document', 'Documents', 'Message']"}, {"id": "metagpt/actions/design_api.py:module:metagpt.utils.mermaid"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"id": "metagpt/actions/design_api.py:names:['mermaid_to_file']"}, {"id": "{\"lineno\":30,\"end_lineno\":36,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":39,\"end_lineno\":120,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDesign\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_an.py"}, {"id": "metagpt/actions/design_api_an.py:main"}, {"id": "metagpt/actions/design_api_an.py:IMPLEMENTATION_APPROACH"}, {"id": "metagpt/actions/design_api_an.py:REFINED_IMPLEMENTATION_APPROACH"}, {"id": "metagpt/actions/design_api_an.py:PROJECT_NAME"}, {"id": "metagpt/actions/design_api_an.py:FILE_LIST"}, {"id": "metagpt/actions/design_api_an.py:REFINED_FILE_LIST"}, {"id": "metagpt/actions/design_api_an.py:DATA_STRUCTURES_AND_INTERFACES"}, {"id": "metagpt/actions/design_api_an.py:REFINED_DATA_STRUCTURES_AND_INTERFACES"}, {"id": "metagpt/actions/design_api_an.py:PROGRAM_CALL_FLOW"}, {"id": "metagpt/actions/design_api_an.py:REFINED_PROGRAM_CALL_FLOW"}, {"id": "metagpt/actions/design_api_an.py:ANYTHING_UNCLEAR"}, {"id": "metagpt/actions/design_api_an.py:NODES"}, {"id": "metagpt/actions/design_api_an.py:REFINED_NODES"}, {"id": "metagpt/actions/design_api_an.py:DESIGN_API_NODE"}, {"id": "metagpt/actions/design_api_an.py:REFINED_DESIGN_NODE"}, {"id": "metagpt/actions/design_api_an.py:ast.Constant:\n@Time : 2023/12/12 22:24\n@Author : alexanderwu\n@File : design_api_an.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/12 22:24\\n@Author : alexanderwu\\n@File : design_api_an.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_an.py:module:typing"}, {"id": "metagpt/actions/design_api_an.py:names:['List']"}, {"id": "metagpt/actions/design_api_an.py:module:metagpt.actions.action_node"}, {"id": "metagpt/actions/design_api_an.py:names:['ActionNode']"}, {"id": "metagpt/actions/design_api_an.py:module:metagpt.logs"}, {"id": "metagpt/actions/design_api_an.py:names:['logger']"}, {"id": "metagpt/actions/design_api_an.py:module:metagpt.utils.mermaid"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"MMC1\",\"MMC2\"]}}"}, {"id": "metagpt/actions/design_api_an.py:names:['MMC1', 'MMC2']"}, {"id": "{\"lineno\":14,\"end_lineno\":19,\"type_name\":\"ast.Assign\",\"tokens\":[\"IMPLEMENTATION_APPROACH\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_IMPLEMENTATION_APPROACH\"],\"properties\":{}}"}, {"id": "{\"lineno\":30,\"end_lineno\":32,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROJECT_NAME\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"FILE_LIST\"],\"properties\":{}}"}, {"id": "{\"lineno\":41,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_FILE_LIST\"],\"properties\":{}}"}, {"id": "{\"lineno\":49,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_STRUCTURES_AND_INTERFACES\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":66,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_DATA_STRUCTURES_AND_INTERFACES\"],\"properties\":{}}"}, {"id": "{\"lineno\":68,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROGRAM_CALL_FLOW\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PROGRAM_CALL_FLOW\"],\"properties\":{}}"}, {"id": "{\"lineno\":86,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR\"],\"properties\":{}}"}, {"id": "{\"lineno\":93,\"end_lineno\":100,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":102,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":110,\"end_lineno\":110,\"type_name\":\"ast.Assign\",\"tokens\":[\"DESIGN_API_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":111,\"end_lineno\":111,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_DESIGN_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":114,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_an.py:__name__:__main__"}, {"id": "{\"lineno\":121,\"end_lineno\":122,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_output.py:ActionOutput:__init__"}, {"id": "metagpt/actions/action_output.py:ast.Constant:\n@Time : 2023/7/11 10:03\n@Author : chengmaoyu\n@File : action_output\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/11 10:03\\n@Author : chengmaoyu\\n@File : action_output\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_output.py:module:pydantic"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"id": "metagpt/actions/action_output.py:names:['BaseModel']"}, {"id": "{\"lineno\":12,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionOutput\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_outcls_registry.py"}, {"id": "metagpt/actions/action_outcls_registry.py:register_action_outcls"}, {"id": "metagpt/actions/action_outcls_registry.py:action_outcls_registry"}, {"id": "metagpt/actions/action_outcls_registry.py:module:functools"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"wraps\"]}}"}, {"id": "metagpt/actions/action_outcls_registry.py:names:['wraps']"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"action_outcls_registry\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":42,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_action_outcls\"],\"properties\":{}}"}, {"id": "metagpt/actions/add_requirement.py:ast.Constant:\n@Time : 2023/5/20 17:46\n@Author : alexanderwu\n@File : add_requirement.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/20 17:46\\n@Author : alexanderwu\\n@File : add_requirement.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/add_requirement.py:module:metagpt.actions"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/add_requirement.py:names:['Action']"}, {"id": "{\"lineno\":11,\"end_lineno\":12,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UserRequirement\"],\"properties\":{}}"}, {"id": "metagpt/actions/__init__.py"}, {"id": "metagpt/actions/__init__.py:ActionType"}, {"id": "metagpt/actions/__init__.py:__all__"}, {"id": "metagpt/actions/__init__.py:ast.Constant:\n@Time : 2023/5/11 17:44\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:44\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/__init__.py:module:enum"}, {"id": "metagpt/actions/__init__.py:names:['Enum']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['Action']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.action_output"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['ActionOutput']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.add_requirement"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['UserRequirement']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.debug_error"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.debug_error\",\"names\":[\"DebugError\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['DebugError']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.design_api"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteDesign']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.design_api_review"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_review\",\"names\":[\"DesignReview\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['DesignReview']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.project_management"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management\",\"names\":[\"WriteTasks\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteTasks']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.research"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"CollectLinks\",\"WebBrowseAndSummarize\",\"ConductResearch\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['CollectLinks', 'WebBrowseAndSummarize', 'ConductResearch']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.run_code"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.run_code\",\"names\":[\"RunCode\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['RunCode']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.search_and_summarize"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.search_and_summarize\",\"names\":[\"SearchAndSummarize\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['SearchAndSummarize']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_code"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code\",\"names\":[\"WriteCode\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteCode']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_code_review"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_review\",\"names\":[\"WriteCodeReview\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteCodeReview']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_prd"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd\",\"names\":[\"WritePRD\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WritePRD']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_prd_review"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_review\",\"names\":[\"WritePRDReview\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WritePRDReview']"}, {"id": "metagpt/actions/__init__.py:module:metagpt.actions.write_test"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_test\",\"names\":[\"WriteTest\"]}}"}, {"id": "metagpt/actions/__init__.py:names:['WriteTest']"}, {"id": "{\"lineno\":27,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionType\"],\"properties\":{}}"}, {"id": "{\"lineno\":47,\"end_lineno\":51,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_review.py:REVIEW"}, {"id": "metagpt/actions/write_review.py:LGTM"}, {"id": "metagpt/actions/write_review.py:WRITE_REVIEW_NODE"}, {"id": "metagpt/actions/write_review.py:ast.Constant:\n@Author : alexanderwu\n@File : write_review.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : write_review.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_review.py:module:typing"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/actions/write_review.py:names:['List']"}, {"id": "metagpt/actions/write_review.py:module:metagpt.actions"}, {"id": "metagpt/actions/write_review.py:names:['Action']"}, {"id": "metagpt/actions/write_review.py:module:metagpt.actions.action_node"}, {"id": "metagpt/actions/write_review.py:names:['ActionNode']"}, {"id": "{\"lineno\":12,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW\"],\"properties\":{}}"}, {"id": "{\"lineno\":22,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"LGTM\"],\"properties\":{}}"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_REVIEW_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteReview\"],\"properties\":{}}"}, {"id": "metagpt/actions/action.py:Action:_init_with_instruction"}, {"id": "metagpt/actions/action.py:Action:__str__"}, {"id": "metagpt/actions/action.py:Action:__repr__"}, {"id": "metagpt/actions/action.py:Action:_aask"}, {"id": "metagpt/actions/action.py:Action:_run_action_node"}, {"id": "metagpt/actions/action.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : action.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : action.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/action.py:module:__future__"}, {"id": "metagpt/actions/action.py:names:['annotations']"}, {"id": "metagpt/actions/action.py:module:typing"}, {"id": "metagpt/actions/action.py:names:['Optional', 'Union']"}, {"id": "metagpt/actions/action.py:module:pydantic"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"id": "metagpt/actions/action.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']"}, {"id": "metagpt/actions/action.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/action.py:names:['ActionNode']"}, {"id": "metagpt/actions/action.py:module:metagpt.context_mixin"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"id": "metagpt/actions/action.py:names:['ContextMixin']"}, {"id": "metagpt/actions/action.py:module:metagpt.schema"}, {"id": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"SerializationMixin\",\"TestingContext\"]}}"}, {"id": "metagpt/actions/action.py:names:['CodePlanAndChangeContext', 'CodeSummarizeContext', 'CodingContext', 'RunCodeContext', 'SerializationMixin', 'TestingContext']"}, {"id": "metagpt/actions/action.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/actions/action.py:names:['ProjectRepo']"}, {"id": "{\"lineno\":28,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Action\"],\"properties\":{}}"}, {"id": "metagpt/actions/execute_task.py:ast.Constant:\n@Time : 2023/9/13 12:26\n@Author : femto Zheng\n@File : execute_task.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:26\\n@Author : femto Zheng\\n@File : execute_task.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/execute_task.py:module:metagpt.actions"}, {"id": "metagpt/actions/execute_task.py:names:['Action']"}, {"id": "metagpt/actions/execute_task.py:module:metagpt.schema"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/actions/execute_task.py:names:['Message']"}, {"id": "{\"lineno\":14,\"end_lineno\":19,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExecuteTask\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_handle_bugfix"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_handle_new_requirement"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_handle_requirement_update"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_is_bugfix"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_is_related"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_merge"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_update_prd"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_save_competitive_analysis"}, {"id": "metagpt/actions/write_prd.py:WritePRD:_rename_workspace"}, {"id": "metagpt/actions/write_prd.py:CONTEXT_TEMPLATE"}, {"id": "metagpt/actions/write_prd.py:NEW_REQ_TEMPLATE"}, {"id": "metagpt/actions/write_prd.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_prd.py\n@Modified By: mashenquan, 2023/11/27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.2 of RFC 135, add incremental iteration functionality.\n 3. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":12,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_prd.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.2 of RFC 135, add incremental iteration functionality.\\n 3. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd.py:module:__future__"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['annotations']"}, {"id": "metagpt/actions/write_prd.py:json"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd.py:module:pathlib"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['Path']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.actions"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['Action', 'ActionOutput']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['ActionNode']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.actions.fix_bug"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['FixBug']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.actions.write_prd_an"}, {"id": "{\"lineno\":22,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_an\",\"names\":[\"COMPETITIVE_QUADRANT_CHART\",\"PROJECT_NAME\",\"REFINED_PRD_NODE\",\"WP_IS_RELATIVE_NODE\",\"WP_ISSUE_TYPE_NODE\",\"WRITE_PRD_NODE\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['COMPETITIVE_QUADRANT_CHART', 'PROJECT_NAME', 'REFINED_PRD_NODE', 'WP_IS_RELATIVE_NODE', 'WP_ISSUE_TYPE_NODE', 'WRITE_PRD_NODE']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.const"}, {"id": "{\"lineno\":30,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"REQUIREMENT_FILENAME\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['BUGFIX_FILENAME', 'COMPETITIVE_ANALYSIS_FILE_REPO', 'REQUIREMENT_FILENAME']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.logs"}, {"id": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['logger']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.schema"}, {"id": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"BugFixContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['BugFixContext', 'Document', 'Documents', 'Message']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['CodeParser']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.utils.file_repository"}, {"id": "metagpt/actions/write_prd.py:names:['FileRepository']"}, {"id": "metagpt/actions/write_prd.py:module:metagpt.utils.mermaid"}, {"id": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"id": "metagpt/actions/write_prd.py:names:['mermaid_to_file']"}, {"id": "{\"lineno\":41,\"end_lineno\":50,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONTEXT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":61,\"end_lineno\":172,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePRD\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_docstring.py:_simplify_python_code"}, {"id": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_SYSTEM"}, {"id": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_GOOGLE"}, {"id": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_NUMPY"}, {"id": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_SPHINX"}, {"id": "metagpt/actions/write_docstring.py:_python_docstring_style"}, {"id": "metagpt/actions/write_docstring.py:ast.Constant:Code Docstring Generator.\n\nThis script provides a tool to automatically generate docstrings for Python code. It uses the specified style to create\ndocstrings for the given code and system text.\n\nUsage:\n python3 -m metagpt.actions.write_docstring [--overwrite] [--style=]\n\nArguments:\n filename The path to the Python file for which you want to generate docstrings.\n\nOptions:\n --overwrite If specified, overwrite the original file with the code containing docstrings.\n --style= Specify the style of the generated docstrings.\n Valid values: 'google', 'numpy', or 'sphinx'.\n Default: 'google'\n\nExample:\n python3 -m metagpt.actions.write_docstring ./metagpt/startup.py --overwrite False --style=numpy\n\nThis script uses the 'fire' library to create a command-line interface. It generates docstrings for the given Python code using\nthe specified docstring style and adds them to the code.\n"}, {"id": "{\"lineno\":1,\"end_lineno\":23,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"Code Docstring Generator.\\n\\nThis script provides a tool to automatically generate docstrings for Python code. It uses the specified style to create\\ndocstrings for the given code and system text.\\n\\nUsage:\\n python3 -m metagpt.actions.write_docstring [--overwrite] [--style=]\\n\\nArguments:\\n filename The path to the Python file for which you want to generate docstrings.\\n\\nOptions:\\n --overwrite If specified, overwrite the original file with the code containing docstrings.\\n --style= Specify the style of the generated docstrings.\\n Valid values: 'google', 'numpy', or 'sphinx'.\\n Default: 'google'\\n\\nExample:\\n python3 -m metagpt.actions.write_docstring ./metagpt/startup.py --overwrite False --style=numpy\\n\\nThis script uses the 'fire' library to create a command-line interface. It generates docstrings for the given Python code using\\nthe specified docstring style and adds them to the code.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_docstring.py:module:__future__"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['annotations']"}, {"id": "metagpt/actions/write_docstring.py:ast"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_docstring.py:module:pathlib"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['Path']"}, {"id": "metagpt/actions/write_docstring.py:module:typing"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['Literal', 'Optional']"}, {"id": "metagpt/actions/write_docstring.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['Action']"}, {"id": "metagpt/actions/write_docstring.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"aread\",\"awrite\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['OutputParser', 'aread', 'awrite']"}, {"id": "metagpt/actions/write_docstring.py:module:metagpt.utils.pycst"}, {"id": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.pycst\",\"names\":[\"merge_docstring\"]}}"}, {"id": "metagpt/actions/write_docstring.py:names:['merge_docstring']"}, {"id": "{\"lineno\":34,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_GOOGLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":86,\"end_lineno\":122,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_NUMPY\"],\"properties\":{}}"}, {"id": "{\"lineno\":124,\"end_lineno\":147,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_SPHINX\"],\"properties\":{}}"}, {"id": "{\"lineno\":149,\"end_lineno\":153,\"type_name\":\"ast.Assign\",\"tokens\":[\"_python_docstring_style\"],\"properties\":{}}"}, {"id": "{\"lineno\":156,\"end_lineno\":196,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDocstring\"],\"properties\":{}}"}, {"id": "{\"lineno\":199,\"end_lineno\":212,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_simplify_python_code\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_docstring.py:__name__:__main__"}, {"id": "{\"lineno\":215,\"end_lineno\":218,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/actions/fix_bug.py:ast.Constant:\n@Time : 2023-12-12\n@Author : mashenquan\n@File : fix_bug.py\n"}, {"id": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023-12-12\\n@Author : mashenquan\\n@File : fix_bug.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/fix_bug.py:module:metagpt.actions"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/fix_bug.py:names:['Action']"}, {"id": "{\"lineno\":10,\"end_lineno\":13,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FixBug\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_interview.py:QUESTIONS"}, {"id": "metagpt/actions/prepare_interview.py:ast.Constant:\n@Time : 2023/9/19 15:02\n@Author : DevXiaolan\n@File : prepare_interview.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/19 15:02\\n@Author : DevXiaolan\\n@File : prepare_interview.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_interview.py:module:metagpt.actions"}, {"id": "metagpt/actions/prepare_interview.py:names:['Action']"}, {"id": "metagpt/actions/prepare_interview.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/prepare_interview.py:names:['ActionNode']"}, {"id": "{\"lineno\":11,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"QUESTIONS\"],\"properties\":{}}"}, {"id": "{\"lineno\":21,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PrepareInterview\"],\"properties\":{}}"}, {"id": "metagpt/actions/run_code.py:RunCode:_install_via_subprocess"}, {"id": "metagpt/actions/run_code.py:RunCode:_install_requirements"}, {"id": "metagpt/actions/run_code.py:RunCode:_install_pytest"}, {"id": "metagpt/actions/run_code.py:RunCode:_install_dependencies"}, {"id": "metagpt/actions/run_code.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/run_code.py:TEMPLATE_CONTEXT"}, {"id": "metagpt/actions/run_code.py:ast.Constant:\n@Time : 2023/5/11 17:46\n@Author : alexanderwu\n@File : run_code.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Mark the location of Console logs in the PROMPT_TEMPLATE with markdown code-block formatting to enhance\n the understanding for the LLM.\n 2. Fix bug: Add the \"install dependency\" operation.\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\n 4. According to section 2.2.3.5.7 of RFC 135, change the method of transferring file content\n (code files, unit test files, log files) from using the message to using the file name.\n 5. Merged the `Config` class of send18:dev branch to take over the set/get operations of the Environment\n class.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":17,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:46\\n@Author : alexanderwu\\n@File : run_code.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Mark the location of Console logs in the PROMPT_TEMPLATE with markdown code-block formatting to enhance\\n the understanding for the LLM.\\n 2. Fix bug: Add the \\\"install dependency\\\" operation.\\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\\n 4. According to section 2.2.3.5.7 of RFC 135, change the method of transferring file content\\n (code files, unit test files, log files) from using the message to using the file name.\\n 5. Merged the `Config` class of send18:dev branch to take over the set/get operations of the Environment\\n class.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/run_code.py:subprocess"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"id": "metagpt/actions/run_code.py:module:pathlib"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['Path']"}, {"id": "metagpt/actions/run_code.py:module:typing"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['Tuple']"}, {"id": "metagpt/actions/run_code.py:module:pydantic"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['Field']"}, {"id": "metagpt/actions/run_code.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['Action']"}, {"id": "metagpt/actions/run_code.py:module:metagpt.logs"}, {"id": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['logger']"}, {"id": "metagpt/actions/run_code.py:module:metagpt.schema"}, {"id": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['RunCodeContext', 'RunCodeResult']"}, {"id": "metagpt/actions/run_code.py:module:metagpt.utils.exceptions"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"id": "metagpt/actions/run_code.py:names:['handle_exception']"}, {"id": "{\"lineno\":29,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEMPLATE_CONTEXT\"],\"properties\":{}}"}, {"id": "{\"lineno\":78,\"end_lineno\":173,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCode\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_an_draft.py:main"}, {"id": "metagpt/actions/write_code_an_draft.py:REVIEW"}, {"id": "metagpt/actions/write_code_an_draft.py:REVIEW_RESULT"}, {"id": "metagpt/actions/write_code_an_draft.py:NEXT_STEPS"}, {"id": "metagpt/actions/write_code_an_draft.py:WRITE_DRAFT"}, {"id": "metagpt/actions/write_code_an_draft.py:WRITE_FUNCTION"}, {"id": "metagpt/actions/write_code_an_draft.py:REWRITE_CODE"}, {"id": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_CONTEXT"}, {"id": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SMALLEST_CONTEXT"}, {"id": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SAMPLE"}, {"id": "metagpt/actions/write_code_an_draft.py:WRITE_CODE_NODE"}, {"id": "metagpt/actions/write_code_an_draft.py:WRITE_MOVE_NODE"}, {"id": "metagpt/actions/write_code_an_draft.py:CR_FOR_MOVE_FUNCTION_BY_3"}, {"id": "metagpt/actions/write_code_an_draft.py:ast.Constant:\n@Author : alexanderwu\n@File : write_review.py\n"}, {"id": "metagpt/actions/write_code_an_draft.py:asyncio"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_an_draft.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Literal\"]}}"}, {"id": "metagpt/actions/write_code_an_draft.py:names:['List', 'Literal']"}, {"id": "metagpt/actions/write_code_an_draft.py:module:metagpt.actions"}, {"id": "metagpt/actions/write_code_an_draft.py:names:['Action']"}, {"id": "metagpt/actions/write_code_an_draft.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/write_code_an_draft.py:names:['ActionNode']"}, {"id": "{\"lineno\":13,\"end_lineno\":22,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW\"],\"properties\":{}}"}, {"id": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW_RESULT\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEXT_STEPS\"],\"properties\":{}}"}, {"id": "{\"lineno\":63,\"end_lineno\":68,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_DRAFT\"],\"properties\":{}}"}, {"id": "{\"lineno\":71,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_FUNCTION\"],\"properties\":{}}"}, {"id": "{\"lineno\":83,\"end_lineno\":94,\"type_name\":\"ast.Assign\",\"tokens\":[\"REWRITE_CODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":97,\"end_lineno\":416,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_CONTEXT\"],\"properties\":{}}"}, {"id": "{\"lineno\":419,\"end_lineno\":489,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_SMALLEST_CONTEXT\"],\"properties\":{}}"}, {"id": "{\"lineno\":492,\"end_lineno\":554,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_SAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":557,\"end_lineno\":557,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_CODE_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":558,\"end_lineno\":558,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_MOVE_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":561,\"end_lineno\":573,\"type_name\":\"ast.Assign\",\"tokens\":[\"CR_FOR_MOVE_FUNCTION_BY_3\"],\"properties\":{}}"}, {"id": "{\"lineno\":576,\"end_lineno\":581,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeAN\"],\"properties\":{}}"}, {"id": "{\"lineno\":584,\"end_lineno\":585,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_an_draft.py:__name__:__main__"}, {"id": "{\"lineno\":588,\"end_lineno\":589,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/actions/talk_action.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : talk_action.py\n@Desc : Act as it\u2019s a talk\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : talk_action.py\\n@Desc : Act as it\u2019s a talk\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/talk_action.py:module:typing"}, {"id": "metagpt/actions/talk_action.py:names:['Optional']"}, {"id": "metagpt/actions/talk_action.py:module:metagpt.actions"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/talk_action.py:names:['Action']"}, {"id": "metagpt/actions/talk_action.py:module:metagpt.config2"}, {"id": "metagpt/actions/talk_action.py:names:['config']"}, {"id": "metagpt/actions/talk_action.py:module:metagpt.logs"}, {"id": "metagpt/actions/talk_action.py:names:['logger']"}, {"id": "metagpt/actions/talk_action.py:module:metagpt.schema"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"id": "metagpt/actions/talk_action.py:names:['Message']"}, {"id": "{\"lineno\":17,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TalkAction\"],\"properties\":{}}"}, {"id": "{\"lineno\":100,\"end_lineno\":169,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TalkActionPrompt\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_tutorial.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n@Describe : Actions of the tutorial assistant, including writing directories and document content.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n@Describe : Actions of the tutorial assistant, including writing directories and document content.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_tutorial.py:module:typing"}, {"id": "metagpt/actions/write_tutorial.py:names:['Dict']"}, {"id": "metagpt/actions/write_tutorial.py:module:metagpt.actions"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_tutorial.py:names:['Action']"}, {"id": "metagpt/actions/write_tutorial.py:module:metagpt.prompts.tutorial_assistant"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.tutorial_assistant\",\"names\":[\"CONTENT_PROMPT\",\"DIRECTORY_PROMPT\"]}}"}, {"id": "metagpt/actions/write_tutorial.py:names:['CONTENT_PROMPT', 'DIRECTORY_PROMPT']"}, {"id": "metagpt/actions/write_tutorial.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"id": "metagpt/actions/write_tutorial.py:names:['OutputParser']"}, {"id": "{\"lineno\":17,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDirectory\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":65,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteContent\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd_review.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_prd_review.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_prd_review.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_prd_review.py:module:typing"}, {"id": "metagpt/actions/write_prd_review.py:names:['Optional']"}, {"id": "metagpt/actions/write_prd_review.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_prd_review.py:names:['Action']"}, {"id": "{\"lineno\":14,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePRDReview\"],\"properties\":{}}"}, {"id": "metagpt/actions/generate_questions.py:QUESTIONS"}, {"id": "metagpt/actions/generate_questions.py:ast.Constant:\n@File : generate_questions.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@File : generate_questions.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/generate_questions.py:module:metagpt.actions"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/generate_questions.py:names:['Action']"}, {"id": "metagpt/actions/generate_questions.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/generate_questions.py:names:['ActionNode']"}, {"id": "{\"lineno\":9,\"end_lineno\":15,\"type_name\":\"ast.Assign\",\"tokens\":[\"QUESTIONS\"],\"properties\":{}}"}, {"id": "{\"lineno\":18,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GenerateQuestions\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_documents.py:PrepareDocuments:_init_repo"}, {"id": "metagpt/actions/prepare_documents.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : prepare_documents.py\n@Desc: PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt.\n RFC 135 2.2.3.5.1.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : prepare_documents.py\\n@Desc: PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt.\\n RFC 135 2.2.3.5.1.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_documents.py:shutil"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"id": "metagpt/actions/prepare_documents.py:module:pathlib"}, {"id": "metagpt/actions/prepare_documents.py:names:['Path']"}, {"id": "metagpt/actions/prepare_documents.py:module:typing"}, {"id": "metagpt/actions/prepare_documents.py:names:['Optional']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.actions"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['Action', 'ActionOutput']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.const"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"REQUIREMENT_FILENAME\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['REQUIREMENT_FILENAME']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.utils.file_repository"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['FileRepository']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.utils.git_repository"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['GitRepository']"}, {"id": "metagpt/actions/prepare_documents.py:module:metagpt.utils.project_repo"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"id": "metagpt/actions/prepare_documents.py:names:['ProjectRepo']"}, {"id": "{\"lineno\":21,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PrepareDocuments\"],\"properties\":{}}"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM_EN_US"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_PROMPT"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_SYSTEM"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_PROMPT"}, {"id": "metagpt/actions/search_and_summarize.py:SEARCH_FOOD"}, {"id": "metagpt/actions/search_and_summarize.py:ast.Constant:\n@Time : 2023/5/23 17:26\n@Author : alexanderwu\n@File : search_google.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 17:26\\n@Author : alexanderwu\\n@File : search_google.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/search_and_summarize.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"id": "metagpt/actions/search_and_summarize.py:names:['Any', 'Optional']"}, {"id": "metagpt/actions/search_and_summarize.py:pydantic"}, {"id": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"pydantic\"],\"properties\":{}}"}, {"id": "metagpt/actions/search_and_summarize.py:module:pydantic"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"model_validator\"]}}"}, {"id": "metagpt/actions/search_and_summarize.py:names:['model_validator']"}, {"id": "metagpt/actions/search_and_summarize.py:module:metagpt.actions"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/search_and_summarize.py:names:['Action']"}, {"id": "metagpt/actions/search_and_summarize.py:module:metagpt.logs"}, {"id": "metagpt/actions/search_and_summarize.py:names:['logger']"}, {"id": "metagpt/actions/search_and_summarize.py:module:metagpt.schema"}, {"id": "metagpt/actions/search_and_summarize.py:names:['Message']"}, {"id": "metagpt/actions/search_and_summarize.py:module:metagpt.tools"}, {"id": "metagpt/actions/search_and_summarize.py:names:['SearchEngineType']"}, {"id": "metagpt/actions/search_and_summarize.py:module:metagpt.tools.search_engine"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"id": "metagpt/actions/search_and_summarize.py:names:['SearchEngine']"}, {"id": "{\"lineno\":19,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SYSTEM_EN_US\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":60,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SALES_SYSTEM\"],\"properties\":{}}"}, {"id": "{\"lineno\":82,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SALES_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":93,\"end_lineno\":102,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_FOOD\"],\"properties\":{}}"}, {"id": "{\"lineno\":105,\"end_lineno\":150,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchAndSummarize\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_review.py:PROMPT_TEMPLATE"}, {"id": "metagpt/actions/write_code_review.py:EXAMPLE_AND_INSTRUCTION"}, {"id": "metagpt/actions/write_code_review.py:FORMAT_EXAMPLE"}, {"id": "metagpt/actions/write_code_review.py:REWRITE_CODE_TEMPLATE"}, {"id": "metagpt/actions/write_code_review.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_code_review.py\n@Modified By: mashenquan, 2023/11/27. Following the think-act principle, solidify the task parameters when creating the\n WriteCode object, rather than passing them in when calling the run function.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_code_review.py\\n@Modified By: mashenquan, 2023/11/27. Following the think-act principle, solidify the task parameters when creating the\\n WriteCode object, rather than passing them in when calling the run function.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_review.py:module:pydantic"}, {"id": "metagpt/actions/write_code_review.py:names:['Field']"}, {"id": "metagpt/actions/write_code_review.py:module:tenacity"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.actions"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteCode\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['WriteCode']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.actions.action"}, {"id": "metagpt/actions/write_code_review.py:names:['Action']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.const"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILENAME\",\"REQUIREMENT_FILENAME\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['CODE_PLAN_AND_CHANGE_FILENAME', 'REQUIREMENT_FILENAME']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.logs"}, {"id": "metagpt/actions/write_code_review.py:names:['logger']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.schema"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['CodingContext']"}, {"id": "metagpt/actions/write_code_review.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"id": "metagpt/actions/write_code_review.py:names:['CodeParser']"}, {"id": "{\"lineno\":21,\"end_lineno\":34,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":36,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXAMPLE_AND_INSTRUCTION\"],\"properties\":{}}"}, {"id": "{\"lineno\":58,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_EXAMPLE\"],\"properties\":{}}"}, {"id": "{\"lineno\":111,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"REWRITE_CODE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":199,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeReview\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:_set_result"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__str__"}, {"id": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__repr__"}, {"id": "metagpt/actions/write_teaching_plan.py:ast.Constant:\n@Time : 2023/7/27\n@Author : mashenquan\n@File : write_teaching_plan.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/27\\n@Author : mashenquan\\n@File : write_teaching_plan.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_teaching_plan.py:module:typing"}, {"id": "metagpt/actions/write_teaching_plan.py:names:['Optional']"}, {"id": "metagpt/actions/write_teaching_plan.py:module:metagpt.actions"}, {"id": "metagpt/actions/write_teaching_plan.py:names:['Action']"}, {"id": "metagpt/actions/write_teaching_plan.py:module:metagpt.context"}, {"id": "metagpt/actions/write_teaching_plan.py:names:['Context']"}, {"id": "metagpt/actions/write_teaching_plan.py:module:metagpt.logs"}, {"id": "metagpt/actions/write_teaching_plan.py:names:['logger']"}, {"id": "{\"lineno\":15,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTeachingPlanPart\"],\"properties\":{}}"}, {"id": "{\"lineno\":92,\"end_lineno\":191,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TeachingPlanBlock\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management_an.py"}, {"id": "metagpt/actions/project_management_an.py:main"}, {"id": "metagpt/actions/project_management_an.py:REQUIRED_PYTHON_PACKAGES"}, {"id": "metagpt/actions/project_management_an.py:REQUIRED_OTHER_LANGUAGE_PACKAGES"}, {"id": "metagpt/actions/project_management_an.py:LOGIC_ANALYSIS"}, {"id": "metagpt/actions/project_management_an.py:REFINED_LOGIC_ANALYSIS"}, {"id": "metagpt/actions/project_management_an.py:TASK_LIST"}, {"id": "metagpt/actions/project_management_an.py:REFINED_TASK_LIST"}, {"id": "metagpt/actions/project_management_an.py:FULL_API_SPEC"}, {"id": "metagpt/actions/project_management_an.py:SHARED_KNOWLEDGE"}, {"id": "metagpt/actions/project_management_an.py:REFINED_SHARED_KNOWLEDGE"}, {"id": "metagpt/actions/project_management_an.py:ANYTHING_UNCLEAR_PM"}, {"id": "metagpt/actions/project_management_an.py:NODES"}, {"id": "metagpt/actions/project_management_an.py:REFINED_NODES"}, {"id": "metagpt/actions/project_management_an.py:PM_NODE"}, {"id": "metagpt/actions/project_management_an.py:REFINED_PM_NODE"}, {"id": "metagpt/actions/project_management_an.py:ast.Constant:\n@Time : 2023/12/14 15:28\n@Author : alexanderwu\n@File : project_management_an.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/14 15:28\\n@Author : alexanderwu\\n@File : project_management_an.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management_an.py:module:typing"}, {"id": "metagpt/actions/project_management_an.py:names:['List']"}, {"id": "metagpt/actions/project_management_an.py:module:metagpt.actions.action_node"}, {"id": "metagpt/actions/project_management_an.py:names:['ActionNode']"}, {"id": "metagpt/actions/project_management_an.py:module:metagpt.logs"}, {"id": "metagpt/actions/project_management_an.py:names:['logger']"}, {"id": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIRED_PYTHON_PACKAGES\"],\"properties\":{}}"}, {"id": "{\"lineno\":20,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIRED_OTHER_LANGUAGE_PACKAGES\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":36,\"type_name\":\"ast.Assign\",\"tokens\":[\"LOGIC_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":38,\"end_lineno\":50,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_LOGIC_ANALYSIS\"],\"properties\":{}}"}, {"id": "{\"lineno\":52,\"end_lineno\":57,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_LIST\"],\"properties\":{}}"}, {"id": "{\"lineno\":59,\"end_lineno\":66,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_TASK_LIST\"],\"properties\":{}}"}, {"id": "{\"lineno\":68,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"FULL_API_SPEC\"],\"properties\":{}}"}, {"id": "{\"lineno\":76,\"end_lineno\":81,\"type_name\":\"ast.Assign\",\"tokens\":[\"SHARED_KNOWLEDGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":83,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_SHARED_KNOWLEDGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":93,\"end_lineno\":98,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR_PM\"],\"properties\":{}}"}, {"id": "{\"lineno\":100,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":110,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"id": "{\"lineno\":120,\"end_lineno\":120,\"type_name\":\"ast.Assign\",\"tokens\":[\"PM_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":121,\"end_lineno\":121,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PM_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":124,\"end_lineno\":128,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management_an.py:__name__:__main__"}, {"id": "{\"lineno\":131,\"end_lineno\":132,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management.py:WriteTasks:_update_tasks"}, {"id": "metagpt/actions/project_management.py:WriteTasks:_run_new_tasks"}, {"id": "metagpt/actions/project_management.py:WriteTasks:_merge"}, {"id": "metagpt/actions/project_management.py:WriteTasks:_update_requirements"}, {"id": "metagpt/actions/project_management.py:NEW_REQ_TEMPLATE"}, {"id": "metagpt/actions/project_management.py:ast.Constant:\n@Time : 2023/5/11 19:12\n@Author : alexanderwu\n@File : project_management.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Divide the context into three components: legacy code, unit test code, and console log.\n 2. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\n 3. According to the design in Section 2.2.3.5.4 of RFC 135, add incremental iteration functionality.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:12\\n@Author : alexanderwu\\n@File : project_management.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Divide the context into three components: legacy code, unit test code, and console log.\\n 2. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\\n 3. According to the design in Section 2.2.3.5.4 of RFC 135, add incremental iteration functionality.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management.py:json"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"id": "metagpt/actions/project_management.py:module:typing"}, {"id": "metagpt/actions/project_management.py:names:['Optional']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/project_management.py:names:['Action']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.actions.action_output"}, {"id": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"id": "metagpt/actions/project_management.py:names:['ActionOutput']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.actions.project_management_an"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"PM_NODE\",\"REFINED_PM_NODE\"]}}"}, {"id": "metagpt/actions/project_management.py:names:['PM_NODE', 'REFINED_PM_NODE']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.const"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PACKAGE_REQUIREMENTS_FILENAME\"]}}"}, {"id": "metagpt/actions/project_management.py:names:['PACKAGE_REQUIREMENTS_FILENAME']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.logs"}, {"id": "metagpt/actions/project_management.py:names:['logger']"}, {"id": "metagpt/actions/project_management.py:module:metagpt.schema"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\"]}}"}, {"id": "metagpt/actions/project_management.py:names:['Document', 'Documents']"}, {"id": "{\"lineno\":23,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":32,\"end_lineno\":96,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTasks\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_node.py:ActionNode:__init__"}, {"id": "metagpt/actions/action_node.py:ActionNode:__str__"}, {"id": "metagpt/actions/action_node.py:ActionNode:__repr__"}, {"id": "metagpt/actions/action_node.py:ActionNode:_compile_f"}, {"id": "metagpt/actions/action_node.py:ActionNode:_aask_v1"}, {"id": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_req"}, {"id": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_comment"}, {"id": "metagpt/actions/action_node.py:dict_to_markdown"}, {"id": "metagpt/actions/action_node.py:TAG"}, {"id": "metagpt/actions/action_node.py:LANGUAGE_CONSTRAINT"}, {"id": "metagpt/actions/action_node.py:FORMAT_CONSTRAINT"}, {"id": "metagpt/actions/action_node.py:SIMPLE_TEMPLATE"}, {"id": "metagpt/actions/action_node.py:REVIEW_TEMPLATE"}, {"id": "metagpt/actions/action_node.py:REVISE_TEMPLATE"}, {"id": "metagpt/actions/action_node.py:ast.Constant:\n@Time : 2023/12/11 18:45\n@Author : alexanderwu\n@File : action_node.py\n\nNOTE: You should use typing.List instead of list to do type annotation. Because in the markdown extraction process,\n we can use typing to extract the type of the node, but we cannot use built-in list to extract.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/11 18:45\\n@Author : alexanderwu\\n@File : action_node.py\\n\\nNOTE: You should use typing.List instead of list to do type annotation. Because in the markdown extraction process,\\n we can use typing to extract the type of the node, but we cannot use built-in list to extract.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_node.py:json"}, {"id": "metagpt/actions/action_node.py:module:enum"}, {"id": "metagpt/actions/action_node.py:names:['Enum']"}, {"id": "metagpt/actions/action_node.py:module:typing"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"List\",\"Optional\",\"Tuple\",\"Type\",\"Union\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['Any', 'Dict', 'List', 'Optional', 'Tuple', 'Type', 'Union']"}, {"id": "metagpt/actions/action_node.py:module:pydantic"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"create_model\",\"model_validator\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['BaseModel', 'Field', 'create_model', 'model_validator']"}, {"id": "metagpt/actions/action_node.py:module:tenacity"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.actions.action_outcls_registry"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_outcls_registry\",\"names\":[\"register_action_outcls\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['register_action_outcls']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.llm"}, {"id": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"BaseLLM\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['BaseLLM']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.logs"}, {"id": "metagpt/actions/action_node.py:names:['logger']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.provider.postprocess.llm_output_postprocess"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.llm_output_postprocess\",\"names\":[\"llm_output_postprocess\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['llm_output_postprocess']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"general_after_log\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['OutputParser', 'general_after_log']"}, {"id": "metagpt/actions/action_node.py:module:metagpt.utils.human_interaction"}, {"id": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.human_interaction\",\"names\":[\"HumanInteraction\"]}}"}, {"id": "metagpt/actions/action_node.py:names:['HumanInteraction']"}, {"id": "{\"lineno\":26,\"end_lineno\":28,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviewMode\"],\"properties\":{}}"}, {"id": "{\"lineno\":31,\"end_lineno\":34,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviseMode\"],\"properties\":{}}"}, {"id": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"TAG\"],\"properties\":{}}"}, {"id": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANGUAGE_CONSTRAINT\"],\"properties\":{}}"}, {"id": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_CONSTRAINT\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"SIMPLE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":62,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":92,\"end_lineno\":112,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVISE_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":115,\"end_lineno\":119,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"dict_to_markdown\"],\"properties\":{}}"}, {"id": "{\"lineno\":122,\"end_lineno\":666,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionNode\"],\"properties\":{}}"}, {"id": "{\"lineno\":669,\"end_lineno\":670,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolUse\"],\"properties\":{}}"}, {"id": "{\"lineno\":673,\"end_lineno\":677,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Task\"],\"properties\":{}}"}, {"id": "{\"lineno\":680,\"end_lineno\":681,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Tasks\"],\"properties\":{}}"}, {"id": "metagpt/actions/action_node.py:__name__:__main__"}, {"id": "{\"lineno\":684,\"end_lineno\":693,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE_CONTEXT"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:REFINED_TEMPLATE"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:WRITE_CODE_PLAN_AND_CHANGE_NODE"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:ast.Constant:\n@Time : 2023/12/26\n@Author : mannaandpoem\n@File : write_code_plan_and_change_an.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/26\\n@Author : mannaandpoem\\n@File : write_code_plan_and_change_an.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:os"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:module:pydantic"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:names:['Field']"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.actions.action"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:names:['Action']"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.actions.action_node"}, {"id": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:names:['ActionNode']"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.schema"}, {"id": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\"]}}"}, {"id": "metagpt/actions/write_code_plan_and_change_an.py:names:['CodePlanAndChangeContext']"}, {"id": "{\"lineno\":16,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE\"],\"properties\":{}}"}, {"id": "{\"lineno\":111,\"end_lineno\":126,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_CONTEXT\"],\"properties\":{}}"}, {"id": "{\"lineno\":128,\"end_lineno\":180,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_TEMPLATE\"],\"properties\":{}}"}, {"id": "{\"lineno\":182,\"end_lineno\":182,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_CODE_PLAN_AND_CHANGE_NODE\"],\"properties\":{}}"}, {"id": "{\"lineno\":185,\"end_lineno\":210,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodePlanAndChange\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_review.py:ast.Constant:\n@Time : 2023/5/11 19:31\n@Author : alexanderwu\n@File : design_api_review.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:31\\n@Author : alexanderwu\\n@File : design_api_review.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/design_api_review.py:module:typing"}, {"id": "metagpt/actions/design_api_review.py:names:['Optional']"}, {"id": "metagpt/actions/design_api_review.py:module:metagpt.actions.action"}, {"id": "metagpt/actions/design_api_review.py:names:['Action']"}, {"id": "{\"lineno\":14,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DesignReview\"],\"properties\":{}}"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_check_file_type"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_unzip"}, {"id": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_ocr"}, {"id": "metagpt/actions/invoice_ocr.py:ast.Constant:\n@Time : 2023/9/21 18:10:20\n@Author : Stitch-z\n@File : invoice_ocr.py\n@Describe : Actions of the invoice ocr assistant.\n"}, {"id": "{\"lineno\":4,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 18:10:20\\n@Author : Stitch-z\\n@File : invoice_ocr.py\\n@Describe : Actions of the invoice ocr assistant.\\n\"],\"properties\":{}}"}, {"id": "metagpt/actions/invoice_ocr.py:os"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"id": "metagpt/actions/invoice_ocr.py:zipfile"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"zipfile\"],\"properties\":{}}"}, {"id": "metagpt/actions/invoice_ocr.py:module:datetime"}, {"id": "metagpt/actions/invoice_ocr.py:names:['datetime']"}, {"id": "metagpt/actions/invoice_ocr.py:module:pathlib"}, {"id": "metagpt/actions/invoice_ocr.py:names:['Path']"}, {"id": "metagpt/actions/invoice_ocr.py:module:typing"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['Optional']"}, {"id": "metagpt/actions/invoice_ocr.py:pandas as pd"}, {"id": "metagpt/actions/invoice_ocr.py:module:paddleocr"}, {"id": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"paddleocr\",\"names\":[\"PaddleOCR\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['PaddleOCR']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.actions"}, {"id": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['Action']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.const"}, {"id": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"INVOICE_OCR_TABLE_PATH\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['INVOICE_OCR_TABLE_PATH']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.logs"}, {"id": "metagpt/actions/invoice_ocr.py:names:['logger']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.prompts.invoice_ocr"}, {"id": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\",\"REPLY_OCR_QUESTION_PROMPT\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['EXTRACT_OCR_MAIN_INFO_PROMPT', 'REPLY_OCR_QUESTION_PROMPT']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.utils.common"}, {"id": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['OutputParser']"}, {"id": "metagpt/actions/invoice_ocr.py:module:metagpt.utils.file"}, {"id": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"id": "metagpt/actions/invoice_ocr.py:names:['File']"}, {"id": "{\"lineno\":31,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceOCR\"],\"properties\":{}}"}, {"id": "{\"lineno\":122,\"end_lineno\":163,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GenerateTable\"],\"properties\":{}}"}, {"id": "{\"lineno\":166,\"end_lineno\":189,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReplyQuestion\"],\"properties\":{}}"}, {"id": "metagpt/prompts/sales.py"}, {"id": "metagpt/prompts/sales.py:SALES_ASSISTANT"}, {"id": "metagpt/prompts/sales.py:SALES"}, {"id": "metagpt/prompts/sales.py:conversation_stages"}, {"id": "metagpt/prompts/sales.py:ast.Constant:\n@Time : 2023/5/8 15:29\n@Author : alexanderwu\n@File : sales.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/8 15:29\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":10,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"SALES_ASSISTANT\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":55,\"type_name\":\"ast.Assign\",\"tokens\":[\"SALES\"],\"properties\":{}}"}, {"id": "{\"lineno\":57,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"conversation_stages\"],\"properties\":{}}"}, {"id": "metagpt/prompts/__init__.py"}, {"id": "metagpt/prompts/__init__.py:ast.Constant:\n@Time : 2023/5/30 09:51\n@Author : alexanderwu\n@File : __init__.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/30 09:51\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"id": "metagpt/prompts/summarize.py"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_2"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_3"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_4"}, {"id": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_5"}, {"id": "metagpt/prompts/summarize.py:ast.Constant:\n@Time : 2023/6/19 23:07\n@Author : alexanderwu\n@File : summarize.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/19 23:07\\n@Author : alexanderwu\\n@File : summarize.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":28,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_2\"],\"properties\":{}}"}, {"id": "{\"lineno\":43,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_3\"],\"properties\":{}}"}, {"id": "{\"lineno\":57,\"end_lineno\":69,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_4\"],\"properties\":{}}"}, {"id": "{\"lineno\":72,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_5\"],\"properties\":{}}"}, {"id": "metagpt/prompts/metagpt_sample.py"}, {"id": "metagpt/prompts/metagpt_sample.py:METAGPT_SAMPLE"}, {"id": "metagpt/prompts/metagpt_sample.py:ast.Constant:\n@Time : 2023/6/7 20:29\n@Author : alexanderwu\n@File : metagpt_sample.py\n"}, {"id": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/7 20:29\\n@Author : alexanderwu\\n@File : metagpt_sample.py\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":9,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"METAGPT_SAMPLE\"],\"properties\":{}}"}, {"id": "metagpt/prompts/tutorial_assistant.py"}, {"id": "metagpt/prompts/tutorial_assistant.py:COMMON_PROMPT"}, {"id": "metagpt/prompts/tutorial_assistant.py:DIRECTORY_PROMPT"}, {"id": "metagpt/prompts/tutorial_assistant.py:CONTENT_PROMPT"}, {"id": "metagpt/prompts/tutorial_assistant.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n@Describe : Tutorial Assistant's prompt templates.\n"}, {"id": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n@Describe : Tutorial Assistant's prompt templates.\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":10,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMON_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":15,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"DIRECTORY_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":27,\"end_lineno\":45,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONTENT_PROMPT\"],\"properties\":{}}"}, {"id": "metagpt/prompts/invoice_ocr.py"}, {"id": "metagpt/prompts/invoice_ocr.py:COMMON_PROMPT"}, {"id": "metagpt/prompts/invoice_ocr.py:EXTRACT_OCR_MAIN_INFO_PROMPT"}, {"id": "metagpt/prompts/invoice_ocr.py:REPLY_OCR_QUESTION_PROMPT"}, {"id": "metagpt/prompts/invoice_ocr.py:INVOICE_OCR_SUCCESS"}, {"id": "metagpt/prompts/invoice_ocr.py:ast.Constant:\n@Time : 2023/9/21 16:30:25\n@Author : Stitch-z\n@File : invoice_ocr.py\n@Describe : Prompts of the invoice ocr assistant.\n"}, {"id": "{\"lineno\":4,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 16:30:25\\n@Author : Stitch-z\\n@File : invoice_ocr.py\\n@Describe : Prompts of the invoice ocr assistant.\\n\"],\"properties\":{}}"}, {"id": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMON_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":13,\"end_lineno\":27,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":29,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"REPLY_OCR_QUESTION_PROMPT\"],\"properties\":{}}"}, {"id": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"INVOICE_OCR_SUCCESS\"],\"properties\":{}}"}, {"id": "metagpt/strategy/tot_schema.py:module:enum"}, {"id": "metagpt/strategy/tot_schema.py:names:['Enum']"}, {"id": "metagpt/strategy/tot_schema.py:module:pydantic"}, {"id": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"id": "metagpt/strategy/tot_schema.py:names:['BaseModel', 'Field']"}, {"id": "metagpt/strategy/tot_schema.py:module:metagpt.strategy.base"}, {"id": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"BaseEvaluator\",\"BaseParser\"]}}"}, {"id": "metagpt/strategy/tot_schema.py:names:['BaseEvaluator', 'BaseParser']"}, {"id": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MethodSelect\"],\"properties\":{}}"}, {"id": "{\"lineno\":17,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Strategy\"],\"properties\":{}}"}, {"id": "{\"lineno\":23,\"end_lineno\":30,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtSolverConfig\"],\"properties\":{}}"}, {"id": "metagpt/strategy/tot.py:ThoughtSolverBase:__init__"}, {"id": "metagpt/strategy/tot.py:BFSSolver:_bfs_build"}, {"id": "metagpt/strategy/tot.py:DFSSolver:_dfs"}, {"id": "metagpt/strategy/tot.py:TreeofThought:__init__"}, {"id": "metagpt/strategy/tot.py:TreeofThought:_initialize_solver"}, {"id": "metagpt/strategy/tot.py:OUTPUT_FORMAT"}, {"id": "metagpt/strategy/tot.py:module:__future__"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['annotations']"}, {"id": "metagpt/strategy/tot.py:asyncio"}, {"id": "metagpt/strategy/tot.py:module:typing"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"List\",\"Optional\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['Any', 'List', 'Optional']"}, {"id": "metagpt/strategy/tot.py:module:pydantic"}, {"id": "metagpt/strategy/tot.py:names:['BaseModel', 'ConfigDict', 'Field']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.llm"}, {"id": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['LLM']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.logs"}, {"id": "metagpt/strategy/tot.py:names:['logger']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.provider.base_llm"}, {"id": "metagpt/strategy/tot.py:names:['BaseLLM']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.strategy.base"}, {"id": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"ThoughtNode\",\"ThoughtTree\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['ThoughtNode', 'ThoughtTree']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.strategy.tot_schema"}, {"id": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.tot_schema\",\"names\":[\"MethodSelect\",\"Strategy\",\"ThoughtSolverConfig\"]}}"}, {"id": "metagpt/strategy/tot.py:names:['MethodSelect', 'Strategy', 'ThoughtSolverConfig']"}, {"id": "metagpt/strategy/tot.py:module:metagpt.utils.common"}, {"id": "metagpt/strategy/tot.py:names:['CodeParser']"}, {"id": "{\"lineno\":19,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"OUTPUT_FORMAT\"],\"properties\":{}}"}, {"id": "{\"lineno\":33,\"end_lineno\":123,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtSolverBase\"],\"properties\":{}}"}, {"id": "{\"lineno\":126,\"end_lineno\":177,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BFSSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":180,\"end_lineno\":227,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DFSSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":230,\"end_lineno\":232,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MCTSSolver\"],\"properties\":{}}"}, {"id": "{\"lineno\":235,\"end_lineno\":277,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TreeofThought\"],\"properties\":{}}"}, {"id": "metagpt/strategy/__init__.py"}, {"id": "metagpt/strategy/base.py:BaseParser:__call__"}, {"id": "metagpt/strategy/base.py:BaseEvaluator:__call__"}, {"id": "metagpt/strategy/base.py:module:abc"}, {"id": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"id": "metagpt/strategy/base.py:names:['ABC']"}, {"id": "metagpt/strategy/base.py:module:typing"}, {"id": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"id": "metagpt/strategy/base.py:names:['List']"}, {"id": "metagpt/strategy/base.py:module:anytree"}, {"id": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anytree\",\"names\":[\"Node\",\"RenderTree\"]}}"}, {"id": "metagpt/strategy/base.py:names:['Node', 'RenderTree']"}, {"id": "metagpt/strategy/base.py:module:pydantic"}, {"id": "metagpt/strategy/base.py:names:['BaseModel']"}, {"id": "{\"lineno\":12,\"end_lineno\":23,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseParser\"],\"properties\":{}}"}, {"id": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseEvaluator\"],\"properties\":{}}"}, {"id": "{\"lineno\":34,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtNode\"],\"properties\":{}}"}, {"id": "{\"lineno\":51,\"end_lineno\":109,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtTree\"],\"properties\":{}}"}, {"id": "{\"name\":\"AIMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"APIRequestor\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"AZURE_AD,OPEN_AI\",\"default_value\":\"\"},{\"name\":\"api_version\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"base_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"organization\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Action\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"node\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prefix\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ActionNode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"children\",\"visibility\":\"+\",\"value_type\":\"dict[str,ActionNode]\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"example\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"expected_type\",\"visibility\":\"+\",\"value_type\":\"Type\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"BaseModel\",\"default_value\":\"\"},{\"name\":\"instruction\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"schema\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ActionOutput\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"BaseModel\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ActionType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ApiType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Architect\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ArgumentsParingAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict]\",\"default_value\":\"\"},{\"name\":\"ask\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prompt\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"skill\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Assistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"Optional[SkillsDeclaration]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AsyncSSEClient\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"AttrDict\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AudioData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"audio\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ced\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AzureOpenAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"AsyncAzureOpenAI\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"AzureTTS\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"region\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"subscription_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BEAGECTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BFSSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BaseContext\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BaseEvaluator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BaseLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[AsyncOpenAI]]\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"system_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BaseParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BasePostProcessPlugin\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BaseStore\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"BrainMemory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cacheable\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"historical_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"List[Message]\",\"default_value\":\"\"},{\"name\":\"history_text\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"is_dirty\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_history_available\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"knowledge\",\"visibility\":\"+\",\"value_type\":\"List[Message]\",\"default_value\":\"\"},{\"name\":\"last_history_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"last_talk\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseLLM]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BrowserConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser\",\"visibility\":\"+\",\"value_type\":\"Literal['chrome','firefox','edge','ie']\",\"default_value\":\"\"},{\"name\":\"driver\",\"visibility\":\"+\",\"value_type\":\"Literal['chromium','firefox','webkit']\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"BugFixContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CLIParams\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"git_reinit\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"inc\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"max_auto_summarize_code\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"reqa_file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ChangeType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ChromaStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"collection\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Claude2\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CodeBlockInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"end_lineno\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"lineno\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"properties\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"},{\"name\":\"tokens\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"type_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CodeParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"CodePlanAndChangeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"design_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prd_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"requirement\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CodeSummarizeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"codes_filenames\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"design_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"reason\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CodingContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"design_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CollectLinks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"rank_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[[list[str]],None]]\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Components\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"ConductResearch\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"AZURE_TTS_REGION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"AZURE_TTS_SUBSCRIPTION_KEY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IFLYTEK_API_KEY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IFLYTEK_API_SECRET\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IFLYTEK_APP_ID\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"browser\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_review_k_times\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"enable_longterm_memory\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"inc\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm_for_researcher_report\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm_for_researcher_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"max_auto_summarize_code\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mermaid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mermaid_engine\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"mmdc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"Literal['json','markdown','raw']\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"puppeteer_config\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"pyppeteer_executable_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"redis\",\"visibility\":\"+\",\"value_type\":\"Optional[RedisConfig]\",\"default_value\":\"\"},{\"name\":\"redis_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"repair_llm_output\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"reqa_file\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"s3\",\"visibility\":\"+\",\"value_type\":\"Optional[S3Config]\",\"default_value\":\"\"},{\"name\":\"search\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchConfig]\",\"default_value\":\"\"},{\"name\":\"workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"alias\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arbitrary_types_allowed\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Context\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"Optional[GitRepository]\",\"default_value\":\"\"},{\"name\":\"kwargs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"Optional[ProjectRepo]\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ContextMixin\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"private_config\",\"visibility\":\"+\",\"value_type\":\"Optional[Config]\",\"default_value\":\"\"},{\"name\":\"private_context\",\"visibility\":\"+\",\"value_type\":\"Optional[Context]\",\"default_value\":\"\"},{\"name\":\"private_llm\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseLLM]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"max_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Costs\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CustomDecoder\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"parse_object\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"parse_string\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"scan_once\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"CustomerService\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseStore]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DDGAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ddgs\",\"visibility\":\"+\",\"value_type\":\"DDGS\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DFSSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DataSource\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DebugError\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DependencyFile\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"exists\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DesignReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DiGraphRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"pathname\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"root\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DocFileRepositories\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"class_view\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_summary\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"system_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DocstringCollector\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstrings\",\"visibility\":\"+\",\"value_type\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_value\":\"\"},{\"name\":\"stack\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DocstringTransformer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstrings\",\"visibility\":\"+\",\"value_type\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_value\":\"\"},{\"name\":\"stack\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Document\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"author\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"reviews\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Document\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"root_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"root_relative_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DocumentStatus\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Documents\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotClassAttribute\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"default_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"type_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotClassInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"attributes\",\"visibility\":\"+\",\"value_type\":\"Dict[str,DotClassAttribute]\",\"default_value\":\"\"},{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"methods\",\"visibility\":\"+\",\"value_type\":\"Dict[str,DotClassMethod]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"package\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotClassMethod\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"List[DotClassAttribute]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"return_args\",\"visibility\":\"+\",\"value_type\":\"Optional[DotReturn]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotClassRelationship\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"dest\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"label\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"relationship\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"DotReturn\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"type_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Embedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"List[float]\",\"default_value\":\"\"},{\"name\":\"index\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"object\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Engineer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"action_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_todos\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_borg\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_summarize\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"next_todo_action\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"summarize_todos\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"use_code_review\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"EnronTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"Entity\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"List[Skill]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Environment\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_idle\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"member_addrs\",\"visibility\":\"+\",\"value_type\":\"dict[Role,Set]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"roles\",\"visibility\":\"+\",\"value_type\":\"dict[str,SerializeAsAny[Role]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Example\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"answer\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ask\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ExecuteTask\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"list[Message]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FaissStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"OpenAIEmbeddings\",\"default_value\":\"\"},{\"name\":\"meta_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"File\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"CHUNK_SIZE\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FileRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"all_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"changed_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"root_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FireworksCostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FireworksLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auto_max_tokens\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"FixBug\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GPTPromptGenerator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"GeminiGenerativeModel\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"GeminiLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GeneralAPIRequestor\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"GenerateQuestions\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GenerateTable\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GetMessageFromWeb\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"domain\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"ret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"spark_api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_api_secret\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_appid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"text\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GitRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"changed_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"is_valid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GoogleAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"Optional[futures.Executor]\",\"default_value\":\"\"},{\"name\":\"google_api_client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"google_api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"google_cse_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"Optional[asyncio.AbstractEventLoop]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GraphKeyword\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"CLASS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"CLASS_METHOD\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"CLASS_PROPERTY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FUNCTION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"GLOBAL_VARIABLE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_METHOD\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_PROPERTY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_USE_CASE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_VIEW\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_DETAIL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_FUNCTION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_PAGE_INFO\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_PARTICIPANT\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_SEQUENCE_VIEW\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS_AGGREGATE_OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS_COMPOSITE_OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"NULL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ON\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"SOURCE_CODE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"GraphRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"HumanInteraction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"stop_list\",\"visibility\":\"+\",\"value_type\":\"tuple\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"HumanProvider\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"system_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"IFlyTekTTS\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"IFlyTekTTSResponse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"Optional[AudioData]\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"sid\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"IFlyTekTTSStatus\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ImageResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"images\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"parameters\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"IndexableDocument\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content_col\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"Union[pd.DataFrame,list]\",\"default_value\":\"\"},{\"name\":\"meta_col\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"InvoiceData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"invoice_data\",\"visibility\":\"+\",\"value_type\":\"list[dict]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"InvoiceOCR\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"InvoiceOCRAssistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"orc_data\",\"visibility\":\"+\",\"value_type\":\"Optional[list]\",\"default_value\":\"\"},{\"name\":\"origin_query\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"InvoicePath\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"file_path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LLMConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_version\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"base_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"best_of\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"calc_usage\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"domain\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"frequency_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"logprobs\",\"visibility\":\"+\",\"value_type\":\"Optional[bool]\",\"default_value\":\"\"},{\"name\":\"max_token\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"n\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"presence_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"repetition_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"stop\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"stream\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"temperature\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"timeout\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"top_k\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"top_logprobs\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"top_p\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LLMProviderRegistry\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"providers\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LLMType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LanceStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"db\",\"visibility\":\"+\",\"value_type\":\"LanceDBConnection,RemoteDBConnection\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"table\",\"visibility\":\"+\",\"value_type\":\"LanceTable,NoneType,RemoteTable\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LocalStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cache_dir\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"},{\"name\":\"fname\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"raw_data_path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"LongTermMemory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"memory_storage\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"msg_from_recover\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"rc\",\"visibility\":\"+\",\"value_type\":\"Optional[RoleContext]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MCTSSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"MeilisearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"Client\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Memory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ignore_id\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"index\",\"visibility\":\"+\",\"value_type\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_value\":\"\"},{\"name\":\"storage\",\"visibility\":\"+\",\"value_type\":\"list[SerializeAsAny[Message]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MemoryStorage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"OpenAIEmbeddings\",\"default_value\":\"\"},{\"name\":\"is_initialized\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mem_ttl\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"role_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"role_mem_path\",\"visibility\":\"+\",\"value_type\":\"Optional[str],Path\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"NoneType,Optional[FAISS]\",\"default_value\":\"\"},{\"name\":\"threshold\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MermaidConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"puppeteer_config\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Message\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cause_by\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseModel]\",\"default_value\":\"\"},{\"name\":\"role\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"send_to\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"sent_from\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MessageQueue\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MessageType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MetaGPTLLM\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"MetaGPTText2Image\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"MethodSelect\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Moderation\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"NoMoneyException\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"amount\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OCRResults\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ocr_result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OllamaLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"http_method\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"suffix_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"AsyncOpenAI\",\"default_value\":\"\"},{\"name\":\"auto_max_tokens\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenAIResponse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"operation_location\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"organization\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"request_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"response_ms\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"retry_after\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenAIText2Embedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenAIText2Image\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"OpenLLM\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"OutputParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"Parameter\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"PlaywrightWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chromium','firefox','webkit']\\\\|None\",\"default_value\":\"\"},{\"name\":\"launch_kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\\\\|None\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"PrepareDocuments\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"PrepareInterview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ProductManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"todo_action\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ProjectManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ProjectRepo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"requirement\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"resources\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"src_relative_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"srcs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"test_outputs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"tests\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"PromptString\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"QaEngineer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"test_round\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"test_round_allowed\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"QdrantConnection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"port\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"QdrantStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"QdrantClient\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RebuildClassView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"Optional[GraphRepository]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RebuildSequenceView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"Optional[GraphRepository]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Redis\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"Optional[RedisConfig]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RedisConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"db\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"password\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"port\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"username\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RepairType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReplyData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReplyQuestion\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Repo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"assets\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"codes\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RepoFileInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"classes\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"functions\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"globals\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"page_info\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RepoMetadata\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"n_chars\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_docs\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"symbols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RepoParser\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"base_directory\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Report\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"links\",\"visibility\":\"+\",\"value_type\":\"Optional[dict[str,list[str]]]\",\"default_value\":\"\"},{\"name\":\"summaries\",\"visibility\":\"+\",\"value_type\":\"Optional[list[tuple[str,str]]]\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Researcher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ResourceFileRepositories\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_spec_and_task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_summary\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"competitive_analysis\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"data_api_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"sd_output\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"seq_flow\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"system_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ResultEmbedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"List[Embedding]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"object_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"usage\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Returns\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"format\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReviewMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ReviseMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Role\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"action_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"actions\",\"visibility\":\"+\",\"value_type\":\"list[SerializeAsAny[Action]]\",\"default_value\":\"\"},{\"name\":\"addresses\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_human\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_idle\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"latest_observed_msg\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rc\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"recovered\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"role_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"states\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"todo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RoleContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"env\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"important_memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_react_loop\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"msg_buffer\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"news\",\"visibility\":\"+\",\"value_type\":\"list[Type[Message]]\",\"default_value\":\"\"},{\"name\":\"react_mode\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"state\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"todo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"watch\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RoleReactMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RunCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RunCodeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"additional_python_paths\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"code_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"command\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"mode\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"output\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"output_filename\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"test_code\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"test_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"working_directory\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"RunCodeResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"stderr\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"stdout\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"S3\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auth_config\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"session\",\"visibility\":\"+\",\"value_type\":\"Session\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"S3Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"access_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"bucket\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"endpoint\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"secret_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SPO\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"object_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"predicate\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"subject\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SQVUseCase\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"actors\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inputs\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"outputs\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"reason\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"steps\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SQVUseCaseDetails\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"relationship\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"use_cases\",\"visibility\":\"+\",\"value_type\":\"List[SQVUseCase]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Sales\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseStore]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SearchAndSummarize\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngineType]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngine]\",\"default_value\":\"\"},{\"name\":\"search_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SearchConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cse_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngineType]\",\"default_value\":\"\"},{\"name\":\"run_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SearchEngineType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Searcher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SeleniumWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chrome','firefox','edge','ie']\",\"default_value\":\"\"},{\"name\":\"executable_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"launch_args\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SerializationMixin\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"SerpAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aiosession\",\"visibility\":\"+\",\"value_type\":\"Optional[aiohttp.ClientSession]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"params\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"},{\"name\":\"serpapi_api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SerperWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aiosession\",\"visibility\":\"+\",\"value_type\":\"Optional[aiohttp.ClientSession]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"payload\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"},{\"name\":\"serper_api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SimpleMessage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"role\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Singleton\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"SkAgent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"import_semantic_skill_from_directory\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"import_skill\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"kernel\",\"visibility\":\"+\",\"value_type\":\"Kernel\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"plan\",\"visibility\":\"+\",\"value_type\":\"Plan\",\"default_value\":\"\"},{\"name\":\"planner\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_value\":\"\"},{\"name\":\"planner_cls\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SkSearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Skill\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arguments\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"examples\",\"visibility\":\"+\",\"value_type\":\"List[Example]\",\"default_value\":\"\"},{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"parameters\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict[str,Parameter]]\",\"default_value\":\"\"},{\"name\":\"returns\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"x_prerequisite\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SkillAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"skill\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SkillManager\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"SkillsDeclaration\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"components\",\"visibility\":\"+\",\"value_type\":\"Optional[Components]\",\"default_value\":\"\"},{\"name\":\"entities\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Entity]\",\"default_value\":\"\"},{\"name\":\"skillapi\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SparkLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Strategy\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SubscriptionRunner\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"tasks\",\"visibility\":\"+\",\"value_type\":\"dict[Role,asyncio.Task]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SummarizeCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"SystemMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"TalkAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aask_args\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"agent_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"history_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"knowledge\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_gpt4\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TalkActionPrompt\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"FORMATION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FORMATION_LOOSE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Task\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"dependent_task_ids\",\"visibility\":\"+\",\"value_type\":\"List[int]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_id\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"tool\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Tasks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"tasks\",\"visibility\":\"+\",\"value_type\":\"List[Task]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Teacher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"course_title\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TeachingPlanBlock\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"COURSE_TITLE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"DATA_BEGIN_TAG\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"DATA_END_TAG\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FORMATION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"PROMPT_TEMPLATE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"TOPICS\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"TOPIC_STATEMENTS\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Team\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"env\",\"visibility\":\"+\",\"value_type\":\"Optional[Environment]\",\"default_value\":\"\"},{\"name\":\"idea\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"investment\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TestingContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code_doc\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"test_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ThoughtNode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"valid_status\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"value\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ThoughtSolverBase\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"Optional[ThoughtTree]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ThoughtSolverConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"evaluator\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_steps\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"method_select\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_generate_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_select_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_solution_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"parser\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ThoughtTree\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"all_nodes\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TokenCostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ToolUse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"tool_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Translator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"TreeofThought\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"solver\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"strategy\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"TutorialAssistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"main_title\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"total_content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UMLClassAttribute\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"default_value\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"value_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UMLClassMeta\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"visibility\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UMLClassMethod\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassAttribute]\",\"default_value\":\"\"},{\"name\":\"return_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UMLClassView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"attributes\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassAttribute]\",\"default_value\":\"\"},{\"name\":\"methods\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassMethod]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UTGenerator\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"chatgpt_method\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"icl_sample\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"questions_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"swagger_file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"template_prefix\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ut_py_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"Usage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"UserMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"UserRequirement\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"VisualDiGraphRepo\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"VisualGraphRepo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WDMHttpProxyClient\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"WebBrowseAndSummarize\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browse_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"web_browser_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[WebBrowserEngine]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WebBrowserEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"run_func\",\"visibility\":\"+\",\"value_type\":\"Callable[...,Coroutine[Any,Any,WebPage\\\\|list[WebPage]]]\\\\|None\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WebBrowserEngineType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WebPage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"html\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inner_text\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"soup\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"title\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WikiHowTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"WorkspaceConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"uid\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_uid\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteCodeAN\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"WriteCodePlanAndChange\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteCodeReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteContent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"directory\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteDesign\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteDirectory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteDocstring\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WritePRD\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WritePRDReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"prd_review_prompt_template\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteTasks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteTeachingPlanPart\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WriteTest\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[TestingContext]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"WsParam\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"YamlModel\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"extra_fields\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict[str,str]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"YamlModelWithoutDefault\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"ZhiPuAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ZhiPuEvent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"ZhiPuModelAPI\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"id": "{\"name\":\"_AgentSkill\",\"visibility\":\"#\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "{\"name\":\"_VisualClassView\",\"visibility\":\"#\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"generalizations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"package\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"uml\",\"visibility\":\"+\",\"value_type\":\"Optional[UMLClassView]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"id": "\nsequenceDiagram\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n```\n"}, {"id": "20240131222415604:{\nsequenceDiagram\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n```\n}"}, {"id": "?:User"}, {"id": "?:Typer"}, {"id": "{\"description\":\"This source code defines a Context class that represents the environment context for MetaGPT. It contains methods for creating a new os.environ object and for obtaining a LLM (Language Model) instance with a cost manager.\",\"use_cases\":[{\"description\":\"Create a new os.environ object\",\"inputs\":[],\"outputs\":[\"env\"],\"actors\":[\"ProjectRepo\",\"GitRepository\",\"Path\"],\"steps\":[\"Copy the current os.environ object\",\"Return the copied os.environ object\"],\"reason\":\"When the system needs to create a new os.environ object for the MetaGPT environment\"},{\"description\":\"Obtain a LLM (Language Model) instance with a cost manager\",\"inputs\":[],\"outputs\":[\"llm\"],\"actors\":[\"BaseLLM\",\"LLMConfig\"],\"steps\":[\"Create a new LLM instance based on the configuration\",\"Set the cost manager for the LLM instance\",\"Return the LLM instance\"],\"reason\":\"When the system needs to obtain a LLM instance with a cost manager for the MetaGPT environment\"}],\"relationship\":[\"The 'Obtain a LLM (Language Model) instance with a cost manager' use case depends on the 'Create a new os.environ object' use case as it requires the environment context to be set up before obtaining the LLM instance.\"]}"}, {"id": "\nsequenceDiagram\n participant ProjectRepo\n participant GitRepository\n participant Path\n participant BaseLLM\n participant LLMConfig\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n"}, {"id": "\nsequenceDiagram\n participant ProjectRepo\n participant GitRepository\n participant Path\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131222533217:{\nsequenceDiagram\n participant ProjectRepo\n participant GitRepository\n participant Path\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"The source code defines a class 'ProjectRepo' which is a file repository for a project. It contains methods to interact with the project's files and resources.\",\"use_cases\":[{\"description\":\"Retrieve project requirements\",\"inputs\":[],\"outputs\":[\"requirement\"],\"actors\":[\"ProjectRepo\"],\"steps\":[\"The 'ProjectRepo' class retrieves the project requirements from the 'docs' attribute using the 'requirement' property.\"],\"reason\":\"When the system needs to access the project requirements.\"},{\"description\":\"Check if code files exist\",\"inputs\":[],\"outputs\":[\"code_files_exist\"],\"actors\":[\"ProjectRepo\"],\"steps\":[\"The 'ProjectRepo' class checks if the code files exist by accessing the 'srcs' attribute and its 'all_files' property.\"],\"reason\":\"When the system needs to verify the existence of code files.\"},{\"description\":\"Set source path for the project\",\"inputs\":[\"path\"],\"outputs\":[\"ProjectRepo\"],\"actors\":[\"ProjectRepo\"],\"steps\":[\"The 'ProjectRepo' class sets the source path for the project by using the 'with_src_path' method with the specified 'path'.\"],\"reason\":\"When the system needs to update the source path for the project.\"}],\"relationship\":[\"The 'Retrieve project requirements' use case is related to the 'Check if code files exist' use case as both involve accessing project files and resources.\",\"The 'Set source path for the project' use case is related to the 'Check if code files exist' use case as setting the source path may impact the existence of code files.\"]}"}, {"id": "\nsequenceDiagram\n participant ProjectRepo\n participant str\n participant Path\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n"}, {"id": "\nsequenceDiagram\n participant ProjectRepo\n participant str\n participant Path\n participant GitRepository\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131222606110:{\nsequenceDiagram\n participant ProjectRepo\n participant str\n participant Path\n participant GitRepository\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "?:str"}, {"id": "{\"description\":\"This source code defines a class `GitRepository` that represents a Git repository. It provides methods to interact with the repository, such as opening an existing repository, initializing a new repository, adding or removing files from the staging area, committing changes, deleting the repository, and more.\",\"use_cases\":[{\"description\":\"Open an existing Git repository or initialize a new one.\",\"inputs\":[\"local_path\",\"auto_init\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Check if the provided path is a Git repository\",\"If it is a Git repository, open it and set the repository attribute\",\"If it is not a Git repository and auto_init is True, initialize a new Git repository at the provided path\"],\"reason\":\"When a user wants to open an existing Git repository or initialize a new one for further operations.\"},{\"description\":\"Add or remove files from the staging area based on the provided changes.\",\"inputs\":[\"files\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Iterate through the provided files and their change types\",\"Add or remove files from the staging area based on the change types\"],\"reason\":\"When a user wants to stage changes in the Git repository.\"},{\"description\":\"Commit the staged changes with the given comments.\",\"inputs\":[\"comments\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Commit the staged changes with the provided comments\"],\"reason\":\"When a user wants to commit the staged changes in the Git repository.\"},{\"description\":\"Delete the entire repository directory.\",\"inputs\":[],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Delete the entire repository directory if it is valid\"],\"reason\":\"When a user wants to delete the entire Git repository directory.\"},{\"description\":\"Return a dictionary of changed files and their change types.\",\"inputs\":[],\"outputs\":[\"changed_files\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Retrieve the untracked files and their change types\",\"Retrieve the changed files and their change types from the index\",\"Combine the untracked and changed files into a dictionary\"],\"reason\":\"When a user wants to get the changed files in the Git repository.\"},{\"description\":\"Check if the specified directory is a Git repository.\",\"inputs\":[\"local_path\"],\"outputs\":[\"is_git_dir\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Check if the specified directory contains a .git directory\"],\"reason\":\"When a user wants to check if a directory is a Git repository.\"},{\"description\":\"Check if the Git repository is valid (exists and is initialized).\",\"inputs\":[],\"outputs\":[\"is_valid\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Check if the repository attribute is not None\"],\"reason\":\"When a user wants to check if the Git repository is valid.\"},{\"description\":\"Return the Git repository's status as a string.\",\"inputs\":[],\"outputs\":[\"status\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Return the status of the Git repository using GitPython\"],\"reason\":\"When a user wants to get the status of the Git repository.\"},{\"description\":\"Return the path to the working directory of the Git repository.\",\"inputs\":[],\"outputs\":[\"workdir\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Return the path to the working directory if the repository is valid\"],\"reason\":\"When a user wants to get the working directory of the Git repository.\"},{\"description\":\"Archive the current state of the Git repository.\",\"inputs\":[\"comments\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Add all changed files to the staging area\",\"Commit the changes with the provided comments\"],\"reason\":\"When a user wants to archive the current state of the Git repository.\"},{\"description\":\"Create a new instance of FileRepository associated with this Git repository.\",\"inputs\":[\"relative_path\"],\"outputs\":[\"FileRepository\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Create a new instance of FileRepository with the provided relative path\"],\"reason\":\"When a user wants to create a new instance of FileRepository associated with the Git repository.\"},{\"description\":\"Get the dependency file associated with the Git repository.\",\"inputs\":[],\"outputs\":[\"DependencyFile\"],\"actors\":[\"FileRepository\"],\"steps\":[\"If the dependency file is not available, create a new instance of DependencyFile\"],\"reason\":\"When a user wants to get the dependency file associated with the Git repository.\"},{\"description\":\"Rename the root directory of the Git repository.\",\"inputs\":[\"new_dir_name\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Rename the root directory of the Git repository to the provided new name\"],\"reason\":\"When a user wants to rename the root directory of the Git repository.\"},{\"description\":\"Retrieve a list of files in the specified relative path.\",\"inputs\":[\"relative_path\",\"root_relative_path\",\"filter_ignored\"],\"outputs\":[\"List\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Retrieve the list of files in the specified relative path\",\"Recursively retrieve files from subdirectories if present\",\"Filter the files based on .gitignore rules if required\"],\"reason\":\"When a user wants to retrieve a list of files in the specified relative path within the Git repository.\"},{\"description\":\"Filter a list of filenames based on .gitignore rules.\",\"inputs\":[\"filenames\",\"root_relative_path\"],\"outputs\":[\"List\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Filter the list of filenames based on .gitignore rules\"],\"reason\":\"When a user wants to filter a list of filenames based on .gitignore rules.\"}],\"relationship\":[\"Open an existing Git repository or initialize a new one can be performed by FileRepository\",\"Add or remove files from the staging area based on the provided changes can be performed by FileRepository\",\"Commit the staged changes with the given comments can be performed by FileRepository\",\"Delete the entire repository directory can be performed by FileRepository\",\"Return a dictionary of changed files and their change types can be performed by FileRepository\",\"Check if the specified directory is a Git repository can be performed by FileRepository\",\"Check if the Git repository is valid (exists and is initialized) can be performed by FileRepository\",\"Return the Git repository's status as a string can be performed by FileRepository\",\"Return the path to the working directory of the Git repository can be performed by FileRepository\",\"Archive the current state of the Git repository can be performed by FileRepository\",\"Create a new instance of FileRepository associated with this Git repository can be performed by FileRepository\",\"Get the dependency file associated with the Git repository can be performed by FileRepository\",\"Rename the root directory of the Git repository can be performed by FileRepository\",\"Retrieve a list of files in the specified relative path can be performed by FileRepository\",\"Filter a list of filenames based on .gitignore rules can be performed by FileRepository\"]}"}, {"id": "\nsequenceDiagram\n participant FileRepository\n participant DependencyFile\n participant Path\n participant Path\\\\\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n FileRepository->>FileRepository: filter_gitignore(filenames, root_relative_path)\n"}, {"id": "\nsequenceDiagram\n participant FileRepository\n participant DependencyFile\n participant Path\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant GitRepository\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n FileRepository->>FileRepository: filter_gitignore(filenames, root_relative_path)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131222711914:{\nsequenceDiagram\n participant FileRepository\n participant DependencyFile\n participant Path\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant GitRepository\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n FileRepository->>FileRepository: filter_gitignore(filenames, root_relative_path)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"This source code defines a class representing a FileRepository associated with a Git repository. The class includes methods for saving, getting, and deleting files, as well as managing file dependencies and generating new filenames.\",\"use_cases\":[{\"description\":\"Save content to a file and update its dependencies.\",\"inputs\":[\"filename\",\"content\",\"dependencies\"],\"outputs\":[\"Document\"],\"actors\":[\"Document\",\"Path\",\"List\"],\"steps\":[\"Create the pathname for the file within the repository.\",\"Write the content to the file.\",\"Update the dependencies if provided.\",\"Return the saved document.\"],\"reason\":\"When new content needs to be saved to a file and its dependencies need to be updated.\"},{\"description\":\"Get the dependencies of a file.\",\"inputs\":[\"filename\"],\"outputs\":[\"Set\"],\"actors\":[\"Path\"],\"steps\":[\"Retrieve the pathname of the file within the repository.\",\"Get the dependencies of the file.\",\"Return the set of dependencies.\"],\"reason\":\"When the dependencies of a file need to be retrieved.\"},{\"description\":\"Get the dependencies of a file that have changed.\",\"inputs\":[\"filename\"],\"outputs\":[\"Set\"],\"actors\":[\"Path\"],\"steps\":[\"Get the dependencies of the file.\",\"Identify the changed dependent files.\",\"Return the set of changed dependencies.\"],\"reason\":\"When the dependencies of a file that have changed need to be retrieved.\"},{\"description\":\"Read the content of a file.\",\"inputs\":[\"filename\"],\"outputs\":[\"Document\",\"None\"],\"actors\":[\"Path\"],\"steps\":[\"Create a document instance for the file.\",\"Read the content of the file.\",\"Return the document with the content or None if the file does not exist.\"],\"reason\":\"When the content of a file needs to be read.\"},{\"description\":\"Get the content of all files in the repository.\",\"inputs\":[\"filter_ignored\"],\"outputs\":[\"List[Document]\"],\"actors\":[\"Path\"],\"steps\":[\"Retrieve the content of all files in the repository.\",\"Return a list of document instances representing the files.\"],\"reason\":\"When the content of all files in the repository needs to be retrieved.\"},{\"description\":\"Get the files in a directory that have changed.\",\"inputs\":[\"dir\"],\"outputs\":[\"List\"],\"actors\":[\"Path\"],\"steps\":[\"Identify the changed files within the directory.\",\"Return the list of changed files.\"],\"reason\":\"When the changed files within a directory need to be retrieved.\"},{\"description\":\"Generate a new filename based on the current timestamp and a UUID suffix.\",\"inputs\":[],\"outputs\":[\"str\"],\"actors\":[],\"steps\":[\"Generate a new filename based on the current timestamp and a UUID suffix.\",\"Return the new filename.\"],\"reason\":\"When a new filename needs to be generated.\"},{\"description\":\"Save content to a file and update its dependencies using a Document instance.\",\"inputs\":[\"doc\",\"dependencies\"],\"outputs\":[],\"actors\":[\"Document\",\"List\"],\"steps\":[\"Save the content of the document to a file.\",\"Update the dependencies if provided.\"],\"reason\":\"When the content of a document needs to be saved to a file and its dependencies need to be updated.\"},{\"description\":\"Save a Document instance as a PDF file.\",\"inputs\":[\"doc\",\"with_suffix\",\"dependencies\"],\"outputs\":[],\"actors\":[\"Document\",\"List\"],\"steps\":[\"Convert the content of the document to Markdown.\",\"Save it to a file with an optional specified suffix.\",\"Log the saved file.\"],\"reason\":\"When a document instance needs to be saved as a PDF file.\"},{\"description\":\"Delete a file from the file repository.\",\"inputs\":[\"filename\"],\"outputs\":[],\"actors\":[\"Path\"],\"steps\":[\"Delete the file from the file repository.\"],\"reason\":\"When a file needs to be deleted from the file repository.\"}],\"relationship\":[\"Save content to a file and update its dependencies is related to Get the dependencies of a file.\",\"Save content to a file and update its dependencies is related to Get the dependencies of a file that have changed.\",\"Save content to a file and update its dependencies is related to Read the content of a file.\",\"Save content to a file and update its dependencies is related to Get the content of all files in the repository.\",\"Save content to a file and update its dependencies is related to Get the files in a directory that have changed.\",\"Save content to a file and update its dependencies is related to Generate a new filename based on the current timestamp and a UUID suffix.\",\"Save content to a file and update its dependencies is related to Save content to a file and update its dependencies using a Document instance.\",\"Save content to a file and update its dependencies is related to Save a Document instance as a PDF file.\",\"Save content to a file and update its dependencies is related to Delete a file from the file repository.\"]}"}, {"id": "\nsequenceDiagram\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->> FileRepository: get_all(filter_ignored)\n FileRepository ->> FileRepository: retrieve content of all files\n FileRepository ->> Document: return list of document instances\n\n Document ->> FileRepository: get_change_dir_files(dir)\n FileRepository ->> FileRepository: identify changed files within directory\n FileRepository ->> Document: return list of changed files\n\n Document ->> FileRepository: save_doc(doc, dependencies)\n FileRepository ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository ->> Path: convert content of document to Markdown\n FileRepository ->> FileRepository: save content to file with optional suffix\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: delete(filename)\n FileRepository ->> Path: delete file from repository\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(filename, dependencies)\n"}, {"id": "\nsequenceDiagram\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant DependencyFile\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->> FileRepository: get_all(filter_ignored)\n FileRepository ->> FileRepository: retrieve content of all files\n FileRepository ->> Document: return list of document instances\n\n Document ->> FileRepository: get_change_dir_files(dir)\n FileRepository ->> FileRepository: identify changed files within directory\n FileRepository ->> Document: return list of changed files\n\n Document ->> FileRepository: save_doc(doc, dependencies)\n FileRepository ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository ->> Path: convert content of document to Markdown\n FileRepository ->> FileRepository: save content to file with optional suffix\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: delete(filename)\n FileRepository ->> Path: delete file from repository\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n FileRepository->>FileRepository: filter_gitignore(filenames, root_relative_path)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131222829147:{\nsequenceDiagram\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant DependencyFile\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->> FileRepository: get_all(filter_ignored)\n FileRepository ->> FileRepository: retrieve content of all files\n FileRepository ->> Document: return list of document instances\n\n Document ->> FileRepository: get_change_dir_files(dir)\n FileRepository ->> FileRepository: identify changed files within directory\n FileRepository ->> Document: return list of changed files\n\n Document ->> FileRepository: save_doc(doc, dependencies)\n FileRepository ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository ->> Path: convert content of document to Markdown\n FileRepository ->> FileRepository: save content to file with optional suffix\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: delete(filename)\n FileRepository ->> Path: delete file from repository\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n FileRepository->>FileRepository: filter_gitignore(filenames, root_relative_path)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "?:List"}, {"id": "?:aiofiles"}, {"id": "?:os"}, {"id": "?:datetime"}, {"id": "?:json"}, {"id": "{\"description\":\"The source code is a python class representing a DependencyFile for managing dependencies. It includes methods for loading, saving, updating, getting, and deleting dependencies from a file asynchronously.\",\"use_cases\":[{\"description\":\"Load dependencies from the file asynchronously.\",\"inputs\":[],\"outputs\":[],\"actors\":[\"User\"],\"steps\":[\"Check if the file exists\",\"Read the file asynchronously\",\"Parse the JSON data\",\"Update the internal dependencies\"],\"reason\":\"When the system needs to load dependencies from the file.\"},{\"description\":\"Save dependencies to the file asynchronously.\",\"inputs\":[],\"outputs\":[],\"actors\":[\"User\"],\"steps\":[\"Convert dependencies to JSON\",\"Open the file for writing asynchronously\",\"Write the JSON data to the file\"],\"reason\":\"When the system needs to save dependencies to the file.\"},{\"description\":\"Update dependencies for a file asynchronously.\",\"inputs\":[\"filename\",\"dependencies\",\"persist\"],\"outputs\":[],\"actors\":[\"User\"],\"steps\":[\"Load dependencies if persist is true\",\"Get the relative path of the filename\",\"Update the internal dependencies with the new dependencies\",\"Persist the changes if persist is true\"],\"reason\":\"When the system needs to update dependencies for a file.\"},{\"description\":\"Get dependencies for a file asynchronously.\",\"inputs\":[\"filename\",\"persist\"],\"outputs\":[\"A set of dependencies\"],\"actors\":[\"User\"],\"steps\":[\"Load dependencies if persist is true\",\"Get the relative path of the filename\",\"Return the set of dependencies for the file\"],\"reason\":\"When the system needs to retrieve dependencies for a file.\"},{\"description\":\"Delete the dependency file.\",\"inputs\":[],\"outputs\":[],\"actors\":[\"User\"],\"steps\":[\"Delete the dependency file if it exists\"],\"reason\":\"When the system needs to delete the dependency file.\"}],\"relationship\":[\"The 'Load dependencies from the file asynchronously' use case is related to 'Save dependencies to the file asynchronously' as it involves reading and writing to the file.\",\"The 'Update dependencies for a file asynchronously' use case is related to 'Get dependencies for a file asynchronously' as it involves updating and retrieving dependencies for a file.\"]}"}, {"id": "\nsequenceDiagram\n participant User\n participant DependencyFile\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n"}, {"id": "\nsequenceDiagram\n participant User\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant BaseLLM\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131222928045:{\nsequenceDiagram\n participant User\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant BaseLLM\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"The source code is an abstract class that provides a series of standard capabilities for an AI assistant. It includes methods for sending and receiving messages, as well as methods for asynchronous completion and choice selection.\",\"use_cases\":[{\"description\":\"Send a message to the AI assistant and receive a response.\",\"inputs\":[\"msg\",\"system_msgs\",\"format_msgs\",\"timeout\",\"stream\"],\"outputs\":[\"rsp\"],\"actors\":[\"Message\",\"AsyncOpenAI\"],\"steps\":[\"Check if system messages are provided, if not, use the default system prompt\",\"Format the messages to be sent to the AI assistant, including user messages and system messages\",\"Send the formatted messages to the AI assistant and await a response\",\"Return the response from the AI assistant\"],\"reason\":\"When an external system needs to interact with the AI assistant by sending a message and receiving a response.\"},{\"description\":\"Send a batch of messages to the AI assistant and receive a concatenated response.\",\"inputs\":[\"msgs\",\"timeout\"],\"outputs\":[\"rsp_text\"],\"actors\":[\"Message\",\"AsyncOpenAI\"],\"steps\":[\"Iterate through the list of messages to be sent to the AI assistant\",\"Send each message to the AI assistant and await a response\",\"Concatenate the responses from the AI assistant\",\"Return the concatenated response\"],\"reason\":\"When an external system needs to sequentially send multiple messages to the AI assistant and receive a combined response.\"},{\"description\":\"Send a code-related message to the AI assistant and receive a response.\",\"inputs\":[\"messages\",\"timeout\"],\"outputs\":[\"rsp\"],\"actors\":[\"Message\",\"AsyncOpenAI\"],\"steps\":[\"Raise a NotImplementedError as this method is not implemented in the abstract class\"],\"reason\":\"N/A\"}],\"relationship\":[\"The 'Send a message to the AI assistant and receive a response' use case involves the 'Send a batch of messages to the AI assistant and receive a concatenated response' use case, as it utilizes the method for sending a single message to the AI assistant.\",\"The 'Send a message to the AI assistant and receive a response' use case involves the 'Send a code-related message to the AI assistant and receive a response' use case, as it utilizes the method for sending a single message to the AI assistant.\"]}"}, {"id": "\nsequenceDiagram\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n"}, {"id": "\nsequenceDiagram\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant User\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n\n"}, {"id": "20240131223021143:{\nsequenceDiagram\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant User\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n\n}"}, {"id": "{\"description\":\"This source code defines a Message class that represents a message with various attributes and methods for validation and serialization. It also includes methods for converting the message object to a dictionary and JSON string, as well as loading a message from a JSON string.\",\"use_cases\":[{\"description\":\"Create a new message with the given content, instruct content, role, cause by, sent from, and send to.\",\"inputs\":[\"content\",\"instruct_content\",\"role\",\"cause_by\",\"sent_from\",\"send_to\"],\"outputs\":[\"message_id\"],\"actors\":[\"User\"],\"steps\":[\"Validate and set the message ID if not provided\",\"Validate and set the instruct content if provided\",\"Validate and set the cause by if provided\",\"Validate and set the sent from if provided\",\"Validate and set the send to if provided\",\"Create a new message object with the provided data\",\"Return the message ID\"],\"reason\":\"When a user wants to create a new message with specific attributes.\"},{\"description\":\"Convert the message object to a dictionary containing role and content.\",\"inputs\":[],\"outputs\":[\"message_dict\"],\"actors\":[\"User\"],\"steps\":[\"Create a dictionary with role and content attributes of the message object\",\"Return the created dictionary\"],\"reason\":\"When a user needs to convert a message object to a dictionary.\"},{\"description\":\"Convert the message object to a JSON string.\",\"inputs\":[],\"outputs\":[\"json_string\"],\"actors\":[\"User\"],\"steps\":[\"Convert the message object to a JSON string\",\"Return the JSON string\"],\"reason\":\"When a user needs to convert a message object to a JSON string.\"},{\"description\":\"Load a message object from a JSON string.\",\"inputs\":[\"json_string\"],\"outputs\":[\"message_object\"],\"actors\":[\"User\"],\"steps\":[\"Parse the JSON string to a dictionary\",\"Create a message object from the dictionary\",\"Return the created message object\"],\"reason\":\"When a user needs to load a message object from a JSON string.\"}],\"relationship\":[\"Create a new message use case is related to Convert the message object to a dictionary use case and Convert the message object to a JSON string use case.\",\"Load a message object from a JSON string use case is independent of other use cases.\"]}"}, {"id": "\nsequenceDiagram\n participant User\n participant Message\n\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n"}, {"id": "\nsequenceDiagram\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131223126916:{\nsequenceDiagram\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"This source code defines a class LLMConfig which represents the configuration for an LLM (Language Model) system. It includes various fields such as API key, base URL, model, app ID, and other parameters for controlling the behavior of the LLM system.\",\"use_cases\":[{\"description\":\"Configure LLM system\",\"inputs\":[\"api_key\",\"api_type\",\"base_url\",\"api_version\",\"model\",\"app_id\",\"api_secret\",\"domain\",\"max_token\",\"temperature\",\"top_p\",\"top_k\",\"repetition_penalty\",\"stop\",\"presence_penalty\",\"frequency_penalty\",\"best_of\",\"n\",\"stream\",\"logprobs\",\"top_logprobs\",\"timeout\",\"proxy\",\"calc_usage\"],\"outputs\":[],\"actors\":[\"System Administrator\"],\"steps\":[\"The system administrator provides the configuration parameters for the LLM system.\",\"The system validates the provided configuration parameters.\",\"The LLM system is configured with the provided parameters.\"],\"reason\":\"The external system needs to configure the LLM system with specific parameters to control its behavior and functionality.\"}],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant SystemAdministrator\n participant LLMSystem\n\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n"}, {"id": "\nsequenceDiagram\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131223231878:{\nsequenceDiagram\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "?:SystemAdministrator"}, {"id": "?:LLMSystem"}, {"id": "{\"description\":\"The source code defines a Team class that represents a team of agents working on a project. The team can hire roles, invest in the project, run and start a project, and run the company for a specified number of rounds.\",\"use_cases\":[{\"description\":\"Hire roles to cooperate\",\"inputs\":[\"roles\"],\"outputs\":[],\"actors\":[\"Team\"],\"steps\":[\"The team hires roles to cooperate on the project.\"],\"reason\":\"When the team needs to add new roles to the project.\"},{\"description\":\"Invest company\",\"inputs\":[\"investment\"],\"outputs\":[],\"actors\":[\"Team\"],\"steps\":[\"The team invests in the company.\",\"If the investment exceeds the maximum budget, a NoMoneyException is raised.\"],\"reason\":\"When the team needs to invest in the company.\"},{\"description\":\"Run a project from publishing user requirement\",\"inputs\":[\"idea\",\"send_to\"],\"outputs\":[],\"actors\":[\"Team\"],\"steps\":[\"The team runs a project based on the user's requirement.\",\"The idea is published to the team's environment for further processing.\"],\"reason\":\"When the team needs to start a new project based on user requirements.\"},{\"description\":\"Run company until target round or no money\",\"inputs\":[\"n_round\",\"idea\",\"send_to\",\"auto_archive\"],\"outputs\":[\"history\"],\"actors\":[\"Team\"],\"steps\":[\"The team runs the company for a specified number of rounds.\",\"If an idea is provided, it is used to run a project.\",\"The company is run until the target round is reached or there is no money left.\",\"The environment is archived if auto_archive is set to true.\"],\"reason\":\"When the team needs to run the company for a specified number of rounds.\"}],\"relationship\":[\"The 'Hire roles to cooperate' use case is related to the 'Invest company' use case as hiring roles may require investment.\",\"The 'Run a project from publishing user requirement' use case is related to the 'Run company until target round or no money' use case as running a project is part of running the company.\"]}"}, {"id": "\nsequenceDiagram\n participant Team\n participant Role\n participant Environment\n participant Context\n participant Path\n\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n\n Note right of Team: The 'Hire roles to cooperate' use case is related to the 'Invest company' use case as hiring roles may require investment.\n Note right of Team: The 'Run a project from publishing user requirement' use case is related to the 'Run company until target round or no money' use case as running a project is part of running the company.\n"}, {"id": "\nsequenceDiagram\n participant Team\n participant Role\n participant Environment\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131223353735:{\nsequenceDiagram\n participant Team\n participant Role\n participant Environment\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"This source code defines a Role class that represents a role or agent in a system. The Role class contains methods for setting actions, thinking, acting, observing, and reacting to messages. It also includes properties for managing the role's state and environment.\",\"use_cases\":[{\"description\":\"Set action to do and update context\",\"inputs\":[\"value\"],\"outputs\":[],\"actors\":[\"Role\"],\"steps\":[\"Check if the value is not None\",\"If the value is not None, set the value as the action to do and update the context\"],\"reason\":\"This use case is executed when the system needs to set an action for the role to perform and update the context.\"},{\"description\":\"Add actions to the role\",\"inputs\":[\"actions\"],\"outputs\":[],\"actors\":[\"Role\"],\"steps\":[\"Reset the role's states and actions\",\"Iterate through the list of actions\",\"Initialize each action if it is not already initialized\",\"Set the long-term memory (llm) and prefix for each action\",\"Add the action to the role's list of actions\",\"Update the role's states with the action descriptions\"],\"reason\":\"This use case is executed when the system needs to add multiple actions to the role and update its states and long-term memory.\"},{\"description\":\"Set the strategy of the role reacting to observed messages\",\"inputs\":[\"react_mode\",\"max_react_loop\"],\"outputs\":[],\"actors\":[\"Role\"],\"steps\":[\"Check if the react_mode is valid\",\"Set the role's react mode and maximum react loop based on the inputs\"],\"reason\":\"This use case is executed when the system needs to set the strategy for the role's reaction to observed messages.\"},{\"description\":\"Watch actions of interest\",\"inputs\":[\"actions\"],\"outputs\":[],\"actors\":[\"Role\"],\"steps\":[\"Set the role to watch messages caused by the specified actions\"],\"reason\":\"This use case is executed when the system needs the role to watch specific actions of interest.\"},{\"description\":\"Observe, think, and act based on the results of the observation\",\"inputs\":[\"with_message\"],\"outputs\":[\"rsp\"],\"actors\":[\"Role\"],\"steps\":[\"If a message is provided, place the message into the role's private message buffer\",\"If there is no new information, suspend and wait\",\"Observe new messages and filter out messages of interest\",\"React to the observed messages and get the response message\",\"Reset the next action to be taken\",\"Publish the response message to the environment\"],\"reason\":\"This use case is executed when the role needs to observe, think, and act based on the results of the observation.\"}],\"relationship\":[\"The 'Set action to do and update context' use case is related to the 'Add actions to the role' use case as it involves updating the role's context and actions.\",\"The 'Set the strategy of the role reacting to observed messages' use case is related to the 'Observe, think, and act based on the results of the observation' use case as it determines the strategy for the role's reaction to observed messages.\",\"The 'Watch actions of interest' use case is related to the 'Observe, think, and act based on the results of the observation' use case as it involves watching specific actions of interest during the observation process.\"]}"}, {"id": "\nsequenceDiagram\n participant Role\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n"}, {"id": "\nsequenceDiagram\n participant Role\n participant Team\n participant Environment\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131223527497:{\nsequenceDiagram\n participant Role\n participant Team\n participant Environment\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"The source code defines an Environment class that hosts a batch of roles. Roles can publish messages to the environment and can be observed by other roles. The environment also provides methods to add roles, publish messages, run role processes, and manage role addresses.\",\"use_cases\":[{\"description\":\"Add a role to the current environment\",\"inputs\":[\"role: Role\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"Add the role to the roles dictionary of the environment\",\"Set the environment for the role\",\"Set the context for the role\"],\"reason\":\"When a new role needs to be added to the environment\"},{\"description\":\"Add a batch of roles to the current environment\",\"inputs\":[\"roles: Iterable[Role]\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"Add each role to the roles dictionary of the environment\",\"Set the environment for each role\",\"Set the context for each role\"],\"reason\":\"When multiple roles need to be added to the environment\"},{\"description\":\"Publish a message to the recipients in the environment\",\"inputs\":[\"message: Message\",\"peekable: bool\"],\"outputs\":[\"bool\"],\"actors\":[\"Environment\"],\"steps\":[\"Iterate through the member addresses of the environment\",\"Check if the message is to be sent to the current recipient\",\"If found, put the message in the recipient's queue\",\"Update the history of the environment\"],\"reason\":\"When a message needs to be distributed to the recipients in the environment\"},{\"description\":\"Process all role runs at once\",\"inputs\":[\"k: int\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"For each role, initiate a run process\",\"Gather all the run processes using asyncio\",\"Check if all actions have been executed\"],\"reason\":\"When all role processes need to be executed at once\"},{\"description\":\"Get all roles in the environment\",\"inputs\":[],\"outputs\":[\"dict[str, Role]\"],\"actors\":[\"Environment\"],\"steps\":[\"Return the roles dictionary of the environment\"],\"reason\":\"When all roles in the environment need to be retrieved\"},{\"description\":\"Get a specific role in the environment\",\"inputs\":[\"name: str\"],\"outputs\":[\"Role\"],\"actors\":[\"Environment\"],\"steps\":[\"Return the role with the specified name from the roles dictionary of the environment\"],\"reason\":\"When a specific role in the environment needs to be retrieved\"},{\"description\":\"Get all role names in the environment\",\"inputs\":[],\"outputs\":[\"list[str]\"],\"actors\":[\"Environment\"],\"steps\":[\"Return a list of names of all roles in the environment\"],\"reason\":\"When all role names in the environment need to be retrieved\"},{\"description\":\"Get the addresses of the object\",\"inputs\":[\"obj\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"Return the addresses of the specified object from the member addresses of the environment\"],\"reason\":\"When the addresses of a specific object in the environment need to be retrieved\"},{\"description\":\"Set the addresses of the object\",\"inputs\":[\"obj\",\"addresses\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"Set the addresses of the specified object in the member addresses of the environment\"],\"reason\":\"When the addresses of a specific object in the environment need to be updated\"},{\"description\":\"Archive the environment\",\"inputs\":[\"auto_archive: bool\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"If auto_archive is true and the environment has a git repository, archive the repository\"],\"reason\":\"When the environment needs to be archived, and auto archiving is enabled\"}],\"relationship\":[\"The 'Add a role to the current environment' use case is related to the 'Add a batch of roles to the current environment' use case as it involves adding roles to the environment.\",\"The 'Publish a message to the recipients in the environment' use case is related to the 'Process all role runs at once' use case as it involves distributing messages to the roles in the environment and processing their runs.\",\"The 'Get all roles in the environment' use case is related to the 'Get a specific role in the environment' use case and the 'Get all role names in the environment' use case as it involves retrieving information about roles in the environment.\",\"The 'Get the addresses of the object' use case is related to the 'Set the addresses of the object' use case as it involves managing addresses of objects in the environment.\"]}"}, {"id": "\nsequenceDiagram\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n"}, {"id": "\nsequenceDiagram\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131223701562:{\nsequenceDiagram\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"The source code represents a Product Manager role responsible for product development and management. It includes attributes such as name, profile, goal, and constraints. The role has methods to decide what to do and observe the environment.\",\"use_cases\":[{\"description\":\"Decide what to do\",\"inputs\":[],\"outputs\":[],\"actors\":[\"Product Manager\"],\"steps\":[\"Check if the git repository exists and the configuration for git reinitialization is not set\",\"Set the state to 1 if the conditions are met\",\"If the conditions are not met, set the state to 0, set the git reinitialization configuration to false, and update the todo action to WritePRD\",\"Return a boolean indicating if there are any pending actions\"],\"reason\":\"When the system needs to decide the next action to take based on the current state and environment\"},{\"description\":\"Observe the environment\",\"inputs\":[],\"outputs\":[],\"actors\":[\"Product Manager\"],\"steps\":[\"Call the observe method of the superclass with ignore_memory set to True\"],\"reason\":\"When the system needs to observe the environment and update its internal state\"}],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant ProductManager\n\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n"}, {"id": "\nsequenceDiagram\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131223806039:{\nsequenceDiagram\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"The source code defines an Architect role in a software development process with attributes such as name, profile, goal, and constraints. It also initializes specific actions and events for the Architect role.\",\"use_cases\":[],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant SourceCode\n participant Architect\n\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n"}, {"id": "\nsequenceDiagram\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131223921365:{\nsequenceDiagram\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "?:SourceCode"}, {"id": "{\"description\":\"The source code defines a Project Manager role with attributes such as name, profile, goal, and constraints. It also sets actions and watches for the Project Manager role.\",\"use_cases\":[{\"description\":\"Write Tasks\",\"inputs\":[\"task_list\",\"task_dependencies\"],\"outputs\":[\"task_breakdown\"],\"actors\":[\"Project Manager\"],\"steps\":[\"Receive task list and task dependencies\",\"Analyze task dependencies\",\"Generate task breakdown\"],\"reason\":\"When the Project Manager needs to break down tasks according to PRD/technical design and analyze task dependencies.\"},{\"description\":\"Write Design\",\"inputs\":[\"user_requirement\",\"technical_design\"],\"outputs\":[\"task_list\"],\"actors\":[\"Project Manager\"],\"steps\":[\"Receive user requirement and technical design\",\"Generate a task list\"],\"reason\":\"When the Project Manager needs to generate a task list based on user requirement and technical design.\"}],\"relationship\":[\"Write Tasks is required by Project Manager to break down tasks according to PRD/technical design and analyze task dependencies.\",\"Write Design is required by Project Manager to generate a task list based on user requirement and technical design.\"]}"}, {"id": "\nsequenceDiagram\n participant ProjectManager\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n WriteDesign-->>ProjectManager: task_list\n"}, {"id": "\nsequenceDiagram\n participant ProjectManager\n participant WriteTasks\n participant WriteDesign\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n WriteDesign-->>ProjectManager: task_list\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131224018623:{\nsequenceDiagram\n participant ProjectManager\n participant WriteTasks\n participant WriteDesign\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n WriteDesign-->>ProjectManager: task_list\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"The source code defines a class 'WriteTasks' that is responsible for creating and updating tasks based on changes in system designs and task files. It also handles merging and updating requirements related to the tasks.\",\"use_cases\":[{\"description\":\"Create and update tasks based on changes in system designs and task files\",\"inputs\":[\"changed_system_designs\",\"changed_tasks\"],\"outputs\":[\"change_files\"],\"actors\":[\"WriteTasks\"],\"steps\":[\"Identify the system designs and task files that have undergone changes\",\"Update the system designs and task files\",\"Merge the updated system designs and task files\",\"Update the requirements related to the tasks\"],\"reason\":\"When there are changes in the system designs or task files, the system needs to create and update tasks accordingly.\"}],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant WriteTasks\n\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n"}, {"id": "\nsequenceDiagram\n participant WriteTasks\n participant ProjectManager\n participant WriteDesign\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131224133693:{\nsequenceDiagram\n participant WriteTasks\n participant ProjectManager\n participant WriteDesign\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"The source code defines a class `WriteDesign` that represents an action to generate system design based on PRD and design documents. It includes methods to update system design, merge PRD and system design, save data API design, and save sequence flow.\",\"use_cases\":[{\"description\":\"Generate system design based on PRD and design documents\",\"inputs\":[\"with_messages\",\"schema\"],\"outputs\":[\"content\",\"instruct_content\"],\"actors\":[\"Message\"],\"steps\":[\"Identify which PRD documents and design documents have been modified\",\"Regenerate the design content for the modified documents\",\"Wait for all files to be processed before sending the publish message\"],\"reason\":\"When there are changes in PRD and design documents, the system needs to generate the corresponding system design.\"}],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant Action\n participant Message\n\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n\n"}, {"id": "\nsequenceDiagram\n participant Action\n participant Message\n participant WriteTasks\n participant ProjectManager\n participant WriteDesign\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131224454452:{\nsequenceDiagram\n participant Action\n participant Message\n participant WriteTasks\n participant ProjectManager\n participant WriteDesign\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"This source code defines a class Action with various properties and methods related to running an action node and setting a prefix for later usage.\",\"use_cases\":[{\"description\":\"Set prefix for later usage\",\"inputs\":[\"prefix\"],\"outputs\":[],\"actors\":[\"RunCodeContext\",\"CodeSummarizeContext\",\"TestingContext\",\"CodingContext\",\"CodePlanAndChangeContext\"],\"steps\":[\"Set the prefix property of the Action class to the provided value\",\"Set the system prompt property to the provided prefix\",\"Update the llm system prompt property with the provided prefix\",\"If the node property is not None, update the llm property of the node with the llm property of the Action class\"],\"reason\":\"When an external system needs to set a prefix for later usage\"},{\"description\":\"Run action node\",\"inputs\":[\"args\",\"kwargs\"],\"outputs\":[],\"actors\":[\"RunCodeContext\",\"CodeSummarizeContext\",\"TestingContext\",\"CodingContext\",\"CodePlanAndChangeContext\"],\"steps\":[\"Extract the messages from the args input\",\"Create a context string with the history messages\",\"Fill the action node with the context and llm properties\"],\"reason\":\"When an external system needs to run an action node\"},{\"description\":\"Run action\",\"inputs\":[\"args\",\"kwargs\"],\"outputs\":[],\"actors\":[\"RunCodeContext\",\"CodeSummarizeContext\",\"TestingContext\",\"CodingContext\",\"CodePlanAndChangeContext\"],\"steps\":[\"If the node property is not None, call the _run_action_node method with the provided args and kwargs\",\"Otherwise, raise a NotImplementedError\"],\"reason\":\"When an external system needs to run an action\"}],\"relationship\":[\"The 'Set prefix for later usage' use case can be executed before the 'Run action node' use case\",\"The 'Run action node' use case can be executed before the 'Run action' use case\"]}"}, {"id": "\nsequenceDiagram\n participant RunCodeContext\n participant CodeSummarizeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n```\n"}, {"id": "\nsequenceDiagram\n participant RunCodeContext\n participant CodeSummarizeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131224643506:{\nsequenceDiagram\n participant RunCodeContext\n participant CodeSummarizeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"The source code defines a class RunCodeContext which contains attributes related to running code such as mode, code, test code, command, working directory, additional python paths, output filename, and output.\",\"use_cases\":[{\"description\":\"Run code in script mode\",\"inputs\":[\"code\",\"working_directory\",\"additional_python_paths\"],\"outputs\":[\"output\"],\"actors\":[\"User\"],\"steps\":[\"User provides the code to be executed\",\"User specifies the working directory for code execution\",\"User may provide additional python paths if required\",\"System runs the provided code in script mode\",\"System generates an output after executing the code\"],\"reason\":\"When the user wants to execute a piece of code in script mode\"},{\"description\":\"Run code in test mode\",\"inputs\":[\"test_code\",\"working_directory\",\"additional_python_paths\"],\"outputs\":[\"output\"],\"actors\":[\"User\"],\"steps\":[\"User provides the test code to be executed\",\"User specifies the working directory for code execution\",\"User may provide additional python paths if required\",\"System runs the provided test code\",\"System generates an output after executing the test code\"],\"reason\":\"When the user wants to execute a piece of code in test mode\"}],\"relationship\":[\"The 'Run code in script mode' use case is related to the 'Run code in test mode' use case as both involve running code with different purposes.\"]}"}, {"id": "\nsequenceDiagram\n participant User\n participant System\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n"}, {"id": "\nsequenceDiagram\n participant User\n participant System\n participant RunCodeContext\n participant CodeSummarizeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant Document\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131224806732:{\nsequenceDiagram\n participant User\n participant System\n participant RunCodeContext\n participant CodeSummarizeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant Document\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "?:System"}, {"id": "{\"description\":\"The source code defines a class CodeSummarizeContext with attributes design_filename, task_filename, codes_filenames, and reason. It also provides a static method loads to create an instance of CodeSummarizeContext from a list of filenames.\",\"use_cases\":[{\"description\":\"Load CodeSummarizeContext\",\"inputs\":[\"filenames: List[str]\"],\"outputs\":[\"ctx: CodeSummarizeContext\"],\"actors\":[\"External System\"],\"steps\":[\"Create an empty instance of CodeSummarizeContext\",\"Iterate through the list of filenames\",\"If the filename is relative to SYSTEM_DESIGN_FILE_REPO, set design_filename attribute\",\"If the filename is relative to TASK_FILE_REPO, set task_filename attribute\"],\"reason\":\"When the external system needs to load a CodeSummarizeContext instance from a list of filenames.\"}],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant ExternalSystem\n participant CodeSummarizeContext\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>CodeSummarizeContext: Create an empty instance\n loop through filenames\n CodeSummarizeContext->>CodeSummarizeContext: Check if filename is relative to SYSTEM_DESIGN_FILE_REPO\n alt filename is relative to SYSTEM_DESIGN_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set design_filename attribute\n else filename is relative to TASK_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set task_filename attribute\n end\n end\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n"}, {"id": "\nsequenceDiagram\n participant ExternalSystem\n participant CodeSummarizeContext\n participant User\n participant System\n participant RunCodeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant Document\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>CodeSummarizeContext: Create an empty instance\n loop through filenames\n CodeSummarizeContext->>CodeSummarizeContext: Check if filename is relative to SYSTEM_DESIGN_FILE_REPO\n alt filename is relative to SYSTEM_DESIGN_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set design_filename attribute\n else filename is relative to TASK_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set task_filename attribute\n end\n end\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131224922674:{\nsequenceDiagram\n participant ExternalSystem\n participant CodeSummarizeContext\n participant User\n participant System\n participant RunCodeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant Document\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>CodeSummarizeContext: Create an empty instance\n loop through filenames\n CodeSummarizeContext->>CodeSummarizeContext: Check if filename is relative to SYSTEM_DESIGN_FILE_REPO\n alt filename is relative to SYSTEM_DESIGN_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set design_filename attribute\n else filename is relative to TASK_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set task_filename attribute\n end\n end\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "?:ExternalSystem"}, {"id": "{\"description\":\"This source code defines a TestingContext class that contains a filename, code document, and an optional test document. The TestingContext is a subclass of BaseContext.\",\"use_cases\":[{\"description\":\"Create a new testing context\",\"inputs\":[\"filename\",\"code_doc\"],\"outputs\":[\"testing_context\"],\"actors\":[\"Tester\"],\"steps\":[\"The Tester provides a filename and a code document to the system\",\"The system creates a new TestingContext object with the provided filename and code document\",\"The system returns the created TestingContext object\"],\"reason\":\"When a Tester needs to create a new testing context for a specific code document\"}],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant Tester\n participant System\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n"}, {"id": "\nsequenceDiagram\n participant Tester\n participant System\n participant ExternalSystem\n participant CodeSummarizeContext\n participant User\n participant RunCodeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant Document\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>CodeSummarizeContext: Create an empty instance\n loop through filenames\n CodeSummarizeContext->>CodeSummarizeContext: Check if filename is relative to SYSTEM_DESIGN_FILE_REPO\n alt filename is relative to SYSTEM_DESIGN_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set design_filename attribute\n else filename is relative to TASK_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set task_filename attribute\n end\n end\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131225037718:{\nsequenceDiagram\n participant Tester\n participant System\n participant ExternalSystem\n participant CodeSummarizeContext\n participant User\n participant RunCodeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant Document\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>CodeSummarizeContext: Create an empty instance\n loop through filenames\n CodeSummarizeContext->>CodeSummarizeContext: Check if filename is relative to SYSTEM_DESIGN_FILE_REPO\n alt filename is relative to SYSTEM_DESIGN_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set design_filename attribute\n else filename is relative to TASK_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set task_filename attribute\n end\n end\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "?:Tester"}, {"id": "{\"description\":\"The source code defines a class CodingContext with attributes filename, design_doc, task_doc, and code_doc. The class is a part of a larger system and interacts with external documents such as Document.\",\"use_cases\":[{\"description\":\"Create Coding Context\",\"inputs\":[\"filename\"],\"outputs\":[\"coding_context\"],\"actors\":[\"User\"],\"steps\":[\"User provides a filename as input\",\"System creates a new CodingContext object with the provided filename\",\"System returns the created CodingContext object\"],\"reason\":\"When a user needs to create a new coding context for a specific file\"},{\"description\":\"Update Design Document\",\"inputs\":[\"coding_context\",\"design_doc\"],\"outputs\":[\"updated_coding_context\"],\"actors\":[\"User\"],\"steps\":[\"User provides the coding context and the updated design document as input\",\"System updates the design document in the provided coding context\",\"System returns the updated coding context\"],\"reason\":\"When a user needs to update the design document in a coding context\"},{\"description\":\"Update Task Document\",\"inputs\":[\"coding_context\",\"task_doc\"],\"outputs\":[\"updated_coding_context\"],\"actors\":[\"User\"],\"steps\":[\"User provides the coding context and the updated task document as input\",\"System updates the task document in the provided coding context\",\"System returns the updated coding context\"],\"reason\":\"When a user needs to update the task document in a coding context\"},{\"description\":\"Update Code Document\",\"inputs\":[\"coding_context\",\"code_doc\"],\"outputs\":[\"updated_coding_context\"],\"actors\":[\"User\"],\"steps\":[\"User provides the coding context and the updated code document as input\",\"System updates the code document in the provided coding context\",\"System returns the updated coding context\"],\"reason\":\"When a user needs to update the code document in a coding context\"}],\"relationship\":[\"Create Coding Context is a prerequisite for Update Design Document, Update Task Document, and Update Code Document\"]}"}, {"id": "\nsequenceDiagram\n participant User\n participant System\n participant CodingContext\n participant Document\n\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n"}, {"id": "\nsequenceDiagram\n participant User\n participant System\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131225231661:{\nsequenceDiagram\n participant User\n participant System\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "{\"description\":\"The source code defines a custom exception class called NoMoneyException, which is raised when an operation cannot be completed due to insufficient funds. The exception includes the amount required and a message indicating the insufficient funds.\",\"use_cases\":[],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant User\n participant SourceCode\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n"}, {"id": "\nsequenceDiagram\n participant User\n participant System\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n"}, {"id": "20240131225403302:{\nsequenceDiagram\n participant User\n participant System\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"id": "?:Logger"}, {"id": "{\"description\":\"This code defines a class for managing different types of file repositories related to project documentation.\",\"use_cases\":[{\"description\":\"Create DocFileRepositories instance\",\"inputs\":[\"git_repo\"],\"outputs\":[\"prd\",\"system_design\",\"task\",\"code_summary\",\"graph_repo\",\"class_view\",\"code_plan_and_change\"],\"actors\":[\"Project Manager\",\"Developer\"],\"steps\":[\"The Project Manager or Developer provides a git repository as input.\",\"The system creates a new DocFileRepositories instance with file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change.\",\"The system returns the file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change as output.\"],\"reason\":\"This use case is executed when a new instance of DocFileRepositories is required to manage different types of file repositories related to project documentation.\"}],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n"}, {"id": "\nsequenceDiagram\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant System\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team"}, {"id": "20240131225530578:{\nsequenceDiagram\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant System\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team}"}, {"id": "?:Developer"}, {"id": "{\"description\":\"The source code defines a class ResourceFileRepositories that extends FileRepository and initializes multiple file repositories for different types of resources.\",\"use_cases\":[{\"description\":\"Create Resource File Repositories\",\"inputs\":[\"git_repo\"],\"outputs\":[\"competitive_analysis\",\"data_api_design\",\"seq_flow\",\"system_design\",\"prd\",\"api_spec_and_task\",\"code_summary\",\"sd_output\",\"code_plan_and_change\",\"graph_repo\"],\"actors\":[\"System\"],\"steps\":[\"Initialize a new instance of ResourceFileRepositories with a git repository\",\"Create file repositories for competitive analysis, data API design, sequence flow, system design, PRD, API spec and task, code summary, SD output, code plan and change, and graph repository\"],\"reason\":\"The system needs to manage and organize different types of resource files in a git repository\"}],\"relationship\":[]}"}, {"id": "\nsequenceDiagram\n participant System\n System->>ResourceFileRepositories: git_repo\n activate ResourceFileRepositories\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=COMPETITIVE_ANALYSIS_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=DATA_API_DESIGN_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SEQ_FLOW_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SYSTEM_DESIGN_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=PRD_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=TASK_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_SUMMARIES_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SD_OUTPUT_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_PLAN_AND_CHANGE_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=VISUAL_GRAPH_REPO_FILE_REPO)\n deactivate ResourceFileRepositories\n"}, {"id": "\nsequenceDiagram\n participant System\n System->>ResourceFileRepositories: git_repo\n activate ResourceFileRepositories\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=COMPETITIVE_ANALYSIS_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=DATA_API_DESIGN_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SEQ_FLOW_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SYSTEM_DESIGN_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=PRD_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=TASK_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_SUMMARIES_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SD_OUTPUT_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_PLAN_AND_CHANGE_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=VISUAL_GRAPH_REPO_FILE_REPO)\n deactivate ResourceFileRepositories\n\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file"}, {"id": "20240131225710350:{\nsequenceDiagram\n participant System\n System->>ResourceFileRepositories: git_repo\n activate ResourceFileRepositories\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=COMPETITIVE_ANALYSIS_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=DATA_API_DESIGN_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SEQ_FLOW_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SYSTEM_DESIGN_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=PRD_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=TASK_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_SUMMARIES_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SD_OUTPUT_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_PLAN_AND_CHANGE_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=VISUAL_GRAPH_REPO_FILE_REPO)\n deactivate ResourceFileRepositories\n\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file}"}, {"id": "?:generate_repo"}, {"id": "?:config"}, {"id": "{\"description\":\"The source code represents an Engineer role responsible for writing and possibly reviewing code. It includes attributes and methods for writing and reviewing code, summarizing code, and writing code plan and change. It also includes methods for determining the mode of action, thinking, and acting based on whether code review is used.\",\"use_cases\":[{\"description\":\"Write Code\",\"inputs\":[\"coding_context\"],\"outputs\":[\"changed_files\"],\"actors\":[\"Engineer\"],\"steps\":[\"Select essential information from the historical data to reduce the length of the prompt\",\"Run the code review if enabled\",\"Save the changed files and relevant messages\",\"Return the changed files\"],\"reason\":\"When the engineer needs to write code\"},{\"description\":\"Summarize Code\",\"inputs\":[\"summary\"],\"outputs\":[\"tasks\"],\"actors\":[\"Engineer\"],\"steps\":[\"Run the code summary for each pair of (system_design_doc, task_doc)\",\"Save the summary and check if it passes\",\"Send the summary to QA Engineer if needed\",\"Return the tasks if not passed\"],\"reason\":\"When the engineer needs to summarize code\"},{\"description\":\"Write Code Plan and Change\",\"inputs\":[\"files\",\"requirement\"],\"outputs\":[\"code_plan_and_change\"],\"actors\":[\"Engineer\"],\"steps\":[\"Write code plan and change that guides subsequent WriteCode and WriteCodeReview\",\"Save the code plan and change\",\"Return the code plan and change\"],\"reason\":\"When the engineer needs to write code plan and change\"}],\"relationship\":[\"Write Code is performed by Engineer\",\"Summarize Code is performed by Engineer\",\"Write Code Plan and Change is performed by Engineer\"]}"}, {"id": "\nsequenceDiagram\n participant Engineer\n\n Engineer->>Engineer: action_description\n Engineer->>Engineer: list code_todos\n Engineer->>Engineer: str constraints\n Engineer->>Engineer: str goal\n Engineer->>Engineer: int n_borg\n Engineer->>Engineer: int n_summarize\n Engineer->>Engineer: str name\n Engineer->>Engineer: str next_todo_action\n Engineer->>Engineer: str profile\n Engineer->>Engineer: src_workspace\n Engineer->>Engineer: list summarize_todos\n Engineer->>Engineer: bool use_code_review\n"}, {"id": "\nsequenceDiagram\n participant Engineer\n participant System\n participant ResourceFileRepositories\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant QaEngineer\n\n Engineer->>Engineer: action_description\n Engineer->>Engineer: list code_todos\n Engineer->>Engineer: str constraints\n Engineer->>Engineer: str goal\n Engineer->>Engineer: int n_borg\n Engineer->>Engineer: int n_summarize\n Engineer->>Engineer: str name\n Engineer->>Engineer: str next_todo_action\n Engineer->>Engineer: str profile\n Engineer->>Engineer: src_workspace\n Engineer->>Engineer: list summarize_todos\n Engineer->>Engineer: bool use_code_review\n\n System->>ResourceFileRepositories: git_repo\n activate ResourceFileRepositories\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=COMPETITIVE_ANALYSIS_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=DATA_API_DESIGN_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SEQ_FLOW_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SYSTEM_DESIGN_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=PRD_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=TASK_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_SUMMARIES_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SD_OUTPUT_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_PLAN_AND_CHANGE_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=VISUAL_GRAPH_REPO_FILE_REPO)\n deactivate ResourceFileRepositories\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>"}, {"id": "20240131225840129:{\nsequenceDiagram\n participant Engineer\n participant System\n participant ResourceFileRepositories\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant QaEngineer\n\n Engineer->>Engineer: action_description\n Engineer->>Engineer: list code_todos\n Engineer->>Engineer: str constraints\n Engineer->>Engineer: str goal\n Engineer->>Engineer: int n_borg\n Engineer->>Engineer: int n_summarize\n Engineer->>Engineer: str name\n Engineer->>Engineer: str next_todo_action\n Engineer->>Engineer: str profile\n Engineer->>Engineer: src_workspace\n Engineer->>Engineer: list summarize_todos\n Engineer->>Engineer: bool use_code_review\n\n System->>ResourceFileRepositories: git_repo\n activate ResourceFileRepositories\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=COMPETITIVE_ANALYSIS_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=DATA_API_DESIGN_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SEQ_FLOW_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SYSTEM_DESIGN_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=PRD_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=TASK_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_SUMMARIES_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SD_OUTPUT_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_PLAN_AND_CHANGE_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=VISUAL_GRAPH_REPO_FILE_REPO)\n deactivate ResourceFileRepositories\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>}"}], "links": [{"predicate": "is", "source": "metagpt/schema.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/schema.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:AIMessage"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:BugFixContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:CodePlanAndChangeContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:CodeSummarizeContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:CodingContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:Document"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:Documents"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:MessageQueue"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:RunCodeContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:RunCodeResult"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:SerializationMixin"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:SimpleMessage"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:SystemMessage"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:TestingContext"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UMLClassAttribute"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UMLClassMeta"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UMLClassMethod"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UMLClassView"}, {"predicate": "has_class", "source": "metagpt/schema.py", "target": "metagpt/schema.py:UserMessage"}, {"predicate": "is", "source": "metagpt/schema.py:AIMessage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:AIMessage", "target": "{\"name\":\"AIMessage\",\"package\":\"metagpt/schema.py:AIMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:AIMessage", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:AIMessage", "target": "metagpt/schema.py:AIMessage:__init__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:AIMessage", "target": "{\"lineno\":325,\"end_lineno\":331,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AIMessage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:AIMessage", "target": "{\"name\":\"AIMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:APIRequestor"}, {"predicate": "has_class", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:ApiType"}, {"predicate": "has_class", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:OpenAIResponse"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_console_log_level"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:log_debug"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:log_info"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:log_warn"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:logfmt"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_build_api_url"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_requests_proxies_arg"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_aiohttp_proxies_arg"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:_make_session"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:parse_stream_helper"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:parse_stream"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:parse_stream_async"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_base.py", "target": "metagpt/provider/general_api_base.py:aiohttp_session"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "{\"name\":\"APIRequestor\",\"package\":\"metagpt/provider/general_api_base.py:APIRequestor\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key : NoneType\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"AZURE_AD,OPEN_AI\",\"default_\":\"\",\"description\":\"api_type : AZURE_AD, OPEN_AI\",\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"]},\"api_version\":{\"name\":\"api_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_version\",\"compositions\":[]},\"base_url\":{\"name\":\"base_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"base_url : NoneType\",\"compositions\":[]},\"organization\":{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization : NoneType\",\"compositions\":[]}},\"methods\":{\"arequest\":{\"name\":\"arequest\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[AsyncGenerator[OpenAIResponse,None],bool,str]\",\"description\":\"Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"compositions\":[\"AsyncGenerator\",\"OpenAIResponse\"]},\"description\":\"arequest(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\"]},\"arequest_raw\":{\"name\":\"arequest_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"aiohttp.ClientResponse\",\"description\":\"aiohttp.ClientResponse\",\"compositions\":[\"aiohttp.ClientResponse\"]},\"description\":\"arequest_raw(method, url, session): aiohttp.ClientResponse\",\"aggregations\":[\"aiohttp.ClientResponse\"]},\"request\":{\"name\":\"request\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[Iterator[OpenAIResponse],bool,str]\",\"description\":\"Tuple[Iterator[OpenAIResponse], bool, str]\",\"compositions\":[\"OpenAIResponse\"]},\"description\":\"request(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[Iterator[OpenAIResponse], bool, str]\",\"aggregations\":[\"OpenAIResponse\"]},\"request_headers\":{\"name\":\"request_headers\",\"args\":[{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"extra\",\"type_\":\"\",\"default_\":\"\",\"description\":\"extra\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"request_headers(method: str, extra, request_id: Optional[str]): Dict[str, str]\",\"aggregations\":[]},\"request_raw\":{\"name\":\"request_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"requests.Response\",\"description\":\"requests.Response\",\"compositions\":[\"requests.Response\"]},\"description\":\"request_raw(method, url): requests.Response\",\"aggregations\":[\"requests.Response\"]}},\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"],\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\",\"aiohttp.ClientResponse\",\"requests.Response\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:api_key"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:api_type"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:api_version"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:base_url"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:organization"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:arequest"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:arequest_raw"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:request"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:request_headers"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:request_raw"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:AZURE_AD"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:OPEN_AI"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:OpenAIResponse"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:AsyncGenerator"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:aiohttp.ClientResponse"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "?:requests.Response"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_validate_headers"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_prepare_request_raw"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_async_response"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response_line"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "{\"lineno\":227,\"end_lineno\":616,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"APIRequestor\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/general_api_base.py:APIRequestor", "target": "{\"name\":\"APIRequestor\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"AZURE_AD,OPEN_AI\",\"default_value\":\"\"},{\"name\":\"api_version\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"base_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"organization\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_type", "target": "{\"name\":\"api_type\",\"type_\":\"AZURE_AD,OPEN_AI\",\"default_\":\"\",\"description\":\"api_type : AZURE_AD, OPEN_AI\",\"compositions\":[\"AZURE_AD\",\"OPEN_AI\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_version", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:api_version", "target": "{\"name\":\"api_version\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_version\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:base_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:base_url", "target": "{\"name\":\"base_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"base_url : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:organization", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:organization", "target": "{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:arequest", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:arequest", "target": "{\"name\":\"arequest\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[AsyncGenerator[OpenAIResponse,None],bool,str]\",\"description\":\"Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"compositions\":[\"AsyncGenerator\",\"OpenAIResponse\"]},\"description\":\"arequest(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[AsyncGenerator[OpenAIResponse, None], bool, str]\",\"aggregations\":[\"OpenAIResponse\",\"AsyncGenerator\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:arequest_raw", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:arequest_raw", "target": "{\"name\":\"arequest_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"session\",\"type_\":\"\",\"default_\":\"\",\"description\":\"session\",\"compositions\":[]}],\"return_args\":{\"type_\":\"aiohttp.ClientResponse\",\"description\":\"aiohttp.ClientResponse\",\"compositions\":[\"aiohttp.ClientResponse\"]},\"description\":\"arequest_raw(method, url, session): aiohttp.ClientResponse\",\"aggregations\":[\"aiohttp.ClientResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:request", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:request", "target": "{\"name\":\"request\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]},{\"name\":\"params\",\"type_\":\"\",\"default_\":\"\",\"description\":\"params\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"\",\"default_\":\"\",\"description\":\"headers\",\"compositions\":[]},{\"name\":\"files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"files\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"stream: Literal[True]\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]},{\"name\":\"request_timeout\",\"type_\":\"Optional[Union[float,Tuple[float,float]]]\",\"default_\":\"\",\"description\":\"request_timeout: Optional[Union[float, Tuple[float, float]]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[Iterator[OpenAIResponse],bool,str]\",\"description\":\"Tuple[Iterator[OpenAIResponse], bool, str]\",\"compositions\":[\"OpenAIResponse\"]},\"description\":\"request(method, url, params, headers, files, stream: Literal[True], request_id: Optional[str], request_timeout: Optional[Union[float, Tuple[float, float]]]): Tuple[Iterator[OpenAIResponse], bool, str]\",\"aggregations\":[\"OpenAIResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:request_headers", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:request_headers", "target": "{\"name\":\"request_headers\",\"args\":[{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"extra\",\"type_\":\"\",\"default_\":\"\",\"description\":\"extra\",\"compositions\":[]},{\"name\":\"request_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"request_id: Optional[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"request_headers(method: str, extra, request_id: Optional[str]): Dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:request_raw", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:APIRequestor:request_raw", "target": "{\"name\":\"request_raw\",\"args\":[{\"name\":\"method\",\"type_\":\"\",\"default_\":\"\",\"description\":\"method\",\"compositions\":[]},{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"requests.Response\",\"description\":\"requests.Response\",\"compositions\":[\"requests.Response\"]},\"description\":\"request_raw(method, url): requests.Response\",\"aggregations\":[\"requests.Response\"]}"}, {"predicate": "is", "source": "metagpt/actions/action.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/action.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/action.py", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action", "target": "{\"name\":\"Action\",\"package\":\"metagpt/actions/action.py:Action\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_\":\"\",\"description\":\"i_context : Union[dict, CodingContext, CodeSummarizeContext, TestingContext, RunCodeContext, CodePlanAndChangeContext, str, None]\",\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"node\":{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},\"prefix\":{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"set_name_if_empty\":{\"name\":\"set_name_if_empty\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_name_if_empty(values)\",\"aggregations\":[]},\"set_prefix\":{\"name\":\"set_prefix\",\"args\":[{\"name\":\"prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prefix\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_prefix(prefix)\",\"aggregations\":[]}},\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:model_config"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:node"}, {"predicate": "has_class_property", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:prefix"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:project_name"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:project_path"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:prompt_schema"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:repo"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:set_name_if_empty"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:set_prefix"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/action.py:Action", "target": "metagpt/context_mixin.py:ContextMixin"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:SerializationMixin"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "isCompositeOn", "source": "metagpt/actions/action.py:Action", "target": "metagpt/roles/role.py:RoleContext:todo"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:CodePlanAndChangeContext"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:CodeSummarizeContext"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:CodingContext"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:RunCodeContext"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action.py:Action", "target": "metagpt/schema.py:TestingContext"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:_init_with_instruction"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:__str__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:__repr__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:_aask"}, {"predicate": "has_class_method", "source": "metagpt/actions/action.py:Action", "target": "metagpt/actions/action.py:Action:_run_action_node"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:Action", "target": "{\"lineno\":28,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Action\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action.py:Action", "target": "{\"name\":\"Action\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"node\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prefix\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:CodePlanAndChangeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:CodeSummarizeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:CodingContext"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:RunCodeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action.py:Action", "target": "?:TestingContext"}, {"predicate": "has_class_use_case", "source": "metagpt/actions/action.py:Action", "target": "{\"description\":\"This source code defines a class Action with various properties and methods related to running an action node and setting a prefix for later usage.\",\"use_cases\":[{\"description\":\"Set prefix for later usage\",\"inputs\":[\"prefix\"],\"outputs\":[],\"actors\":[\"RunCodeContext\",\"CodeSummarizeContext\",\"TestingContext\",\"CodingContext\",\"CodePlanAndChangeContext\"],\"steps\":[\"Set the prefix property of the Action class to the provided value\",\"Set the system prompt property to the provided prefix\",\"Update the llm system prompt property with the provided prefix\",\"If the node property is not None, update the llm property of the node with the llm property of the Action class\"],\"reason\":\"When an external system needs to set a prefix for later usage\"},{\"description\":\"Run action node\",\"inputs\":[\"args\",\"kwargs\"],\"outputs\":[],\"actors\":[\"RunCodeContext\",\"CodeSummarizeContext\",\"TestingContext\",\"CodingContext\",\"CodePlanAndChangeContext\"],\"steps\":[\"Extract the messages from the args input\",\"Create a context string with the history messages\",\"Fill the action node with the context and llm properties\"],\"reason\":\"When an external system needs to run an action node\"},{\"description\":\"Run action\",\"inputs\":[\"args\",\"kwargs\"],\"outputs\":[],\"actors\":[\"RunCodeContext\",\"CodeSummarizeContext\",\"TestingContext\",\"CodingContext\",\"CodePlanAndChangeContext\"],\"steps\":[\"If the node property is not None, call the _run_action_node method with the provided args and kwargs\",\"Otherwise, raise a NotImplementedError\"],\"reason\":\"When an external system needs to run an action\"}],\"relationship\":[\"The 'Set prefix for later usage' use case can be executed before the 'Run action node' use case\",\"The 'Run action node' use case can be executed before the 'Run action' use case\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/actions/action.py:Action", "target": "\nsequenceDiagram\n participant RunCodeContext\n participant CodeSummarizeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n```\n"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Union[dict,CodingContext,CodeSummarizeContext,TestingContext,RunCodeContext,CodePlanAndChangeContext,str,None]\",\"default_\":\"\",\"description\":\"i_context : Union[dict, CodingContext, CodeSummarizeContext, TestingContext, RunCodeContext, CodePlanAndChangeContext, str, None]\",\"compositions\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"TestingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:node", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:node", "target": "{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:prefix", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:prefix", "target": "{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:project_name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:project_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:project_path", "target": "{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:project_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:prompt_schema", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:prompt_schema", "target": "{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:prompt_schema", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:repo", "target": "{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:set_name_if_empty", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:set_name_if_empty", "target": "{\"name\":\"set_name_if_empty\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_name_if_empty(values)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:set_prefix", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action.py:Action:set_prefix", "target": "{\"name\":\"set_prefix\",\"args\":[{\"name\":\"prefix\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prefix\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_prefix(prefix)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/action_node.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:ActionNode"}, {"predicate": "has_class", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:ReviewMode"}, {"predicate": "has_class", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:ReviseMode"}, {"predicate": "has_class", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:Task"}, {"predicate": "has_class", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:Tasks"}, {"predicate": "has_class", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:ToolUse"}, {"predicate": "has_function", "source": "metagpt/actions/action_node.py", "target": "metagpt/actions/action_node.py:dict_to_markdown"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode", "target": "{\"name\":\"ActionNode\",\"package\":\"metagpt/actions/action_node.py:ActionNode\",\"attributes\":{\"children\":{\"name\":\"children\",\"type_\":\"dict[str,ActionNode]\",\"default_\":\"\",\"description\":\"children : dict[str, 'ActionNode']\",\"compositions\":[\"ActionNode\"]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]},\"example\":{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]},\"expected_type\":{\"name\":\"expected_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"expected_type : Type\",\"compositions\":[\"Type\"]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]},\"instruction\":{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]},\"key\":{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key : str\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"schema\":{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema : str\",\"compositions\":[]}},\"methods\":{\"add_child\":{\"name\":\"add_child\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_child(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]},\"add_children\":{\"name\":\"add_children\",\"args\":[{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_children(nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]},\"auto_review\":{\"name\":\"auto_review\",\"args\":[{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_review(template: str): dict[str, str]\",\"aggregations\":[]},\"auto_revise\":{\"name\":\"auto_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]},{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_revise(revise_mode: ReviseMode, template: str): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"compile\":{\"name\":\"compile\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"template\",\"type_\":\"\",\"default_\":\"\",\"description\":\"template\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile(context, schema, mode, template, exclude): str\",\"aggregations\":[]},\"compile_example\":{\"name\":\"compile_example\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_example(schema, mode, tag, exclude): str\",\"aggregations\":[]},\"compile_instruction\":{\"name\":\"compile_instruction\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_instruction(schema, mode, tag, exclude): str\",\"aggregations\":[]},\"compile_to\":{\"name\":\"compile_to\",\"args\":[{\"name\":\"i\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"i: Dict\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"kv_sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kv_sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_to(i: Dict, schema, kv_sep): str\",\"aggregations\":[]},\"create_children_class\":{\"name\":\"create_children_class\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_children_class(exclude)\",\"aggregations\":[]},\"create_class\":{\"name\":\"create_class\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]},{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_class(mode: str, class_name: str, exclude)\",\"aggregations\":[]},\"create_model_class\":{\"name\":\"create_model_class\",\"args\":[{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"default_\":\"\",\"description\":\"mapping: Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_model_class(class_name: str, mapping: Dict[str, Tuple[Type, Any]])\",\"aggregations\":[\"Type\"]},\"fill\":{\"name\":\"fill\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"strgy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strgy\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fill(context, llm, schema, mode, strgy, timeout, exclude)\",\"aggregations\":[]},\"from_children\":{\"name\":\"from_children\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_children(key, nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]},\"from_pydantic\":{\"name\":\"from_pydantic\",\"args\":[{\"name\":\"model\",\"type_\":\"Type[BaseModel]\",\"default_\":\"\",\"description\":\"model: Type[BaseModel]\",\"compositions\":[\"BaseModel\",\"Type\"]},{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_pydantic(model: Type[BaseModel], key: str)\",\"aggregations\":[\"BaseModel\",\"Type\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key)\",\"aggregations\":[]},\"get_child\":{\"name\":\"get_child\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union['ActionNode',None]\",\"description\":\"Union['ActionNode', None]\",\"compositions\":[\"ActionNode\"]},\"description\":\"get_child(key: str): Union['ActionNode', None]\",\"aggregations\":[\"ActionNode\"]},\"get_children_mapping\":{\"name\":\"get_children_mapping\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_children_mapping(exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"get_children_mapping_old\":{\"name\":\"get_children_mapping_old\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_children_mapping_old(exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"get_mapping\":{\"name\":\"get_mapping\",\"args\":[{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_mapping(mode, exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"get_self_mapping\":{\"name\":\"get_self_mapping\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_self_mapping(): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]},\"human_review\":{\"name\":\"human_review\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_review(): dict[str, str]\",\"aggregations\":[]},\"human_revise\":{\"name\":\"human_revise\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_revise(): dict[str, str]\",\"aggregations\":[]},\"keys\":{\"name\":\"keys\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"keys(mode: str): list\",\"aggregations\":[]},\"review\":{\"name\":\"review\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"review(strgy: str, review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]},\"revise\":{\"name\":\"revise\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"revise(strgy: str, revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"set_context\":{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context)\",\"aggregations\":[]},\"set_llm\":{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm)\",\"aggregations\":[]},\"set_recursive\":{\"name\":\"set_recursive\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_recursive(name, value)\",\"aggregations\":[]},\"simple_fill\":{\"name\":\"simple_fill\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_fill(schema, mode, timeout, exclude)\",\"aggregations\":[]},\"simple_review\":{\"name\":\"simple_review\",\"args\":[{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_review(review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]},\"simple_revise\":{\"name\":\"simple_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"simple_revise(revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]},\"tagging\":{\"name\":\"tagging\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"tagging(text, schema, tag): str\",\"aggregations\":[]},\"to_dict\":{\"name\":\"to_dict\",\"args\":[{\"name\":\"format_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format_func\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"to_dict(format_func, mode, exclude): Dict\",\"aggregations\":[]},\"update_instruct_content\":{\"name\":\"update_instruct_content\",\"args\":[{\"name\":\"incre_data\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"incre_data: dict[str, Any]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_instruct_content(incre_data: dict[str, Any])\",\"aggregations\":[]}},\"compositions\":[\"ActionNode\",\"Type\",\"BaseModel\"],\"aggregations\":[\"ReviseMode\",\"ReviewMode\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:children"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:content"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:context"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:example"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:expected_type"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:instruct_content"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:instruction"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:key"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:llm"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:schema"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:add_child"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:add_children"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:auto_review"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:auto_revise"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:compile"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:compile_example"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:compile_instruction"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:compile_to"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:create_children_class"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:create_class"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:create_model_class"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:fill"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:from_children"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:from_pydantic"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:get"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:get_child"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:get_children_mapping"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:get_children_mapping_old"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:get_mapping"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:get_self_mapping"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:human_review"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:human_revise"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:keys"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:review"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:revise"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:set_context"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:set_llm"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:set_recursive"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:simple_fill"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:simple_review"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:simple_revise"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:tagging"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:to_dict"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:update_instruct_content"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:Type"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:BaseModel"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:ReviseMode"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:ReviewMode"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action.py:Action"}, {"predicate": "isCompositeOn", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action.py:Action:node"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:__init__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:__str__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:__repr__"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_compile_f"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_aask_v1"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_req"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_node.py:ActionNode", "target": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_comment"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:ActionNode", "target": "{\"lineno\":122,\"end_lineno\":666,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionNode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_node.py:ActionNode", "target": "{\"name\":\"ActionNode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"children\",\"visibility\":\"+\",\"value_type\":\"dict[str,ActionNode]\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"example\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"expected_type\",\"visibility\":\"+\",\"value_type\":\"Type\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"BaseModel\",\"default_value\":\"\"},{\"name\":\"instruction\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"schema\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ActionNode", "target": "?:ActionNode"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:children", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:children", "target": "{\"name\":\"children\",\"type_\":\"dict[str,ActionNode]\",\"default_\":\"\",\"description\":\"children : dict[str, 'ActionNode']\",\"compositions\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:context", "target": "{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:example", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:example", "target": "{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:expected_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:expected_type", "target": "{\"name\":\"expected_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"expected_type : Type\",\"compositions\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:instruct_content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:instruct_content", "target": "{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:instruction", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:instruction", "target": "{\"name\":\"instruction\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"instruction : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:key", "target": "{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:schema", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:schema", "target": "{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:add_child", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:add_child", "target": "{\"name\":\"add_child\",\"args\":[{\"name\":\"node\",\"type_\":\"ActionNode\",\"default_\":\"\",\"description\":\"node: 'ActionNode'\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_child(node: 'ActionNode')\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:add_children", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:add_children", "target": "{\"name\":\"add_children\",\"args\":[{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_children(nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:auto_review", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:auto_review", "target": "{\"name\":\"auto_review\",\"args\":[{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_review(template: str): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:auto_revise", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:auto_revise", "target": "{\"name\":\"auto_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]},{\"name\":\"template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"auto_revise(revise_mode: ReviseMode, template: str): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:compile", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:compile", "target": "{\"name\":\"compile\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"template\",\"type_\":\"\",\"default_\":\"\",\"description\":\"template\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile(context, schema, mode, template, exclude): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:compile_example", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:compile_example", "target": "{\"name\":\"compile_example\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_example(schema, mode, tag, exclude): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:compile_instruction", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:compile_instruction", "target": "{\"name\":\"compile_instruction\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_instruction(schema, mode, tag, exclude): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:compile_to", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:compile_to", "target": "{\"name\":\"compile_to\",\"args\":[{\"name\":\"i\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"i: Dict\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"kv_sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kv_sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"compile_to(i: Dict, schema, kv_sep): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:create_children_class", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:create_children_class", "target": "{\"name\":\"create_children_class\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_children_class(exclude)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:create_class", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:create_class", "target": "{\"name\":\"create_class\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]},{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_class(mode: str, class_name: str, exclude)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:create_model_class", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:create_model_class", "target": "{\"name\":\"create_model_class\",\"args\":[{\"name\":\"class_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"class_name: str\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"default_\":\"\",\"description\":\"mapping: Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_model_class(class_name: str, mapping: Dict[str, Tuple[Type, Any]])\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:fill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:fill", "target": "{\"name\":\"fill\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"strgy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strgy\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"fill(context, llm, schema, mode, strgy, timeout, exclude)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:from_children", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:from_children", "target": "{\"name\":\"from_children\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"nodes\",\"type_\":\"List[ActionNode]\",\"default_\":\"\",\"description\":\"nodes: List['ActionNode']\",\"compositions\":[\"ActionNode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_children(key, nodes: List['ActionNode'])\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:from_pydantic", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:from_pydantic", "target": "{\"name\":\"from_pydantic\",\"args\":[{\"name\":\"model\",\"type_\":\"Type[BaseModel]\",\"default_\":\"\",\"description\":\"model: Type[BaseModel]\",\"compositions\":[\"BaseModel\",\"Type\"]},{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_pydantic(model: Type[BaseModel], key: str)\",\"aggregations\":[\"BaseModel\",\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:get_child", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:get_child", "target": "{\"name\":\"get_child\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union['ActionNode',None]\",\"description\":\"Union['ActionNode', None]\",\"compositions\":[\"ActionNode\"]},\"description\":\"get_child(key: str): Union['ActionNode', None]\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:get_children_mapping", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:get_children_mapping", "target": "{\"name\":\"get_children_mapping\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_children_mapping(exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:get_children_mapping_old", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:get_children_mapping_old", "target": "{\"name\":\"get_children_mapping_old\",\"args\":[{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_children_mapping_old(exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:get_mapping", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:get_mapping", "target": "{\"name\":\"get_mapping\",\"args\":[{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_mapping(mode, exclude): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:get_self_mapping", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:get_self_mapping", "target": "{\"name\":\"get_self_mapping\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,Tuple[Type,Any]]\",\"description\":\"Dict[str, Tuple[Type, Any]]\",\"compositions\":[\"Type\"]},\"description\":\"get_self_mapping(): Dict[str, Tuple[Type, Any]]\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:human_review", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:human_review", "target": "{\"name\":\"human_review\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_review(): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:human_revise", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:human_revise", "target": "{\"name\":\"human_revise\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"human_revise(): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:keys", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:keys", "target": "{\"name\":\"keys\",\"args\":[{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"keys(mode: str): list\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:review", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:review", "target": "{\"name\":\"review\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"review(strgy: str, review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:revise", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:revise", "target": "{\"name\":\"revise\",\"args\":[{\"name\":\"strgy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"strgy: str\",\"compositions\":[]},{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"revise(strgy: str, revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:set_context", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:set_context", "target": "{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:set_llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:set_llm", "target": "{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:set_recursive", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:set_recursive", "target": "{\"name\":\"set_recursive\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_recursive(name, value)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:simple_fill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:simple_fill", "target": "{\"name\":\"simple_fill\",\"args\":[{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_fill(schema, mode, timeout, exclude)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:simple_review", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:simple_review", "target": "{\"name\":\"simple_review\",\"args\":[{\"name\":\"review_mode\",\"type_\":\"ReviewMode\",\"default_\":\"\",\"description\":\"review_mode: ReviewMode\",\"compositions\":[\"ReviewMode\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"simple_review(review_mode: ReviewMode)\",\"aggregations\":[\"ReviewMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:simple_revise", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:simple_revise", "target": "{\"name\":\"simple_revise\",\"args\":[{\"name\":\"revise_mode\",\"type_\":\"ReviseMode\",\"default_\":\"\",\"description\":\"revise_mode: ReviseMode\",\"compositions\":[\"ReviseMode\"]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"simple_revise(revise_mode: ReviseMode): dict[str, str]\",\"aggregations\":[\"ReviseMode\"]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:tagging", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:tagging", "target": "{\"name\":\"tagging\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"schema\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"tagging(text, schema, tag): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:to_dict", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:to_dict", "target": "{\"name\":\"to_dict\",\"args\":[{\"name\":\"format_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format_func\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]},{\"name\":\"exclude\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exclude\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"to_dict(format_func, mode, exclude): Dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:update_instruct_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ActionNode:update_instruct_content", "target": "{\"name\":\"update_instruct_content\",\"args\":[{\"name\":\"incre_data\",\"type_\":\"dict[str,Any]\",\"default_\":\"\",\"description\":\"incre_data: dict[str, Any]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_instruct_content(incre_data: dict[str, Any])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_output.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/action_output.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/action_output.py", "target": "metagpt/actions/action_output.py:ActionOutput"}, {"predicate": "is", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "{\"name\":\"ActionOutput\",\"package\":\"metagpt/actions/action_output.py:ActionOutput\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}},\"methods\":{},\"compositions\":[\"BaseModel\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "metagpt/actions/action_output.py:ActionOutput:content"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "metagpt/actions/action_output.py:ActionOutput:instruct_content"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "?:BaseModel"}, {"predicate": "has_class_method", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "metagpt/actions/action_output.py:ActionOutput:__init__"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "{\"lineno\":12,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionOutput\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_output.py:ActionOutput", "target": "{\"name\":\"ActionOutput\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"BaseModel\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_output.py:ActionOutput:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_output.py:ActionOutput:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_output.py:ActionOutput:instruct_content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_output.py:ActionOutput:instruct_content", "target": "{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content : BaseModel\",\"compositions\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/actions", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions", "target": ""}, {"predicate": "has_class", "source": "metagpt/actions", "target": "metagpt/actions:ActionType"}, {"predicate": "is", "source": "metagpt/actions:ActionType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions:ActionType", "target": "{\"name\":\"ActionType\",\"package\":\"metagpt/actions:ActionType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions:ActionType", "target": "metagpt/actions:ActionType:name"}, {"predicate": "has_class_view", "source": "metagpt/actions:ActionType", "target": "{\"name\":\"ActionType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions:ActionType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions:ActionType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "{\"name\":\"ApiType\",\"package\":\"metagpt/provider/general_api_base.py:ApiType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"from_str\":{\"name\":\"from_str\",\"args\":[{\"name\":\"label\",\"type_\":\"\",\"default_\":\"\",\"description\":\"label\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_str(label)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "metagpt/provider/general_api_base.py:ApiType:name"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "metagpt/provider/general_api_base.py:ApiType:from_str"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "{\"lineno\":52,\"end_lineno\":68,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ApiType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/general_api_base.py:ApiType", "target": "{\"name\":\"ApiType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:ApiType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:ApiType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:ApiType:from_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:ApiType:from_str", "target": "{\"name\":\"from_str\",\"args\":[{\"name\":\"label\",\"type_\":\"\",\"default_\":\"\",\"description\":\"label\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_str(label)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/architect.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/architect.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/architect.py", "target": "metagpt/roles/architect.py:Architect"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect", "target": "{\"name\":\"Architect\",\"package\":\"metagpt/roles/architect.py:Architect\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:profile"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/architect.py:Architect", "target": "metagpt/roles/architect.py:Architect:__init__"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:Architect", "target": "{\"lineno\":14,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Architect\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/architect.py:Architect", "target": "{\"name\":\"Architect\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/roles/architect.py:Architect", "target": "{\"description\":\"The source code defines an Architect role in a software development process with attributes such as name, profile, goal, and constraints. It also initializes specific actions and events for the Architect role.\",\"use_cases\":[],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/roles/architect.py:Architect", "target": "\nsequenceDiagram\n participant SourceCode\n participant Architect\n\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/architect.py:Architect:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/skill_action.py", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction"}, {"predicate": "has_class", "source": "metagpt/actions/skill_action.py", "target": "metagpt/actions/skill_action.py:SkillAction"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "{\"name\":\"ArgumentsParingAction\",\"package\":\"metagpt/actions/skill_action.py:ArgumentsParingAction\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"Optional[Dict]\",\"default_\":\"\",\"description\":\"args : Optional[Dict]\",\"compositions\":[]},\"ask\":{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]},\"prompt\":{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]},\"skill\":{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}},\"methods\":{\"parse_arguments\":{\"name\":\"parse_arguments\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill_name\",\"compositions\":[]},{\"name\":\"txt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"txt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"parse_arguments(skill_name, txt): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:args"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:ask"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:parse_arguments"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "{\"lineno\":24,\"end_lineno\":79,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ArgumentsParingAction\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "{\"name\":\"ArgumentsParingAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict]\",\"default_value\":\"\"},{\"name\":\"ask\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prompt\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"skill\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:args", "target": "{\"name\":\"args\",\"type_\":\"Optional[Dict]\",\"default_\":\"\",\"description\":\"args : Optional[Dict]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:ask", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:ask", "target": "{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt", "target": "{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:prompt", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp", "target": "{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill", "target": "{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:parse_arguments", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:parse_arguments", "target": "{\"name\":\"parse_arguments\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill_name\",\"compositions\":[]},{\"name\":\"txt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"txt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"parse_arguments(skill_name, txt): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:ArgumentsParingAction:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/assistant.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/assistant.py", "target": "metagpt/roles/assistant.py:Assistant"}, {"predicate": "has_class", "source": "metagpt/roles/assistant.py", "target": "metagpt/roles/assistant.py:MessageType"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant", "target": "{\"name\":\"Assistant\",\"package\":\"metagpt/roles/assistant.py:Assistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"Optional[SkillsDeclaration]\",\"default_\":\"\",\"description\":\"skills : Optional[SkillsDeclaration]\",\"compositions\":[\"SkillsDeclaration\"]}},\"methods\":{\"act\":{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"act(): Message\",\"aggregations\":[\"Message\"]},\"get_memory\":{\"name\":\"get_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_memory(): str\",\"aggregations\":[]},\"load_memory\":{\"name\":\"load_memory\",\"args\":[{\"name\":\"m\",\"type_\":\"\",\"default_\":\"\",\"description\":\"m\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_memory(m)\",\"aggregations\":[]},\"refine_memory\":{\"name\":\"refine_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"refine_memory(): str\",\"aggregations\":[]},\"skill_handler\":{\"name\":\"skill_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"skill_handler(text): bool\",\"aggregations\":[]},\"talk\":{\"name\":\"talk\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"talk(text)\",\"aggregations\":[]},\"talk_handler\":{\"name\":\"talk_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"talk_handler(text): bool\",\"aggregations\":[]},\"think\":{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"think(): bool\",\"aggregations\":[]}},\"compositions\":[\"SkillsDeclaration\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:desc"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:memory"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:skills"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:act"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:get_memory"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:load_memory"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:refine_memory"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:skill_handler"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:talk"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:talk_handler"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:think"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/assistant.py:Assistant", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/role.py:Role"}, {"predicate": "is_composite_of", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/assistant.py:Assistant", "target": "metagpt/roles/assistant.py:Assistant:_plan"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:Assistant", "target": "{\"lineno\":37,\"end_lineno\":139,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Assistant\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/assistant.py:Assistant", "target": "{\"name\":\"Assistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"Optional[SkillsDeclaration]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/assistant.py:Assistant", "target": "?:SkillsDeclaration"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:memory", "target": "{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:skills", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:skills", "target": "{\"name\":\"skills\",\"type_\":\"Optional[SkillsDeclaration]\",\"default_\":\"\",\"description\":\"skills : Optional[SkillsDeclaration]\",\"compositions\":[\"SkillsDeclaration\"]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:act", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:act", "target": "{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"act(): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:get_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:get_memory", "target": "{\"name\":\"get_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_memory(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:load_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:load_memory", "target": "{\"name\":\"load_memory\",\"args\":[{\"name\":\"m\",\"type_\":\"\",\"default_\":\"\",\"description\":\"m\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_memory(m)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:refine_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:refine_memory", "target": "{\"name\":\"refine_memory\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"refine_memory(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:skill_handler", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:skill_handler", "target": "{\"name\":\"skill_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"skill_handler(text): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:talk", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:talk", "target": "{\"name\":\"talk\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"talk(text)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:talk_handler", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:talk_handler", "target": "{\"name\":\"talk_handler\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"talk_handler(text): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:think", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:Assistant:think", "target": "{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"think(): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/zhipuai/async_sse_client.py", "target": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "{\"name\":\"AsyncSSEClient\",\"package\":\"metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient\",\"attributes\":{},\"methods\":{\"stream\":{\"name\":\"stream\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"stream(): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:stream"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "{\"lineno\":10,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AsyncSSEClient\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient", "target": "{\"name\":\"AsyncSSEClient\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:stream", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:stream", "target": "{\"name\":\"stream\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"stream(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/context.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/context.py", "target": "metagpt/context.py:AttrDict"}, {"predicate": "has_class", "source": "metagpt/context.py", "target": "metagpt/context.py:Context"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict", "target": "{\"name\":\"AttrDict\",\"package\":\"metagpt/context.py:AttrDict\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"default\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"default: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key, default: Any)\",\"aggregations\":[]},\"remove\":{\"name\":\"remove\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove(key)\",\"aggregations\":[]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"val\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"val: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key, val: Any)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:model_config"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:get"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:remove"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:set"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:Context:kwargs"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:__init__"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:__getattr__"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:__setattr__"}, {"predicate": "has_class_method", "source": "metagpt/context.py:AttrDict", "target": "metagpt/context.py:AttrDict:__delattr__"}, {"predicate": "has_page_info", "source": "metagpt/context.py:AttrDict", "target": "{\"lineno\":23,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AttrDict\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/context.py:AttrDict", "target": "{\"name\":\"AttrDict\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"default\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"default: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(key, default: Any)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:remove", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict:remove", "target": "{\"name\":\"remove\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove(key)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:set", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:AttrDict:set", "target": "{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"val\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"val: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key, val: Any)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:AudioData"}, {"predicate": "has_class", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS"}, {"predicate": "has_class", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse"}, {"predicate": "has_class", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus"}, {"predicate": "has_function", "source": "metagpt/tools/iflytek_tts.py", "target": "metagpt/tools/iflytek_tts.py:oas3_iflytek_tts"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "{\"name\":\"AudioData\",\"package\":\"metagpt/tools/iflytek_tts.py:AudioData\",\"attributes\":{\"audio\":{\"name\":\"audio\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"audio : str\",\"compositions\":[]},\"ced\":{\"name\":\"ced\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ced : str\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"status : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "metagpt/tools/iflytek_tts.py:AudioData:audio"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "metagpt/tools/iflytek_tts.py:AudioData:ced"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "metagpt/tools/iflytek_tts.py:AudioData:status"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "{\"lineno\":35,\"end_lineno\":38,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AudioData\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/iflytek_tts.py:AudioData", "target": "{\"name\":\"AudioData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"audio\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ced\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:AudioData:audio", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:AudioData:audio", "target": "{\"name\":\"audio\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"audio : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:AudioData:ced", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:AudioData:ced", "target": "{\"name\":\"ced\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ced : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:AudioData:status", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:AudioData:status", "target": "{\"name\":\"status\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"status : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/azure_openai_api.py", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "{\"name\":\"AzureOpenAILLM\",\"package\":\"metagpt/provider/azure_openai_api.py:AzureOpenAILLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"AsyncAzureOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncAzureOpenAI\",\"compositions\":[\"AsyncAzureOpenAI\"]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"AsyncAzureOpenAI\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:aclient"}, {"predicate": "has_class_property", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:model"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "?:AsyncAzureOpenAI"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_init_client"}, {"predicate": "has_class_method", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_make_client_kwargs"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "{\"lineno\":20,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AzureOpenAILLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM", "target": "{\"name\":\"AzureOpenAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"AsyncAzureOpenAI\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:aclient", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:aclient", "target": "{\"name\":\"aclient\",\"type_\":\"AsyncAzureOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncAzureOpenAI\",\"compositions\":[\"AsyncAzureOpenAI\"]}"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:model", "target": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/azure_tts.py", "target": "metagpt/tools/azure_tts.py:AzureTTS"}, {"predicate": "has_function", "source": "metagpt/tools/azure_tts.py", "target": "metagpt/tools/azure_tts.py:oas3_azsure_tts"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "{\"name\":\"AzureTTS\",\"package\":\"metagpt/tools/azure_tts.py:AzureTTS\",\"attributes\":{\"region\":{\"name\":\"region\",\"type_\":\"\",\"default_\":\"\",\"description\":\"region\",\"compositions\":[]},\"subscription_key\":{\"name\":\"subscription_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subscription_key\",\"compositions\":[]}},\"methods\":{\"role_style_text\":{\"name\":\"role_style_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_style_text(role, style, text)\",\"aggregations\":[]},\"role_text\":{\"name\":\"role_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_text(role, text)\",\"aggregations\":[]},\"style_text\":{\"name\":\"style_text\",\"args\":[{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"style_text(style, text)\",\"aggregations\":[]},\"synthesize_speech\":{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_file\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(lang, voice, text, output_file)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:region"}, {"predicate": "has_class_property", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:subscription_key"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:role_style_text"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:role_text"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:style_text"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:synthesize_speech"}, {"predicate": "has_class_method", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "metagpt/tools/azure_tts.py:AzureTTS:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "{\"lineno\":19,\"end_lineno\":56,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"AzureTTS\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/azure_tts.py:AzureTTS", "target": "{\"name\":\"AzureTTS\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"region\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"subscription_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:region", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:region", "target": "{\"name\":\"region\",\"type_\":\"\",\"default_\":\"\",\"description\":\"region\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:subscription_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:subscription_key", "target": "{\"name\":\"subscription_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subscription_key\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:role_style_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:role_style_text", "target": "{\"name\":\"role_style_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_style_text(role, style, text)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:role_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:role_text", "target": "{\"name\":\"role_text\",\"args\":[{\"name\":\"role\",\"type_\":\"\",\"default_\":\"\",\"description\":\"role\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"role_text(role, text)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:style_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:style_text", "target": "{\"name\":\"style_text\",\"args\":[{\"name\":\"style\",\"type_\":\"\",\"default_\":\"\",\"description\":\"style\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"style_text(style, text)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:synthesize_speech", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/azure_tts.py:AzureTTS:synthesize_speech", "target": "{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_file\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(lang, voice, text, output_file)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/prompt_writer.py", "target": "metagpt/tools/prompt_writer.py:BEAGECTemplate"}, {"predicate": "has_class", "source": "metagpt/tools/prompt_writer.py", "target": "metagpt/tools/prompt_writer.py:EnronTemplate"}, {"predicate": "has_class", "source": "metagpt/tools/prompt_writer.py", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator"}, {"predicate": "has_class", "source": "metagpt/tools/prompt_writer.py", "target": "metagpt/tools/prompt_writer.py:WikiHowTemplate"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "{\"name\":\"BEAGECTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:BEAGECTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "metagpt/tools/prompt_writer.py:BEAGECTemplate:gen"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "metagpt/tools/prompt_writer.py:BEAGECTemplate:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "{\"lineno\":95,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BEAGECTemplate\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate", "target": "{\"name\":\"BEAGECTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate:gen", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate:gen", "target": "{\"name\":\"gen\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/tot.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:BFSSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:TreeofThought:Config"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:DFSSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:MCTSSolver"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "has_class", "source": "metagpt/strategy/tot.py", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "{\"name\":\"BFSSolver\",\"package\":\"metagpt/strategy/tot.py:BFSSolver\",\"attributes\":{\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}},\"methods\":{\"generate_and_evaluate_nodes\":{\"name\":\"generate_and_evaluate_nodes\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_value\",\"compositions\":[]},{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_and_evaluate_nodes(current_state, current_value, node)\",\"aggregations\":[]},\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:BFSSolver:thought_tree"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:BFSSolver:generate_and_evaluate_nodes"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:BFSSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "metagpt/strategy/tot.py:BFSSolver:_bfs_build"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "{\"lineno\":126,\"end_lineno\":177,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BFSSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:BFSSolver", "target": "{\"name\":\"BFSSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver:thought_tree", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:BFSSolver:thought_tree", "target": "{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver:generate_and_evaluate_nodes", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:BFSSolver:generate_and_evaluate_nodes", "target": "{\"name\":\"generate_and_evaluate_nodes\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_value\",\"compositions\":[]},{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_and_evaluate_nodes(current_state, current_value, node)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:BFSSolver:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:BaseContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:BaseContext", "target": "{\"name\":\"BaseContext\",\"package\":\"metagpt/schema.py:BaseContext\",\"attributes\":{},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[T]\",\"description\":\"Optional[T]\",\"compositions\":[\"T\"]},\"description\":\"loads(val: str): Optional[T]\",\"aggregations\":[\"T\"]}},\"compositions\":[],\"aggregations\":[\"T\"]}"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:BaseContext", "target": "metagpt/schema.py:BaseContext:loads"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:BaseContext", "target": "?:T"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:BaseContext", "target": "{\"lineno\":410,\"end_lineno\":415,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:BaseContext", "target": "{\"name\":\"BaseContext\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:BaseContext:loads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:BaseContext:loads", "target": "{\"name\":\"loads\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[T]\",\"description\":\"Optional[T]\",\"compositions\":[\"T\"]},\"description\":\"loads(val: str): Optional[T]\",\"aggregations\":[\"T\"]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/base.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/strategy/base.py", "target": "metagpt/strategy/base.py:BaseEvaluator"}, {"predicate": "has_class", "source": "metagpt/strategy/base.py", "target": "metagpt/strategy/base.py:BaseParser"}, {"predicate": "has_class", "source": "metagpt/strategy/base.py", "target": "metagpt/strategy/base.py:ThoughtNode"}, {"predicate": "has_class", "source": "metagpt/strategy/base.py", "target": "metagpt/strategy/base.py:ThoughtTree"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "{\"name\":\"BaseEvaluator\",\"package\":\"metagpt/strategy/base.py:BaseEvaluator\",\"attributes\":{},\"methods\":{\"status_verify\":{\"name\":\"status_verify\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"status_verify()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "metagpt/strategy/base.py:BaseEvaluator:status_verify"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "metagpt/strategy/base.py:BaseEvaluator:__call__"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseEvaluator\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/base.py:BaseEvaluator", "target": "{\"name\":\"BaseEvaluator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseEvaluator:status_verify", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseEvaluator:status_verify", "target": "{\"name\":\"status_verify\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"status_verify()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/base_llm.py", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "{\"name\":\"BaseLLM\",\"package\":\"metagpt/provider/base_llm.py:BaseLLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"Optional[Union[AsyncOpenAI]]\",\"default_\":\"\",\"description\":\"aclient : Optional[Union[AsyncOpenAI]]\",\"compositions\":[\"AsyncOpenAI\"]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"model\":{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]},\"system_prompt\":{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], timeout, stream): str\",\"aggregations\":[]},\"aask_batch\":{\"name\":\"aask_batch\",\"args\":[{\"name\":\"msgs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"msgs: list\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask_batch(msgs: list, timeout): str\",\"aggregations\":[]},\"aask_code\":{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]], timeout): dict\",\"aggregations\":[\"Message\"]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"get_choice_delta_text\":{\"name\":\"get_choice_delta_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_delta_text(rsp: dict): str\",\"aggregations\":[]},\"get_choice_function\":{\"name\":\"get_choice_function\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function(rsp: dict): dict\",\"aggregations\":[]},\"get_choice_function_arguments\":{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: dict): dict\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}},\"compositions\":[\"AsyncOpenAI\",\"CostManager\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:aclient"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:system_prompt"}, {"predicate": "has_class_property", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:use_system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:aask"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:aask_batch"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:aask_code"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:get_choice_delta_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function_arguments"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:get_choice_text"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "?:AsyncOpenAI"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "?:Message"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/actions/action_node.py:ActionNode"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/actions/action_node.py:ActionNode:llm"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:llm"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/context_mixin.py:ContextMixin"}, {"predicate": "isAggregateOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/context_mixin.py:ContextMixin:private_llm"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/tools/moderation.py:Moderation"}, {"predicate": "isAggregateOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/tools/moderation.py:Moderation:llm"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image"}, {"predicate": "isAggregateOn", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm"}, {"predicate": "is_composite_of", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_user_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_assistant_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_system_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_system_msgs"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_default_system_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "metagpt/provider/base_llm.py:BaseLLM:_extract_assistant_rsp"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "{\"lineno\":21,\"end_lineno\":151,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "{\"name\":\"BaseLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[AsyncOpenAI]]\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"system_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "?:CostManager"}, {"predicate": "has_class_use_case", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "{\"description\":\"The source code is an abstract class that provides a series of standard capabilities for an AI assistant. It includes methods for sending and receiving messages, as well as methods for asynchronous completion and choice selection.\",\"use_cases\":[{\"description\":\"Send a message to the AI assistant and receive a response.\",\"inputs\":[\"msg\",\"system_msgs\",\"format_msgs\",\"timeout\",\"stream\"],\"outputs\":[\"rsp\"],\"actors\":[\"Message\",\"AsyncOpenAI\"],\"steps\":[\"Check if system messages are provided, if not, use the default system prompt\",\"Format the messages to be sent to the AI assistant, including user messages and system messages\",\"Send the formatted messages to the AI assistant and await a response\",\"Return the response from the AI assistant\"],\"reason\":\"When an external system needs to interact with the AI assistant by sending a message and receiving a response.\"},{\"description\":\"Send a batch of messages to the AI assistant and receive a concatenated response.\",\"inputs\":[\"msgs\",\"timeout\"],\"outputs\":[\"rsp_text\"],\"actors\":[\"Message\",\"AsyncOpenAI\"],\"steps\":[\"Iterate through the list of messages to be sent to the AI assistant\",\"Send each message to the AI assistant and await a response\",\"Concatenate the responses from the AI assistant\",\"Return the concatenated response\"],\"reason\":\"When an external system needs to sequentially send multiple messages to the AI assistant and receive a combined response.\"},{\"description\":\"Send a code-related message to the AI assistant and receive a response.\",\"inputs\":[\"messages\",\"timeout\"],\"outputs\":[\"rsp\"],\"actors\":[\"Message\",\"AsyncOpenAI\"],\"steps\":[\"Raise a NotImplementedError as this method is not implemented in the abstract class\"],\"reason\":\"N/A\"}],\"relationship\":[\"The 'Send a message to the AI assistant and receive a response' use case involves the 'Send a batch of messages to the AI assistant and receive a concatenated response' use case, as it utilizes the method for sending a single message to the AI assistant.\",\"The 'Send a message to the AI assistant and receive a response' use case involves the 'Send a code-related message to the AI assistant and receive a response' use case, as it utilizes the method for sending a single message to the AI assistant.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/provider/base_llm.py:BaseLLM", "target": "\nsequenceDiagram\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:aclient", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:aclient", "target": "{\"name\":\"aclient\",\"type_\":\"Optional[Union[AsyncOpenAI]]\",\"default_\":\"\",\"description\":\"aclient : Optional[Union[AsyncOpenAI]]\",\"compositions\":[\"AsyncOpenAI\"]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:model", "target": "{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:system_prompt", "target": "{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:use_system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:use_system_prompt", "target": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:aask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:aask", "target": "{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], timeout, stream): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:aask_batch", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:aask_batch", "target": "{\"name\":\"aask_batch\",\"args\":[{\"name\":\"msgs\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"msgs: list\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask_batch(msgs: list, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:aask_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:aask_code", "target": "{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]], timeout): dict\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_delta_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_delta_text", "target": "{\"name\":\"get_choice_delta_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_delta_text(rsp: dict): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function", "target": "{\"name\":\"get_choice_function\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function(rsp: dict): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function_arguments", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_function_arguments", "target": "{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: dict): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/base_llm.py:BaseLLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseParser", "target": "{\"name\":\"BaseParser\",\"package\":\"metagpt/strategy/base.py:BaseParser\",\"attributes\":{},\"methods\":{\"propose\":{\"name\":\"propose\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"propose(current_state: str): str\",\"aggregations\":[]},\"sample\":{\"name\":\"sample\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"sample(current_state: str): str\",\"aggregations\":[]},\"value\":{\"name\":\"value\",\"args\":[{\"name\":\"input\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"value(input: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/base.py:BaseParser:propose"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/base.py:BaseParser:sample"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/base.py:BaseParser:value"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:BaseParser", "target": "metagpt/strategy/base.py:BaseParser:__call__"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:BaseParser", "target": "{\"lineno\":12,\"end_lineno\":23,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/base.py:BaseParser", "target": "{\"name\":\"BaseParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser:propose", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseParser:propose", "target": "{\"name\":\"propose\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"propose(current_state: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser:sample", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseParser:sample", "target": "{\"name\":\"sample\",\"args\":[{\"name\":\"current_state\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"current_state: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"sample(current_state: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser:value", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:BaseParser:value", "target": "{\"name\":\"value\",\"args\":[{\"name\":\"input\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"value(input: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "{\"name\":\"BasePostProcessPlugin\",\"package\":\"metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin\",\"attributes\":{\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]},\"run_extract_content_from_output\":{\"name\":\"run_extract_content_from_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"right_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"right_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_extract_content_from_output(content: str, right_key: str): str\",\"aggregations\":[]},\"run_repair_llm_output\":{\"name\":\"run_repair_llm_output\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_repair_llm_output(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]},\"run_repair_llm_raw_output\":{\"name\":\"run_repair_llm_raw_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"req_keys\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"req_keys: list[str]\",\"compositions\":[]},{\"name\":\"repair_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"repair_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_repair_llm_raw_output(content: str, req_keys: list[str], repair_type: str): str\",\"aggregations\":[]},\"run_retry_parse_json_text\":{\"name\":\"run_retry_parse_json_text\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_retry_parse_json_text(content: str): Union[dict, list]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:model"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_extract_content_from_output"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_output"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_raw_output"}, {"predicate": "has_class_method", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_retry_parse_json_text"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "{\"lineno\":15,\"end_lineno\":69,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BasePostProcessPlugin\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin", "target": "{\"name\":\"BasePostProcessPlugin\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:model", "target": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_extract_content_from_output", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_extract_content_from_output", "target": "{\"name\":\"run_extract_content_from_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"right_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"right_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_extract_content_from_output(content: str, right_key: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_output", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_output", "target": "{\"name\":\"run_repair_llm_output\",\"args\":[{\"name\":\"output\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output: str\",\"compositions\":[]},{\"name\":\"schema\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"schema: dict\",\"compositions\":[]},{\"name\":\"req_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"req_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_repair_llm_output(output: str, schema: dict, req_key: str): Union[dict, list]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_raw_output", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_repair_llm_raw_output", "target": "{\"name\":\"run_repair_llm_raw_output\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"req_keys\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"req_keys: list[str]\",\"compositions\":[]},{\"name\":\"repair_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"repair_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run_repair_llm_raw_output(content: str, req_keys: list[str], repair_type: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_retry_parse_json_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:BasePostProcessPlugin:run_retry_parse_json_text", "target": "{\"name\":\"run_retry_parse_json_text\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[dict,list]\",\"description\":\"Union[dict, list]\",\"compositions\":[]},\"description\":\"run_retry_parse_json_text(content: str): Union[dict, list]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/base_store.py", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_class", "source": "metagpt/document_store/base_store.py", "target": "metagpt/document_store/base_store.py:LocalStore"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "{\"name\":\"BaseStore\",\"package\":\"metagpt/document_store/base_store.py:BaseStore\",\"attributes\":{},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search()\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "metagpt/document_store/base_store.py:BaseStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "metagpt/document_store/base_store.py:BaseStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "metagpt/document_store/base_store.py:BaseStore:write"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "{\"lineno\":12,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BaseStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/base_store.py:BaseStore", "target": "{\"name\":\"BaseStore\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:BaseStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:BaseStore:add", "target": "{\"name\":\"add\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:BaseStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:BaseStore:search", "target": "{\"name\":\"search\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:BaseStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:BaseStore:write", "target": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/memory/brain_memory.py", "target": "metagpt/memory/brain_memory.py:BrainMemory"}, {"predicate": "has_class", "source": "metagpt/memory/brain_memory.py", "target": "metagpt/memory/brain_memory.py:BrainMemory:Config"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "{\"name\":\"BrainMemory\",\"package\":\"metagpt/memory/brain_memory.py:BrainMemory\",\"attributes\":{\"cacheable\":{\"name\":\"cacheable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"cacheable : bool\",\"compositions\":[]},\"historical_summary\":{\"name\":\"historical_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"historical_summary : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"history : List[Message]\",\"compositions\":[\"Message\"]},\"history_text\":{\"name\":\"history_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_text\",\"compositions\":[]},\"is_dirty\":{\"name\":\"is_dirty\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_dirty : bool\",\"compositions\":[]},\"is_history_available\":{\"name\":\"is_history_available\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_history_available\",\"compositions\":[]},\"knowledge\":{\"name\":\"knowledge\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"knowledge : List[Message]\",\"compositions\":[\"Message\"]},\"last_history_id\":{\"name\":\"last_history_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"last_history_id : str\",\"compositions\":[]},\"last_talk\":{\"name\":\"last_talk\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"last_talk : Optional[str]\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}},\"methods\":{\"add_answer\":{\"name\":\"add_answer\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_answer(msg: Message)\",\"aggregations\":[\"Message\"]},\"add_history\":{\"name\":\"add_history\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_history(msg: Message)\",\"aggregations\":[\"Message\"]},\"add_talk\":{\"name\":\"add_talk\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_talk(msg: Message)\",\"aggregations\":[\"Message\"]},\"dumps\":{\"name\":\"dumps\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"dumps(redis_key: str, timeout_sec: int)\",\"aggregations\":[]},\"exists\":{\"name\":\"exists\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"exists(text): bool\",\"aggregations\":[]},\"extract_info\":{\"name\":\"extract_info\",\"args\":[{\"name\":\"input_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"input_string\",\"compositions\":[]},{\"name\":\"pattern\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pattern\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_info(input_string, pattern)\",\"aggregations\":[]},\"get_knowledge\":{\"name\":\"get_knowledge\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_knowledge(): str\",\"aggregations\":[]},\"get_title\":{\"name\":\"get_title\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_title(llm, max_words): str\",\"aggregations\":[]},\"is_related\":{\"name\":\"is_related\",\"args\":[{\"name\":\"text1\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text1\",\"compositions\":[]},{\"name\":\"text2\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text2\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_related(text1, text2, llm)\",\"aggregations\":[]},\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'BrainMemory'\",\"description\":\"'BrainMemory'\",\"compositions\":[\"BrainMemory\"]},\"description\":\"loads(redis_key: str): 'BrainMemory'\",\"aggregations\":[\"BrainMemory\"]},\"pop_last_talk\":{\"name\":\"pop_last_talk\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pop_last_talk()\",\"aggregations\":[]},\"rewrite\":{\"name\":\"rewrite\",\"args\":[{\"name\":\"sentence\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sentence: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rewrite(sentence: str, context: str, llm)\",\"aggregations\":[]},\"set_history_summary\":{\"name\":\"set_history_summary\",\"args\":[{\"name\":\"history_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_summary\",\"compositions\":[]},{\"name\":\"redis_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"redis_key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_history_summary(history_summary, redis_key)\",\"aggregations\":[]},\"split_texts\":{\"name\":\"split_texts\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"window_size\",\"type_\":\"\",\"default_\":\"\",\"description\":\"window_size\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"split_texts(text: str, window_size): List[str]\",\"aggregations\":[]},\"summarize\":{\"name\":\"summarize\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]},{\"name\":\"keep_language\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"keep_language: bool\",\"compositions\":[]},{\"name\":\"limit\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"limit: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize(llm, max_words, keep_language: bool, limit: int)\",\"aggregations\":[]},\"to_int\":{\"name\":\"to_int\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"default_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"default_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_int(v, default_value)\",\"aggregations\":[]},\"to_metagpt_history_format\":{\"name\":\"to_metagpt_history_format\",\"args\":[{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"to_metagpt_history_format(history): str\",\"aggregations\":[]},\"to_redis_key\":{\"name\":\"to_redis_key\",\"args\":[{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix: str\",\"compositions\":[]},{\"name\":\"user_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"user_id: str\",\"compositions\":[]},{\"name\":\"chat_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chat_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_redis_key(prefix: str, user_id: str, chat_id: str)\",\"aggregations\":[]}},\"compositions\":[\"Message\",\"BaseLLM\"],\"aggregations\":[\"BrainMemory\"]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:cacheable"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:historical_summary"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:history"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:history_text"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:is_dirty"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:knowledge"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:last_history_id"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:last_talk"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:llm"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:add_answer"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:add_history"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:add_talk"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:dumps"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:exists"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:extract_info"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:get_knowledge"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:get_title"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:is_related"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:loads"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:pop_last_talk"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:rewrite"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:set_history_summary"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:split_texts"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:summarize"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:to_int"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:to_metagpt_history_format"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:to_redis_key"}, {"predicate": "isAggregateOf", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "?:BrainMemory"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/roles/assistant.py:Assistant"}, {"predicate": "isCompositeOn", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/roles/assistant.py:Assistant:memory"}, {"predicate": "is_composite_of", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/schema.py:Message"}, {"predicate": "is_composite_of", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_openai_summarize"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_summarize"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_is_related"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_openai_is_related"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_rewrite"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_openai_rewrite"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_summarize"}, {"predicate": "has_class_method", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "metagpt/memory/brain_memory.py:BrainMemory:_get_summary"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "{\"lineno\":26,\"end_lineno\":331,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BrainMemory\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "{\"name\":\"BrainMemory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cacheable\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"historical_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"List[Message]\",\"default_value\":\"\"},{\"name\":\"history_text\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"is_dirty\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_history_available\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"knowledge\",\"visibility\":\"+\",\"value_type\":\"List[Message]\",\"default_value\":\"\"},{\"name\":\"last_history_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"last_talk\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseLLM]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "?:BaseLLM"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/brain_memory.py:BrainMemory", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:cacheable", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:cacheable", "target": "{\"name\":\"cacheable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"cacheable : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:historical_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:historical_summary", "target": "{\"name\":\"historical_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"historical_summary : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:history", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:history", "target": "{\"name\":\"history\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"history : List[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:history_text", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:history_text", "target": "{\"name\":\"history_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_text\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:history_text", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_dirty", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_dirty", "target": "{\"name\":\"is_dirty\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_dirty : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available", "target": "{\"name\":\"is_history_available\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_history_available\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_history_available", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:knowledge", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:knowledge", "target": "{\"name\":\"knowledge\",\"type_\":\"List[Message]\",\"default_\":\"\",\"description\":\"knowledge : List[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:last_history_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:last_history_id", "target": "{\"name\":\"last_history_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"last_history_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:last_talk", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:last_talk", "target": "{\"name\":\"last_talk\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"last_talk : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:llm", "target": "{\"name\":\"llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_answer", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_answer", "target": "{\"name\":\"add_answer\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_answer(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_history", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_history", "target": "{\"name\":\"add_history\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_history(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_talk", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:add_talk", "target": "{\"name\":\"add_talk\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_talk(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:dumps", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:dumps", "target": "{\"name\":\"dumps\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"dumps(redis_key: str, timeout_sec: int)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:exists", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:exists", "target": "{\"name\":\"exists\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"exists(text): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:extract_info", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:extract_info", "target": "{\"name\":\"extract_info\",\"args\":[{\"name\":\"input_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"input_string\",\"compositions\":[]},{\"name\":\"pattern\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pattern\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_info(input_string, pattern)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:get_knowledge", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:get_knowledge", "target": "{\"name\":\"get_knowledge\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_knowledge(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:get_title", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:get_title", "target": "{\"name\":\"get_title\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_title(llm, max_words): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_related", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:is_related", "target": "{\"name\":\"is_related\",\"args\":[{\"name\":\"text1\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text1\",\"compositions\":[]},{\"name\":\"text2\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text2\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_related(text1, text2, llm)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:loads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:loads", "target": "{\"name\":\"loads\",\"args\":[{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'BrainMemory'\",\"description\":\"'BrainMemory'\",\"compositions\":[\"BrainMemory\"]},\"description\":\"loads(redis_key: str): 'BrainMemory'\",\"aggregations\":[\"BrainMemory\"]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:pop_last_talk", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:pop_last_talk", "target": "{\"name\":\"pop_last_talk\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pop_last_talk()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:rewrite", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:rewrite", "target": "{\"name\":\"rewrite\",\"args\":[{\"name\":\"sentence\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sentence: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"context: str\",\"compositions\":[]},{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rewrite(sentence: str, context: str, llm)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:set_history_summary", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:set_history_summary", "target": "{\"name\":\"set_history_summary\",\"args\":[{\"name\":\"history_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history_summary\",\"compositions\":[]},{\"name\":\"redis_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"redis_key\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_history_summary(history_summary, redis_key)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:split_texts", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:split_texts", "target": "{\"name\":\"split_texts\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"window_size\",\"type_\":\"\",\"default_\":\"\",\"description\":\"window_size\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"split_texts(text: str, window_size): List[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:summarize", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:summarize", "target": "{\"name\":\"summarize\",\"args\":[{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},{\"name\":\"max_words\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_words\",\"compositions\":[]},{\"name\":\"keep_language\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"keep_language: bool\",\"compositions\":[]},{\"name\":\"limit\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"limit: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize(llm, max_words, keep_language: bool, limit: int)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_int", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_int", "target": "{\"name\":\"to_int\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"default_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"default_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_int(v, default_value)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_metagpt_history_format", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_metagpt_history_format", "target": "{\"name\":\"to_metagpt_history_format\",\"args\":[{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"to_metagpt_history_format(history): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_redis_key", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:to_redis_key", "target": "{\"name\":\"to_redis_key\",\"args\":[{\"name\":\"prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prefix: str\",\"compositions\":[]},{\"name\":\"user_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"user_id: str\",\"compositions\":[]},{\"name\":\"chat_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chat_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_redis_key(prefix: str, user_id: str, chat_id: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/browser_config.py", "target": "metagpt/configs/browser_config.py:BrowserConfig"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "{\"name\":\"BrowserConfig\",\"package\":\"metagpt/configs/browser_config.py:BrowserConfig\",\"attributes\":{\"browser\":{\"name\":\"browser\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]},\"driver\":{\"name\":\"driver\",\"type_\":\"Literal['chromium','firefox','webkit']\",\"default_\":\"\",\"description\":\"driver : Literal['chromium', 'firefox', 'webkit']\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/configs/browser_config.py:BrowserConfig:browser"}, {"predicate": "has_class_property", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/configs/browser_config.py:BrowserConfig:driver"}, {"predicate": "has_class_property", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/configs/browser_config.py:BrowserConfig:engine"}, {"predicate": "has_class_property", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/configs/browser_config.py:BrowserConfig:path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/config2.py:Config"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "metagpt/config2.py:Config:browser"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BrowserConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/browser_config.py:BrowserConfig", "target": "{\"name\":\"BrowserConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser\",\"visibility\":\"+\",\"value_type\":\"Literal['chrome','firefox','edge','ie']\",\"default_value\":\"\"},{\"name\":\"driver\",\"visibility\":\"+\",\"value_type\":\"Literal['chromium','firefox','webkit']\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py:BrowserConfig:browser", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/browser_config.py:BrowserConfig:browser", "target": "{\"name\":\"browser\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py:BrowserConfig:driver", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/browser_config.py:BrowserConfig:driver", "target": "{\"name\":\"driver\",\"type_\":\"Literal['chromium','firefox','webkit']\",\"default_\":\"\",\"description\":\"driver : Literal['chromium', 'firefox', 'webkit']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py:BrowserConfig:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/browser_config.py:BrowserConfig:engine", "target": "{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/browser_config.py:BrowserConfig:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/browser_config.py:BrowserConfig:path", "target": "{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:BugFixContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:BugFixContext", "target": "{\"name\":\"BugFixContext\",\"package\":\"metagpt/schema.py:BugFixContext\",\"attributes\":{\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:BugFixContext", "target": "metagpt/schema.py:BugFixContext:filename"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:BugFixContext", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:BugFixContext", "target": "{\"lineno\":472,\"end_lineno\":473,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"BugFixContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:BugFixContext", "target": "{\"name\":\"BugFixContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:BugFixContext:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:BugFixContext:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/config2.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/config2.py", "target": "metagpt/config2.py:CLIParams"}, {"predicate": "has_class", "source": "metagpt/config2.py", "target": "metagpt/config2.py:Config"}, {"predicate": "has_function", "source": "metagpt/config2.py", "target": "metagpt/config2.py:merge_dict"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams", "target": "{\"name\":\"CLIParams\",\"package\":\"metagpt/config2.py:CLIParams\",\"attributes\":{\"git_reinit\":{\"name\":\"git_reinit\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"git_reinit : bool\",\"compositions\":[]},\"inc\":{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]},\"max_auto_summarize_code\":{\"name\":\"max_auto_summarize_code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_auto_summarize_code : int\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_path : str\",\"compositions\":[]},\"reqa_file\":{\"name\":\"reqa_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reqa_file : str\",\"compositions\":[]}},\"methods\":{\"check_project_path\":{\"name\":\"check_project_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_project_path()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:git_reinit"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:inc"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:max_auto_summarize_code"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:project_name"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:project_path"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:reqa_file"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:CLIParams", "target": "metagpt/config2.py:CLIParams:check_project_path"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:CLIParams", "target": "{\"lineno\":25,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CLIParams\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/config2.py:CLIParams", "target": "{\"name\":\"CLIParams\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"git_reinit\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"inc\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"max_auto_summarize_code\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"reqa_file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:git_reinit", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:git_reinit", "target": "{\"name\":\"git_reinit\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"git_reinit : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:inc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:inc", "target": "{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:max_auto_summarize_code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:max_auto_summarize_code", "target": "{\"name\":\"max_auto_summarize_code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_auto_summarize_code : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:project_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:project_path", "target": "{\"name\":\"project_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:reqa_file", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:reqa_file", "target": "{\"name\":\"reqa_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reqa_file : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:CLIParams:check_project_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:CLIParams:check_project_path", "target": "{\"name\":\"check_project_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_project_path()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/git_repository.py", "target": "metagpt/utils/git_repository.py:ChangeType"}, {"predicate": "has_class", "source": "metagpt/utils/git_repository.py", "target": "metagpt/utils/git_repository.py:GitRepository"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "{\"name\":\"ChangeType\",\"package\":\"metagpt/utils/git_repository.py:ChangeType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "metagpt/utils/git_repository.py:ChangeType:name"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "{\"lineno\":25,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ChangeType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/git_repository.py:ChangeType", "target": "{\"name\":\"ChangeType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:ChangeType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:ChangeType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/chromadb_store.py", "target": "metagpt/document_store/chromadb_store.py:ChromaStore"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "{\"name\":\"ChromaStore\",\"package\":\"metagpt/document_store/chromadb_store.py:ChromaStore\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]},\"collection\":{\"name\":\"collection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"collection\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"document\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(document, metadata, _id)\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metadata_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata_filter\",\"compositions\":[]},{\"name\":\"document_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document_filter\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metadata_filter, document_filter)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"documents\",\"type_\":\"\",\"default_\":\"\",\"description\":\"documents\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(documents, metadatas, ids)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:client"}, {"predicate": "has_class_property", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:collection"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:delete"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:persist"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:write"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/management/skill_manager.py:SkillManager"}, {"predicate": "isCompositeOn", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/management/skill_manager.py:SkillManager:_store"}, {"predicate": "has_class_method", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "metagpt/document_store/chromadb_store.py:ChromaStore:__init__"}, {"predicate": "has_page_info", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "{\"lineno\":11,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ChromaStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/chromadb_store.py:ChromaStore", "target": "{\"name\":\"ChromaStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"collection\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:client", "target": "{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:collection", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:collection", "target": "{\"name\":\"collection\",\"type_\":\"\",\"default_\":\"\",\"description\":\"collection\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"document\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(document, metadata, _id)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metadata_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata_filter\",\"compositions\":[]},{\"name\":\"document_filter\",\"type_\":\"\",\"default_\":\"\",\"description\":\"document_filter\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metadata_filter, document_filter)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:write", "target": "{\"name\":\"write\",\"args\":[{\"name\":\"documents\",\"type_\":\"\",\"default_\":\"\",\"description\":\"documents\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(documents, metadatas, ids)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/anthropic_api.py", "target": "metagpt/provider/anthropic_api.py:Claude2"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "{\"name\":\"Claude2\",\"package\":\"metagpt/provider/anthropic_api.py:Claude2\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(prompt: str): str\",\"aggregations\":[]},\"ask\":{\"name\":\"ask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(prompt: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "metagpt/provider/anthropic_api.py:Claude2:config"}, {"predicate": "has_class_method", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "metagpt/provider/anthropic_api.py:Claude2:aask"}, {"predicate": "has_class_method", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "metagpt/provider/anthropic_api.py:Claude2:ask"}, {"predicate": "has_class_method", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "metagpt/provider/anthropic_api.py:Claude2:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "{\"lineno\":15,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Claude2\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/anthropic_api.py:Claude2", "target": "{\"name\":\"Claude2\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/anthropic_api.py:Claude2:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2:aask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/anthropic_api.py:Claude2:aask", "target": "{\"name\":\"aask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(prompt: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2:ask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/anthropic_api.py:Claude2:ask", "target": "{\"name\":\"ask\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(prompt: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/repo_parser.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:CodeBlockInfo"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotClassAttribute"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotClassInfo"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotClassMethod"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotClassRelationship"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:DotReturn"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:RepoFileInfo"}, {"predicate": "has_class", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:RepoParser"}, {"predicate": "has_function", "source": "metagpt/repo_parser.py", "target": "metagpt/repo_parser.py:is_func"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "{\"name\":\"CodeBlockInfo\",\"package\":\"metagpt/repo_parser.py:CodeBlockInfo\",\"attributes\":{\"end_lineno\":{\"name\":\"end_lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"end_lineno : int\",\"compositions\":[]},\"lineno\":{\"name\":\"lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"lineno : int\",\"compositions\":[]},\"properties\":{\"name\":\"properties\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"properties : Dict\",\"compositions\":[]},\"tokens\":{\"name\":\"tokens\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"tokens : List\",\"compositions\":[]},\"type_name\":{\"name\":\"type_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:end_lineno"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:lineno"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:properties"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:tokens"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "metagpt/repo_parser.py:CodeBlockInfo:type_name"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "{\"lineno\":34,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeBlockInfo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:CodeBlockInfo", "target": "{\"name\":\"CodeBlockInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"end_lineno\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"lineno\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"properties\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"},{\"name\":\"tokens\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"type_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:end_lineno", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:end_lineno", "target": "{\"name\":\"end_lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"end_lineno : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:lineno", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:lineno", "target": "{\"name\":\"lineno\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"lineno : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:properties", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:properties", "target": "{\"name\":\"properties\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"properties : Dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:tokens", "target": "{\"name\":\"tokens\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"tokens : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:CodeBlockInfo:type_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:CodeBlockInfo:type_name", "target": "{\"name\":\"type_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/common.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:CodeParser"}, {"predicate": "has_class", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:NoMoneyException"}, {"predicate": "has_class", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:OutputParser"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:check_cmd_exists"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:require_python_version"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:print_members"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:parse_recipient"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:get_class_name"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:any_to_str"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:any_to_str_set"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:is_send_to"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:any_to_name"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:concat_namespace"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:split_namespace"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:general_after_log"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:read_json_file"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:write_json_file"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:import_class"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:import_class_inst"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:format_trackback_info"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:serialize_decorator"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:role_raise_decorator"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:aread"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:awrite"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:read_file_block"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:list_files"}, {"predicate": "has_function", "source": "metagpt/utils/common.py", "target": "metagpt/utils/common.py:parse_json_code_block"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser", "target": "{\"name\":\"CodeParser\",\"package\":\"metagpt/utils/common.py:CodeParser\",\"attributes\":{},\"methods\":{\"parse_block\":{\"name\":\"parse_block\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_block(block: str, text: str): str\",\"aggregations\":[]},\"parse_blocks\":{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]},\"parse_code\":{\"name\":\"parse_code\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(block: str, text: str, lang: str): str\",\"aggregations\":[]},\"parse_file_list\":{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(block: str, text: str, lang: str): list[str]\",\"aggregations\":[]},\"parse_str\":{\"name\":\"parse_str\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(block: str, text: str, lang: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_block"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_blocks"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_code"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_file_list"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:CodeParser", "target": "metagpt/utils/common.py:CodeParser:parse_str"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:CodeParser", "target": "{\"lineno\":234,\"end_lineno\":304,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/common.py:CodeParser", "target": "{\"name\":\"CodeParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_block", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_block", "target": "{\"name\":\"parse_block\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_block(block: str, text: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_blocks", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_blocks", "target": "{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_code", "target": "{\"name\":\"parse_code\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(block: str, text: str, lang: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_file_list", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_file_list", "target": "{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(block: str, text: str, lang: str): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:CodeParser:parse_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:CodeParser:parse_str", "target": "{\"name\":\"parse_str\",\"args\":[{\"name\":\"block\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"block: str\",\"compositions\":[]},{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(block: str, text: str, lang: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "{\"name\":\"CodePlanAndChangeContext\",\"package\":\"metagpt/schema.py:CodePlanAndChangeContext\",\"attributes\":{\"design_filename\":{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"prd_filename\":{\"name\":\"prd_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_filename : str\",\"compositions\":[]},\"requirement\":{\"name\":\"requirement\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"requirement : str\",\"compositions\":[]},\"task_filename\":{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodePlanAndChangeContext\",\"description\":\"CodePlanAndChangeContext\",\"compositions\":[\"CodePlanAndChangeContext\"]},\"description\":\"loads(filenames: List): CodePlanAndChangeContext\",\"aggregations\":[\"CodePlanAndChangeContext\"]}},\"compositions\":[],\"aggregations\":[\"CodePlanAndChangeContext\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:design_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:prd_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:requirement"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:task_filename"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/schema.py:CodePlanAndChangeContext:loads"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "?:CodePlanAndChangeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "{\"lineno\":476,\"end_lineno\":497,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodePlanAndChangeContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:CodePlanAndChangeContext", "target": "{\"name\":\"CodePlanAndChangeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"design_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prd_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"requirement\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:design_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:design_filename", "target": "{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:prd_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:prd_filename", "target": "{\"name\":\"prd_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:requirement", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:requirement", "target": "{\"name\":\"requirement\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"requirement : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:task_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:task_filename", "target": "{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodePlanAndChangeContext:loads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodePlanAndChangeContext:loads", "target": "{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodePlanAndChangeContext\",\"description\":\"CodePlanAndChangeContext\",\"compositions\":[\"CodePlanAndChangeContext\"]},\"description\":\"loads(filenames: List): CodePlanAndChangeContext\",\"aggregations\":[\"CodePlanAndChangeContext\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "{\"name\":\"CodeSummarizeContext\",\"package\":\"metagpt/schema.py:CodeSummarizeContext\",\"attributes\":{\"codes_filenames\":{\"name\":\"codes_filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"codes_filenames : List[str]\",\"compositions\":[]},\"design_filename\":{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]},\"reason\":{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]},\"task_filename\":{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}},\"methods\":{\"loads\":{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeSummarizeContext\",\"description\":\"CodeSummarizeContext\",\"compositions\":[\"CodeSummarizeContext\"]},\"description\":\"loads(filenames: List): CodeSummarizeContext\",\"aggregations\":[\"CodeSummarizeContext\"]}},\"compositions\":[],\"aggregations\":[\"CodeSummarizeContext\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:codes_filenames"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:design_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:reason"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:task_filename"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:loads"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "?:CodeSummarizeContext"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/actions/summarize_code.py:SummarizeCode"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/actions/summarize_code.py:SummarizeCode:i_context"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "metagpt/schema.py:CodeSummarizeContext:__hash__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "{\"lineno\":450,\"end_lineno\":469,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodeSummarizeContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "{\"name\":\"CodeSummarizeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"codes_filenames\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"design_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"reason\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "{\"description\":\"The source code defines a class CodeSummarizeContext with attributes design_filename, task_filename, codes_filenames, and reason. It also provides a static method loads to create an instance of CodeSummarizeContext from a list of filenames.\",\"use_cases\":[{\"description\":\"Load CodeSummarizeContext\",\"inputs\":[\"filenames: List[str]\"],\"outputs\":[\"ctx: CodeSummarizeContext\"],\"actors\":[\"External System\"],\"steps\":[\"Create an empty instance of CodeSummarizeContext\",\"Iterate through the list of filenames\",\"If the filename is relative to SYSTEM_DESIGN_FILE_REPO, set design_filename attribute\",\"If the filename is relative to TASK_FILE_REPO, set task_filename attribute\"],\"reason\":\"When the external system needs to load a CodeSummarizeContext instance from a list of filenames.\"}],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/schema.py:CodeSummarizeContext", "target": "\nsequenceDiagram\n participant ExternalSystem\n participant CodeSummarizeContext\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>CodeSummarizeContext: Create an empty instance\n loop through filenames\n CodeSummarizeContext->>CodeSummarizeContext: Check if filename is relative to SYSTEM_DESIGN_FILE_REPO\n alt filename is relative to SYSTEM_DESIGN_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set design_filename attribute\n else filename is relative to TASK_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set task_filename attribute\n end\n end\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:codes_filenames", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:codes_filenames", "target": "{\"name\":\"codes_filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"codes_filenames : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:design_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:design_filename", "target": "{\"name\":\"design_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"design_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:reason", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:reason", "target": "{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:task_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:task_filename", "target": "{\"name\":\"task_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"task_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:loads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodeSummarizeContext:loads", "target": "{\"name\":\"loads\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"filenames: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeSummarizeContext\",\"description\":\"CodeSummarizeContext\",\"compositions\":[\"CodeSummarizeContext\"]},\"description\":\"loads(filenames: List): CodeSummarizeContext\",\"aggregations\":[\"CodeSummarizeContext\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext", "target": "{\"name\":\"CodingContext\",\"package\":\"metagpt/schema.py:CodingContext\",\"attributes\":{\"code_doc\":{\"name\":\"code_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"design_doc\":{\"name\":\"design_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"design_doc : Optional[Document]\",\"compositions\":[\"Document\"]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"task_doc\":{\"name\":\"task_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"task_doc : Optional[Document]\",\"compositions\":[\"Document\"]}},\"methods\":{},\"compositions\":[\"Document\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:CodingContext:code_doc"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:CodingContext:design_doc"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:CodingContext:filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:CodingContext:task_doc"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:CodingContext", "target": "?:Document"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/actions/write_code_review.py:WriteCodeReview"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:CodingContext", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:CodingContext", "target": "{\"lineno\":418,\"end_lineno\":422,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CodingContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:CodingContext", "target": "{\"name\":\"CodingContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"design_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/schema.py:CodingContext", "target": "{\"description\":\"The source code defines a class CodingContext with attributes filename, design_doc, task_doc, and code_doc. The class is a part of a larger system and interacts with external documents such as Document.\",\"use_cases\":[{\"description\":\"Create Coding Context\",\"inputs\":[\"filename\"],\"outputs\":[\"coding_context\"],\"actors\":[\"User\"],\"steps\":[\"User provides a filename as input\",\"System creates a new CodingContext object with the provided filename\",\"System returns the created CodingContext object\"],\"reason\":\"When a user needs to create a new coding context for a specific file\"},{\"description\":\"Update Design Document\",\"inputs\":[\"coding_context\",\"design_doc\"],\"outputs\":[\"updated_coding_context\"],\"actors\":[\"User\"],\"steps\":[\"User provides the coding context and the updated design document as input\",\"System updates the design document in the provided coding context\",\"System returns the updated coding context\"],\"reason\":\"When a user needs to update the design document in a coding context\"},{\"description\":\"Update Task Document\",\"inputs\":[\"coding_context\",\"task_doc\"],\"outputs\":[\"updated_coding_context\"],\"actors\":[\"User\"],\"steps\":[\"User provides the coding context and the updated task document as input\",\"System updates the task document in the provided coding context\",\"System returns the updated coding context\"],\"reason\":\"When a user needs to update the task document in a coding context\"},{\"description\":\"Update Code Document\",\"inputs\":[\"coding_context\",\"code_doc\"],\"outputs\":[\"updated_coding_context\"],\"actors\":[\"User\"],\"steps\":[\"User provides the coding context and the updated code document as input\",\"System updates the code document in the provided coding context\",\"System returns the updated coding context\"],\"reason\":\"When a user needs to update the code document in a coding context\"}],\"relationship\":[\"Create Coding Context is a prerequisite for Update Design Document, Update Task Document, and Update Code Document\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/schema.py:CodingContext", "target": "\nsequenceDiagram\n participant User\n participant System\n participant CodingContext\n participant Document\n\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext:code_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext:code_doc", "target": "{\"name\":\"code_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"code_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext:design_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext:design_doc", "target": "{\"name\":\"design_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"design_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:CodingContext:task_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:CodingContext:task_doc", "target": "{\"name\":\"task_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"task_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/research.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/research.py", "target": "metagpt/actions/research.py:CollectLinks"}, {"predicate": "has_class", "source": "metagpt/actions/research.py", "target": "metagpt/actions/research.py:ConductResearch"}, {"predicate": "has_class", "source": "metagpt/actions/research.py", "target": "metagpt/actions/research.py:WebBrowseAndSummarize"}, {"predicate": "has_function", "source": "metagpt/actions/research.py", "target": "metagpt/actions/research.py:get_research_system_text"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks", "target": "{\"name\":\"CollectLinks\",\"package\":\"metagpt/actions/research.py:CollectLinks\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"rank_func\":{\"name\":\"rank_func\",\"type_\":\"Optional[Callable[[list[str]],None]]\",\"default_\":\"\",\"description\":\"rank_func : Optional[Callable[[list[str]], None]]\",\"compositions\":[\"Callable\"]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"decomposition_nums\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"decomposition_nums: int\",\"compositions\":[]},{\"name\":\"url_per_query\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"url_per_query: int\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\\\\|None\",\"default_\":\"\",\"description\":\"system_text: str \\\\| None\",\"compositions\":[\"str\\\\\"]}],\"return_args\":{\"type_\":\"dict[str,list[str]]\",\"description\":\"dict[str, list[str]]\",\"compositions\":[]},\"description\":\"run(topic: str, decomposition_nums: int, url_per_query: int, system_text: str \\\\| None): dict[str, list[str]]\",\"aggregations\":[\"str\\\\\"]}},\"compositions\":[\"Callable\"],\"aggregations\":[\"str\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:rank_func"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:search_engine"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:run"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/research.py:CollectLinks", "target": "?:Callable"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/research.py:CollectLinks", "target": "?:str\\"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:CollectLinks", "target": "metagpt/actions/research.py:CollectLinks:_search_and_rank_urls"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:CollectLinks", "target": "{\"lineno\":78,\"end_lineno\":171,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CollectLinks\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/research.py:CollectLinks", "target": "{\"name\":\"CollectLinks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"rank_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[[list[str]],None]]\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:rank_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:rank_func", "target": "{\"name\":\"rank_func\",\"type_\":\"Optional[Callable[[list[str]],None]]\",\"default_\":\"\",\"description\":\"rank_func : Optional[Callable[[list[str]], None]]\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:search_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:search_engine", "target": "{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:CollectLinks:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"decomposition_nums\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"decomposition_nums: int\",\"compositions\":[]},{\"name\":\"url_per_query\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"url_per_query: int\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\\\\|None\",\"default_\":\"\",\"description\":\"system_text: str \\\\| None\",\"compositions\":[\"str\\\\\"]}],\"return_args\":{\"type_\":\"dict[str,list[str]]\",\"description\":\"dict[str, list[str]]\",\"compositions\":[]},\"description\":\"run(topic: str, decomposition_nums: int, url_per_query: int, system_text: str \\\\| None): dict[str, list[str]]\",\"aggregations\":[\"str\\\\\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Components"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Entity"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Example"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Parameter"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Returns"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:Skill"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration"}, {"predicate": "has_class", "source": "metagpt/learn/skill_loader.py", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Components", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Components", "target": "{\"name\":\"Components\",\"package\":\"metagpt/learn/skill_loader.py:Components\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Components", "target": "{\"lineno\":58,\"end_lineno\":59,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Components\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Components", "target": "{\"name\":\"Components\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:ConductResearch", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:ConductResearch", "target": "{\"name\":\"ConductResearch\",\"package\":\"metagpt/actions/research.py:ConductResearch\",\"attributes\":{},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str, content: str, system_text: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:ConductResearch", "target": "metagpt/actions/research.py:ConductResearch:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/research.py:ConductResearch", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:ConductResearch", "target": "metagpt/actions/research.py:ConductResearch:__init__"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:ConductResearch", "target": "{\"lineno\":240,\"end_lineno\":265,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ConductResearch\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/research.py:ConductResearch", "target": "{\"name\":\"ConductResearch\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:ConductResearch:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:ConductResearch:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str, content: str, system_text: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config", "target": "{\"name\":\"Config\",\"package\":\"metagpt/config2.py:Config\",\"attributes\":{\"AZURE_TTS_REGION\":{\"name\":\"AZURE_TTS_REGION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"AZURE_TTS_REGION : str\",\"compositions\":[]},\"AZURE_TTS_SUBSCRIPTION_KEY\":{\"name\":\"AZURE_TTS_SUBSCRIPTION_KEY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"AZURE_TTS_SUBSCRIPTION_KEY : str\",\"compositions\":[]},\"IFLYTEK_API_KEY\":{\"name\":\"IFLYTEK_API_KEY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_API_KEY : str\",\"compositions\":[]},\"IFLYTEK_API_SECRET\":{\"name\":\"IFLYTEK_API_SECRET\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_API_SECRET : str\",\"compositions\":[]},\"IFLYTEK_APP_ID\":{\"name\":\"IFLYTEK_APP_ID\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_APP_ID : str\",\"compositions\":[]},\"METAGPT_TEXT_TO_IMAGE_MODEL_URL\":{\"name\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL : str\",\"compositions\":[]},\"browser\":{\"name\":\"browser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"browser\",\"compositions\":[]},\"code_review_k_times\":{\"name\":\"code_review_k_times\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code_review_k_times : int\",\"compositions\":[]},\"enable_longterm_memory\":{\"name\":\"enable_longterm_memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"enable_longterm_memory : bool\",\"compositions\":[]},\"inc\":{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"llm_for_researcher_report\":{\"name\":\"llm_for_researcher_report\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"llm_for_researcher_report : str\",\"compositions\":[]},\"llm_for_researcher_summary\":{\"name\":\"llm_for_researcher_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"llm_for_researcher_summary : str\",\"compositions\":[]},\"max_auto_summarize_code\":{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]},\"mermaid\":{\"name\":\"mermaid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mermaid\",\"compositions\":[]},\"mermaid_engine\":{\"name\":\"mermaid_engine\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_engine : str\",\"compositions\":[]},\"mmdc\":{\"name\":\"mmdc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mmdc : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"Literal['json','markdown','raw']\",\"default_\":\"\",\"description\":\"prompt_schema : Literal['json', 'markdown', 'raw']\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]},\"puppeteer_config\":{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]},\"pyppeteer_executable_path\":{\"name\":\"pyppeteer_executable_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"pyppeteer_executable_path : str\",\"compositions\":[]},\"redis\":{\"name\":\"redis\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"redis : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]},\"redis_key\":{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key : str\",\"compositions\":[]},\"repair_llm_output\":{\"name\":\"repair_llm_output\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"repair_llm_output : bool\",\"compositions\":[]},\"reqa_file\":{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},\"s3\":{\"name\":\"s3\",\"type_\":\"Optional[S3Config]\",\"default_\":\"\",\"description\":\"s3 : Optional[S3Config]\",\"compositions\":[\"S3Config\"]},\"search\":{\"name\":\"search\",\"type_\":\"Optional[SearchConfig]\",\"default_\":\"\",\"description\":\"search : Optional[SearchConfig]\",\"compositions\":[\"SearchConfig\"]},\"workspace\":{\"name\":\"workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workspace\",\"compositions\":[]}},\"methods\":{\"default\":{\"name\":\"default\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"default()\",\"aggregations\":[]},\"from_home\":{\"name\":\"from_home\",\"args\":[{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_home(path)\",\"aggregations\":[]},\"get_azure_llm\":{\"name\":\"get_azure_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_azure_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]},\"get_openai_llm\":{\"name\":\"get_openai_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_openai_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]},\"update_via_cli\":{\"name\":\"update_via_cli\",\"args\":[{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},{\"name\":\"inc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"inc\",\"compositions\":[]},{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code)\",\"aggregations\":[]}},\"compositions\":[\"RedisConfig\",\"S3Config\",\"SearchConfig\"],\"aggregations\":[\"LLMConfig\"]}"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:AZURE_TTS_REGION"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:AZURE_TTS_SUBSCRIPTION_KEY"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:IFLYTEK_API_KEY"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:IFLYTEK_API_SECRET"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:IFLYTEK_APP_ID"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:METAGPT_TEXT_TO_IMAGE_MODEL_URL"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:browser"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:code_review_k_times"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:enable_longterm_memory"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:inc"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:language"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:llm"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:llm_for_researcher_report"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:llm_for_researcher_summary"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:max_auto_summarize_code"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:mermaid"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:mermaid_engine"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:mmdc"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:project_name"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:project_path"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:prompt_schema"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:proxy"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:puppeteer_config"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:pyppeteer_executable_path"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:redis"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:redis_key"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:repair_llm_output"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:reqa_file"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:s3"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:search"}, {"predicate": "has_class_property", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:workspace"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:default"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:from_home"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:get_azure_llm"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:get_openai_llm"}, {"predicate": "has_class_method", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:Config:update_via_cli"}, {"predicate": "isAggregateOf", "source": "metagpt/config2.py:Config", "target": "?:LLMConfig"}, {"predicate": "isGeneralizeOf", "source": "metagpt/config2.py:Config", "target": "metagpt/config2.py:CLIParams"}, {"predicate": "isGeneralizeOf", "source": "metagpt/config2.py:Config", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/config2.py:Config", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/config2.py:Config", "target": "metagpt/context.py:Context:config"}, {"predicate": "is_composite_of", "source": "metagpt/config2.py:Config", "target": "metagpt/configs/redis_config.py:RedisConfig"}, {"predicate": "is_composite_of", "source": "metagpt/config2.py:Config", "target": "metagpt/configs/s3_config.py:S3Config"}, {"predicate": "is_composite_of", "source": "metagpt/config2.py:Config", "target": "metagpt/configs/search_config.py:SearchConfig"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:Config", "target": "{\"lineno\":44,\"end_lineno\":132,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Config\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/config2.py:Config", "target": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"AZURE_TTS_REGION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"AZURE_TTS_SUBSCRIPTION_KEY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IFLYTEK_API_KEY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IFLYTEK_API_SECRET\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IFLYTEK_APP_ID\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"browser\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_review_k_times\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"enable_longterm_memory\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"inc\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm_for_researcher_report\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"llm_for_researcher_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"max_auto_summarize_code\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mermaid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mermaid_engine\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"mmdc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"Literal['json','markdown','raw']\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"puppeteer_config\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"pyppeteer_executable_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"redis\",\"visibility\":\"+\",\"value_type\":\"Optional[RedisConfig]\",\"default_value\":\"\"},{\"name\":\"redis_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"repair_llm_output\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"reqa_file\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"s3\",\"visibility\":\"+\",\"value_type\":\"Optional[S3Config]\",\"default_value\":\"\"},{\"name\":\"search\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchConfig]\",\"default_value\":\"\"},{\"name\":\"workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/config2.py:Config", "target": "?:RedisConfig"}, {"predicate": "isCompositeOf", "source": "metagpt/config2.py:Config", "target": "?:S3Config"}, {"predicate": "isCompositeOf", "source": "metagpt/config2.py:Config", "target": "?:SearchConfig"}, {"predicate": "is", "source": "metagpt/config2.py:Config:AZURE_TTS_REGION", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:AZURE_TTS_REGION", "target": "{\"name\":\"AZURE_TTS_REGION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"AZURE_TTS_REGION : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:AZURE_TTS_SUBSCRIPTION_KEY", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:AZURE_TTS_SUBSCRIPTION_KEY", "target": "{\"name\":\"AZURE_TTS_SUBSCRIPTION_KEY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"AZURE_TTS_SUBSCRIPTION_KEY : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:IFLYTEK_API_KEY", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:IFLYTEK_API_KEY", "target": "{\"name\":\"IFLYTEK_API_KEY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_API_KEY : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:IFLYTEK_API_SECRET", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:IFLYTEK_API_SECRET", "target": "{\"name\":\"IFLYTEK_API_SECRET\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_API_SECRET : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:IFLYTEK_APP_ID", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:IFLYTEK_APP_ID", "target": "{\"name\":\"IFLYTEK_APP_ID\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IFLYTEK_APP_ID : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:METAGPT_TEXT_TO_IMAGE_MODEL_URL", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:METAGPT_TEXT_TO_IMAGE_MODEL_URL", "target": "{\"name\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"METAGPT_TEXT_TO_IMAGE_MODEL_URL : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:browser", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:browser", "target": "{\"name\":\"browser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"browser\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:code_review_k_times", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:code_review_k_times", "target": "{\"name\":\"code_review_k_times\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code_review_k_times : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:enable_longterm_memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:enable_longterm_memory", "target": "{\"name\":\"enable_longterm_memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"enable_longterm_memory : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:inc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:inc", "target": "{\"name\":\"inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"inc : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:llm_for_researcher_report", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:llm_for_researcher_report", "target": "{\"name\":\"llm_for_researcher_report\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"llm_for_researcher_report : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:llm_for_researcher_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:llm_for_researcher_summary", "target": "{\"name\":\"llm_for_researcher_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"llm_for_researcher_summary : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:max_auto_summarize_code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:max_auto_summarize_code", "target": "{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:mermaid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:mermaid", "target": "{\"name\":\"mermaid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mermaid\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:mermaid_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:mermaid_engine", "target": "{\"name\":\"mermaid_engine\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_engine : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:mmdc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:mmdc", "target": "{\"name\":\"mmdc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mmdc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:project_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:project_path", "target": "{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:prompt_schema", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:prompt_schema", "target": "{\"name\":\"prompt_schema\",\"type_\":\"Literal['json','markdown','raw']\",\"default_\":\"\",\"description\":\"prompt_schema : Literal['json', 'markdown', 'raw']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:puppeteer_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:puppeteer_config", "target": "{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:pyppeteer_executable_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:pyppeteer_executable_path", "target": "{\"name\":\"pyppeteer_executable_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"pyppeteer_executable_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:redis", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:redis", "target": "{\"name\":\"redis\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"redis : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:redis_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:redis_key", "target": "{\"name\":\"redis_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"redis_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:repair_llm_output", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:repair_llm_output", "target": "{\"name\":\"repair_llm_output\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"repair_llm_output : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:reqa_file", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:reqa_file", "target": "{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:s3", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:s3", "target": "{\"name\":\"s3\",\"type_\":\"Optional[S3Config]\",\"default_\":\"\",\"description\":\"s3 : Optional[S3Config]\",\"compositions\":[\"S3Config\"]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:search", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:search", "target": "{\"name\":\"search\",\"type_\":\"Optional[SearchConfig]\",\"default_\":\"\",\"description\":\"search : Optional[SearchConfig]\",\"compositions\":[\"SearchConfig\"]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:workspace", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:workspace", "target": "{\"name\":\"workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workspace\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:default", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:default", "target": "{\"name\":\"default\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"default()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:from_home", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:from_home", "target": "{\"name\":\"from_home\",\"args\":[{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_home(path)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:get_azure_llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:get_azure_llm", "target": "{\"name\":\"get_azure_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_azure_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:get_openai_llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:get_openai_llm", "target": "{\"name\":\"get_openai_llm\",\"args\":[],\"return_args\":{\"type_\":\"Optional[LLMConfig]\",\"description\":\"Optional[LLMConfig]\",\"compositions\":[\"LLMConfig\"]},\"description\":\"get_openai_llm(): Optional[LLMConfig]\",\"aggregations\":[\"LLMConfig\"]}"}, {"predicate": "is", "source": "metagpt/config2.py:Config:update_via_cli", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/config2.py:Config:update_via_cli", "target": "{\"name\":\"update_via_cli\",\"args\":[{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},{\"name\":\"inc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"inc\",\"compositions\":[]},{\"name\":\"reqa_file\",\"type_\":\"\",\"default_\":\"\",\"description\":\"reqa_file\",\"compositions\":[]},{\"name\":\"max_auto_summarize_code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"max_auto_summarize_code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_via_cli(project_path, project_name, inc, reqa_file, max_auto_summarize_code)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:Usage"}, {"predicate": "has_function", "source": "metagpt/tools/openai_text_to_embedding.py", "target": "metagpt/tools/openai_text_to_embedding.py:oas3_openai_text_to_embedding"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config", "target": "{\"name\":\"Config\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config\",\"attributes\":{\"alias\":{\"name\":\"alias\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"alias : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config:alias"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config", "target": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"alias\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config:alias", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:Config:alias", "target": "{\"name\":\"alias\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"alias : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config", "target": "{\"name\":\"Config\",\"package\":\"metagpt/memory/brain_memory.py:BrainMemory:Config\",\"attributes\":{\"arbitrary_types_allowed\":{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config", "target": "metagpt/memory/brain_memory.py:BrainMemory:Config:arbitrary_types_allowed"}, {"predicate": "has_class_view", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config", "target": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arbitrary_types_allowed\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config:arbitrary_types_allowed", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/brain_memory.py:BrainMemory:Config:arbitrary_types_allowed", "target": "{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:Config", "target": "{\"name\":\"Config\",\"package\":\"metagpt/strategy/tot.py:TreeofThought:Config\",\"attributes\":{\"arbitrary_types_allowed\":{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:TreeofThought:Config", "target": "metagpt/strategy/tot.py:TreeofThought:Config:arbitrary_types_allowed"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:TreeofThought:Config", "target": "{\"name\":\"Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arbitrary_types_allowed\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:Config:arbitrary_types_allowed", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:Config:arbitrary_types_allowed", "target": "{\"name\":\"arbitrary_types_allowed\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"arbitrary_types_allowed : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context", "target": "{\"name\":\"Context\",\"package\":\"metagpt/context.py:Context\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"Optional[GitRepository]\",\"default_\":\"\",\"description\":\"git_repo : Optional[GitRepository]\",\"compositions\":[\"GitRepository\"]},\"kwargs\":{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"Optional[ProjectRepo]\",\"default_\":\"\",\"description\":\"repo : Optional[ProjectRepo]\",\"compositions\":[\"ProjectRepo\"]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"src_workspace : Optional[Path]\",\"compositions\":[\"Path\"]}},\"methods\":{\"llm\":{\"name\":\"llm\",\"args\":[],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm(): BaseLLM\",\"aggregations\":[\"BaseLLM\"]},\"llm_with_cost_manager_from_llm_config\":{\"name\":\"llm_with_cost_manager_from_llm_config\",\"args\":[{\"name\":\"llm_config\",\"type_\":\"LLMConfig\",\"default_\":\"\",\"description\":\"llm_config: LLMConfig\",\"compositions\":[\"LLMConfig\"]}],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm_with_cost_manager_from_llm_config(llm_config: LLMConfig): BaseLLM\",\"aggregations\":[\"BaseLLM\",\"LLMConfig\"]},\"new_environ\":{\"name\":\"new_environ\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_environ()\",\"aggregations\":[]}},\"compositions\":[\"GitRepository\",\"ProjectRepo\",\"Path\"],\"aggregations\":[\"BaseLLM\",\"LLMConfig\"]}"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:config"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:git_repo"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:kwargs"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:model_config"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:repo"}, {"predicate": "has_class_property", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:src_workspace"}, {"predicate": "has_class_method", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:llm"}, {"predicate": "has_class_method", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:llm_with_cost_manager_from_llm_config"}, {"predicate": "has_class_method", "source": "metagpt/context.py:Context", "target": "metagpt/context.py:Context:new_environ"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:Context", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/context.py:Context", "target": "?:BaseLLM"}, {"predicate": "isAggregateOf", "source": "metagpt/context.py:Context", "target": "?:LLMConfig"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:Context", "target": "metagpt/environment.py:Environment"}, {"predicate": "isCompositeOn", "source": "metagpt/context.py:Context", "target": "metagpt/environment.py:Environment:context"}, {"predicate": "is_composite_of", "source": "metagpt/context.py:Context", "target": "metagpt/utils/git_repository.py:GitRepository"}, {"predicate": "is_composite_of", "source": "metagpt/context.py:Context", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "has_page_info", "source": "metagpt/context.py:Context", "target": "{\"lineno\":55,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Context\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/context.py:Context", "target": "{\"name\":\"Context\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"Optional[GitRepository]\",\"default_value\":\"\"},{\"name\":\"kwargs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"Optional[ProjectRepo]\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:Context", "target": "?:GitRepository"}, {"predicate": "isCompositeOf", "source": "metagpt/context.py:Context", "target": "?:ProjectRepo"}, {"predicate": "has_class_use_case", "source": "metagpt/context.py:Context", "target": "{\"description\":\"This source code defines a Context class that represents the environment context for MetaGPT. It contains methods for creating a new os.environ object and for obtaining a LLM (Language Model) instance with a cost manager.\",\"use_cases\":[{\"description\":\"Create a new os.environ object\",\"inputs\":[],\"outputs\":[\"env\"],\"actors\":[\"ProjectRepo\",\"GitRepository\",\"Path\"],\"steps\":[\"Copy the current os.environ object\",\"Return the copied os.environ object\"],\"reason\":\"When the system needs to create a new os.environ object for the MetaGPT environment\"},{\"description\":\"Obtain a LLM (Language Model) instance with a cost manager\",\"inputs\":[],\"outputs\":[\"llm\"],\"actors\":[\"BaseLLM\",\"LLMConfig\"],\"steps\":[\"Create a new LLM instance based on the configuration\",\"Set the cost manager for the LLM instance\",\"Return the LLM instance\"],\"reason\":\"When the system needs to obtain a LLM instance with a cost manager for the MetaGPT environment\"}],\"relationship\":[\"The 'Obtain a LLM (Language Model) instance with a cost manager' use case depends on the 'Create a new os.environ object' use case as it requires the environment context to be set up before obtaining the LLM instance.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/context.py:Context", "target": "\nsequenceDiagram\n participant ProjectRepo\n participant GitRepository\n participant Path\n participant BaseLLM\n participant LLMConfig\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n"}, {"predicate": "is", "source": "metagpt/context.py:Context:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:git_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:git_repo", "target": "{\"name\":\"git_repo\",\"type_\":\"Optional[GitRepository]\",\"default_\":\"\",\"description\":\"git_repo : Optional[GitRepository]\",\"compositions\":[\"GitRepository\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:kwargs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:kwargs", "target": "{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:repo", "target": "{\"name\":\"repo\",\"type_\":\"Optional[ProjectRepo]\",\"default_\":\"\",\"description\":\"repo : Optional[ProjectRepo]\",\"compositions\":[\"ProjectRepo\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:src_workspace", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:src_workspace", "target": "{\"name\":\"src_workspace\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"src_workspace : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:llm", "target": "{\"name\":\"llm\",\"args\":[],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm(): BaseLLM\",\"aggregations\":[\"BaseLLM\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:llm_with_cost_manager_from_llm_config", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:llm_with_cost_manager_from_llm_config", "target": "{\"name\":\"llm_with_cost_manager_from_llm_config\",\"args\":[{\"name\":\"llm_config\",\"type_\":\"LLMConfig\",\"default_\":\"\",\"description\":\"llm_config: LLMConfig\",\"compositions\":[\"LLMConfig\"]}],\"return_args\":{\"type_\":\"BaseLLM\",\"description\":\"BaseLLM\",\"compositions\":[\"BaseLLM\"]},\"description\":\"llm_with_cost_manager_from_llm_config(llm_config: LLMConfig): BaseLLM\",\"aggregations\":[\"BaseLLM\",\"LLMConfig\"]}"}, {"predicate": "is", "source": "metagpt/context.py:Context:new_environ", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context.py:Context:new_environ", "target": "{\"name\":\"new_environ\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_environ()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/context_mixin.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/context_mixin.py", "target": "metagpt/context_mixin.py:ContextMixin"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin", "target": "{\"name\":\"ContextMixin\",\"package\":\"metagpt/context_mixin.py:ContextMixin\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"private_config\":{\"name\":\"private_config\",\"type_\":\"Optional[Config]\",\"default_\":\"\",\"description\":\"private_config : Optional[Config]\",\"compositions\":[\"Config\"]},\"private_context\":{\"name\":\"private_context\",\"type_\":\"Optional[Context]\",\"default_\":\"\",\"description\":\"private_context : Optional[Context]\",\"compositions\":[\"Context\"]},\"private_llm\":{\"name\":\"private_llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"private_llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}},\"methods\":{\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(k, v, override)\",\"aggregations\":[]},\"set_config\":{\"name\":\"set_config\",\"args\":[{\"name\":\"config\",\"type_\":\"Config\",\"default_\":\"\",\"description\":\"config: Config\",\"compositions\":[\"Config\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_config(config: Config, override)\",\"aggregations\":[\"Config\"]},\"set_context\":{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context: Context, override)\",\"aggregations\":[\"Context\"]},\"set_llm\":{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"BaseLLM\",\"default_\":\"\",\"description\":\"llm: BaseLLM\",\"compositions\":[\"BaseLLM\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm: BaseLLM, override)\",\"aggregations\":[\"BaseLLM\"]}},\"compositions\":[\"Config\",\"Context\",\"BaseLLM\"],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:config"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:context"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:llm"}, {"predicate": "has_class_property", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:model_config"}, {"predicate": "has_class_property", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:private_config"}, {"predicate": "has_class_property", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:private_context"}, {"predicate": "has_class_property", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:private_llm"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:set"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:set_config"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:set_context"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:set_llm"}, {"predicate": "is_composite_of", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/config2.py:Config"}, {"predicate": "is_composite_of", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context.py:Context"}, {"predicate": "is_composite_of", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/context_mixin.py:ContextMixin", "target": "metagpt/context_mixin.py:ContextMixin:__init__"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:ContextMixin", "target": "{\"lineno\":17,\"end_lineno\":102,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ContextMixin\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/context_mixin.py:ContextMixin", "target": "{\"name\":\"ContextMixin\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"private_config\",\"visibility\":\"+\",\"value_type\":\"Optional[Config]\",\"default_value\":\"\"},{\"name\":\"private_context\",\"visibility\":\"+\",\"value_type\":\"Optional[Context]\",\"default_value\":\"\"},{\"name\":\"private_llm\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseLLM]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/context_mixin.py:ContextMixin", "target": "?:BaseLLM"}, {"predicate": "isCompositeOf", "source": "metagpt/context_mixin.py:ContextMixin", "target": "?:Config"}, {"predicate": "isCompositeOf", "source": "metagpt/context_mixin.py:ContextMixin", "target": "?:Context"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:config", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:context", "target": "{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:context", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:llm", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:private_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:private_config", "target": "{\"name\":\"private_config\",\"type_\":\"Optional[Config]\",\"default_\":\"\",\"description\":\"private_config : Optional[Config]\",\"compositions\":[\"Config\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:private_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:private_context", "target": "{\"name\":\"private_context\",\"type_\":\"Optional[Context]\",\"default_\":\"\",\"description\":\"private_context : Optional[Context]\",\"compositions\":[\"Context\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:private_llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:private_llm", "target": "{\"name\":\"private_llm\",\"type_\":\"Optional[BaseLLM]\",\"default_\":\"\",\"description\":\"private_llm : Optional[BaseLLM]\",\"compositions\":[\"BaseLLM\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:set", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:set", "target": "{\"name\":\"set\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(k, v, override)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:set_config", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:set_config", "target": "{\"name\":\"set_config\",\"args\":[{\"name\":\"config\",\"type_\":\"Config\",\"default_\":\"\",\"description\":\"config: Config\",\"compositions\":[\"Config\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_config(config: Config, override)\",\"aggregations\":[\"Config\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:set_context", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:set_context", "target": "{\"name\":\"set_context\",\"args\":[{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_context(context: Context, override)\",\"aggregations\":[\"Context\"]}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:set_llm", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/context_mixin.py:ContextMixin:set_llm", "target": "{\"name\":\"set_llm\",\"args\":[{\"name\":\"llm\",\"type_\":\"BaseLLM\",\"default_\":\"\",\"description\":\"llm: BaseLLM\",\"compositions\":[\"BaseLLM\"]},{\"name\":\"override\",\"type_\":\"\",\"default_\":\"\",\"description\":\"override\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_llm(llm: BaseLLM, override)\",\"aggregations\":[\"BaseLLM\"]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/cost_manager.py", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "has_class", "source": "metagpt/utils/cost_manager.py", "target": "metagpt/utils/cost_manager.py:Costs"}, {"predicate": "has_class", "source": "metagpt/utils/cost_manager.py", "target": "metagpt/utils/cost_manager.py:TokenCostManager"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "{\"name\":\"CostManager\",\"package\":\"metagpt/utils/cost_manager.py:CostManager\",\"attributes\":{\"max_budget\":{\"name\":\"max_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"max_budget : float\",\"compositions\":[]},\"total_budget\":{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]},\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]},\"get_total_completion_tokens\":{\"name\":\"get_total_completion_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_completion_tokens()\",\"aggregations\":[]},\"get_total_cost\":{\"name\":\"get_total_cost\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_cost()\",\"aggregations\":[]},\"get_total_prompt_tokens\":{\"name\":\"get_total_prompt_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_prompt_tokens()\",\"aggregations\":[]},\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:max_budget"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:total_budget"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:total_completion_tokens"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:total_cost"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:total_prompt_tokens"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:get_costs"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:get_total_completion_tokens"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:get_total_cost"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:get_total_prompt_tokens"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/utils/cost_manager.py:CostManager:update_cost"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "?:Costs"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "metagpt/context.py:Context:cost_manager"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "{\"lineno\":24,\"end_lineno\":82,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CostManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/cost_manager.py:CostManager", "target": "{\"name\":\"CostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"max_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:max_budget", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:max_budget", "target": "{\"name\":\"max_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"max_budget : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:total_budget", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:total_budget", "target": "{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:total_completion_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:total_completion_tokens", "target": "{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:total_cost", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:total_cost", "target": "{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:total_prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:total_prompt_tokens", "target": "{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:get_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:get_costs", "target": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_completion_tokens", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_completion_tokens", "target": "{\"name\":\"get_total_completion_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_completion_tokens()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_cost", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_cost", "target": "{\"name\":\"get_total_cost\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_cost()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_prompt_tokens", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:get_total_prompt_tokens", "target": "{\"name\":\"get_total_prompt_tokens\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_total_prompt_tokens()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:CostManager:update_cost", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:CostManager:update_cost", "target": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs", "target": "{\"name\":\"Costs\",\"package\":\"metagpt/utils/cost_manager.py:Costs\",\"attributes\":{\"total_budget\":{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]},\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:Costs", "target": "metagpt/utils/cost_manager.py:Costs:total_budget"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:Costs", "target": "metagpt/utils/cost_manager.py:Costs:total_completion_tokens"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:Costs", "target": "metagpt/utils/cost_manager.py:Costs:total_cost"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:Costs", "target": "metagpt/utils/cost_manager.py:Costs:total_prompt_tokens"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:Costs", "target": "{\"lineno\":17,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Costs\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/cost_manager.py:Costs", "target": "{\"name\":\"Costs\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_budget\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs:total_budget", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs:total_budget", "target": "{\"name\":\"total_budget\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_budget : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs:total_completion_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs:total_completion_tokens", "target": "{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs:total_cost", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs:total_cost", "target": "{\"name\":\"total_cost\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"total_cost : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:Costs:total_prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:Costs:total_prompt_tokens", "target": "{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/custom_decoder.py", "target": "metagpt/utils/custom_decoder.py:CustomDecoder"}, {"predicate": "has_function", "source": "metagpt/utils/custom_decoder.py", "target": "metagpt/utils/custom_decoder.py:py_make_scanner"}, {"predicate": "has_function", "source": "metagpt/utils/custom_decoder.py", "target": "metagpt/utils/custom_decoder.py:JSONObject"}, {"predicate": "has_function", "source": "metagpt/utils/custom_decoder.py", "target": "metagpt/utils/custom_decoder.py:py_scanstring"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "{\"name\":\"CustomDecoder\",\"package\":\"metagpt/utils/custom_decoder.py:CustomDecoder\",\"attributes\":{\"parse_object\":{\"name\":\"parse_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_object\",\"compositions\":[]},\"parse_string\":{\"name\":\"parse_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_string\",\"compositions\":[]},\"scan_once\":{\"name\":\"scan_once\",\"type_\":\"\",\"default_\":\"\",\"description\":\"scan_once\",\"compositions\":[]}},\"methods\":{\"decode\":{\"name\":\"decode\",\"args\":[{\"name\":\"s\",\"type_\":\"\",\"default_\":\"\",\"description\":\"s\",\"compositions\":[]},{\"name\":\"_w\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_w\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"decode(s, _w)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_object"}, {"predicate": "has_class_property", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_string"}, {"predicate": "has_class_property", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:scan_once"}, {"predicate": "has_class_method", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:decode"}, {"predicate": "has_class_method", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "metagpt/utils/custom_decoder.py:CustomDecoder:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "{\"lineno\":273,\"end_lineno\":297,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CustomDecoder\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/custom_decoder.py:CustomDecoder", "target": "{\"name\":\"CustomDecoder\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"parse_object\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"parse_string\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"scan_once\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_object", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_object", "target": "{\"name\":\"parse_object\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_object\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_string", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:parse_string", "target": "{\"name\":\"parse_string\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parse_string\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:scan_once", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:scan_once", "target": "{\"name\":\"scan_once\",\"type_\":\"\",\"default_\":\"\",\"description\":\"scan_once\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:decode", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:decode", "target": "{\"name\":\"decode\",\"args\":[{\"name\":\"s\",\"type_\":\"\",\"default_\":\"\",\"description\":\"s\",\"compositions\":[]},{\"name\":\"_w\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_w\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"decode(s, _w)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/customer_service.py", "target": "metagpt/roles/customer_service.py:CustomerService"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "{\"name\":\"CustomerService\",\"package\":\"metagpt/roles/customer_service.py:CustomerService\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}},\"methods\":{},\"compositions\":[\"BaseStore\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/customer_service.py:CustomerService:desc"}, {"predicate": "has_class_property", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/customer_service.py:CustomerService:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/customer_service.py:CustomerService:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/customer_service.py:CustomerService:store"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/roles/sales.py:Sales"}, {"predicate": "is_composite_of", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "{\"lineno\":27,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"CustomerService\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "{\"name\":\"CustomerService\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseStore]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/customer_service.py:CustomerService", "target": "?:BaseStore"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:CustomerService:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/customer_service.py:CustomerService:store", "target": "{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_ddg.py", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "{\"name\":\"DDGAPIWrapper\",\"package\":\"metagpt/tools/search_engine_ddg.py:DDGAPIWrapper\",\"attributes\":{\"ddgs\":{\"name\":\"ddgs\",\"type_\":\"DDGS\",\"default_\":\"\",\"description\":\"ddgs : DDGS\",\"compositions\":[\"DDGS\"]},\"executor\":{\"name\":\"executor\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executor : NoneType\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"loop : NoneType\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True], focus: list[str] \\\\| None): str\",\"aggregations\":[\"\\\\\"]}},\"compositions\":[\"DDGS\"],\"aggregations\":[\"\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:ddgs"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:executor"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:loop"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:run"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "?:DDGS"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "?:\\"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:_search_from_ddgs"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "{\"lineno\":21,\"end_lineno\":96,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DDGAPIWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper", "target": "{\"name\":\"DDGAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ddgs\",\"visibility\":\"+\",\"value_type\":\"DDGS\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:ddgs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:ddgs", "target": "{\"name\":\"ddgs\",\"type_\":\"DDGS\",\"default_\":\"\",\"description\":\"ddgs : DDGS\",\"compositions\":[\"DDGS\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:executor", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:executor", "target": "{\"name\":\"executor\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executor : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:loop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:loop", "target": "{\"name\":\"loop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"loop : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True], focus: list[str] \\\\| None): str\",\"aggregations\":[\"\\\\\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "{\"name\":\"DFSSolver\",\"package\":\"metagpt/strategy/tot.py:DFSSolver\",\"attributes\":{\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]},{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt, root)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:DFSSolver:thought_tree"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:DFSSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "metagpt/strategy/tot.py:DFSSolver:_dfs"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "{\"lineno\":180,\"end_lineno\":227,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DFSSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:DFSSolver", "target": "{\"name\":\"DFSSolver\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:DFSSolver:thought_tree", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:DFSSolver:thought_tree", "target": "{\"name\":\"thought_tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"thought_tree\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:DFSSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:DFSSolver:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]},{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt, root)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_meilisearch.py", "target": "metagpt/tools/search_engine_meilisearch.py:DataSource"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_meilisearch.py", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "{\"name\":\"DataSource\",\"package\":\"metagpt/tools/search_engine_meilisearch.py:DataSource\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "metagpt/tools/search_engine_meilisearch.py:DataSource:name"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "metagpt/tools/search_engine_meilisearch.py:DataSource:url"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "metagpt/tools/search_engine_meilisearch.py:DataSource:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "{\"lineno\":17,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DataSource\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource", "target": "{\"name\":\"DataSource\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:url", "target": "{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/debug_error.py", "target": "metagpt/actions/debug_error.py:DebugError"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py:DebugError", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/debug_error.py:DebugError", "target": "{\"name\":\"DebugError\",\"package\":\"metagpt/actions/debug_error.py:DebugError\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/debug_error.py:DebugError", "target": "metagpt/actions/debug_error.py:DebugError:i_context"}, {"predicate": "has_class_method", "source": "metagpt/actions/debug_error.py:DebugError", "target": "metagpt/actions/debug_error.py:DebugError:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/debug_error.py:DebugError", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:DebugError", "target": "{\"lineno\":48,\"end_lineno\":75,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DebugError\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/debug_error.py:DebugError", "target": "{\"name\":\"DebugError\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py:DebugError:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/debug_error.py:DebugError:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py:DebugError:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/debug_error.py:DebugError:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/dependency_file.py", "target": "metagpt/utils/dependency_file.py:DependencyFile"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "{\"name\":\"DependencyFile\",\"package\":\"metagpt/utils/dependency_file.py:DependencyFile\",\"attributes\":{\"exists\":{\"name\":\"exists\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exists\",\"compositions\":[]}},\"methods\":{\"delete_file\":{\"name\":\"delete_file\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_file()\",\"aggregations\":[]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(filename: Path \\\\| str, persist)\",\"aggregations\":[\"Path\\\\\"]},\"load\":{\"name\":\"load\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load()\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]},\"update\":{\"name\":\"update\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"dependencies\",\"type_\":\"Set[Path\\\\|str]\",\"default_\":\"\",\"description\":\"dependencies: Set[Path \\\\| str]\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update(filename: Path \\\\| str, dependencies: Set[Path \\\\| str], persist)\",\"aggregations\":[\"Path\\\\\"]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:exists"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:delete_file"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:get"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:load"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:save"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:update"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "?:Path\\"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/git_repository.py:GitRepository"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/git_repository.py:GitRepository:_dependency"}, {"predicate": "has_class_method", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "metagpt/utils/dependency_file.py:DependencyFile:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "{\"lineno\":22,\"end_lineno\":108,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DependencyFile\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "{\"name\":\"DependencyFile\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"exists\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "{\"description\":\"The source code is a python class representing a DependencyFile for managing dependencies. It includes methods for loading, saving, updating, getting, and deleting dependencies from a file asynchronously.\",\"use_cases\":[{\"description\":\"Load dependencies from the file asynchronously.\",\"inputs\":[],\"outputs\":[],\"actors\":[\"User\"],\"steps\":[\"Check if the file exists\",\"Read the file asynchronously\",\"Parse the JSON data\",\"Update the internal dependencies\"],\"reason\":\"When the system needs to load dependencies from the file.\"},{\"description\":\"Save dependencies to the file asynchronously.\",\"inputs\":[],\"outputs\":[],\"actors\":[\"User\"],\"steps\":[\"Convert dependencies to JSON\",\"Open the file for writing asynchronously\",\"Write the JSON data to the file\"],\"reason\":\"When the system needs to save dependencies to the file.\"},{\"description\":\"Update dependencies for a file asynchronously.\",\"inputs\":[\"filename\",\"dependencies\",\"persist\"],\"outputs\":[],\"actors\":[\"User\"],\"steps\":[\"Load dependencies if persist is true\",\"Get the relative path of the filename\",\"Update the internal dependencies with the new dependencies\",\"Persist the changes if persist is true\"],\"reason\":\"When the system needs to update dependencies for a file.\"},{\"description\":\"Get dependencies for a file asynchronously.\",\"inputs\":[\"filename\",\"persist\"],\"outputs\":[\"A set of dependencies\"],\"actors\":[\"User\"],\"steps\":[\"Load dependencies if persist is true\",\"Get the relative path of the filename\",\"Return the set of dependencies for the file\"],\"reason\":\"When the system needs to retrieve dependencies for a file.\"},{\"description\":\"Delete the dependency file.\",\"inputs\":[],\"outputs\":[],\"actors\":[\"User\"],\"steps\":[\"Delete the dependency file if it exists\"],\"reason\":\"When the system needs to delete the dependency file.\"}],\"relationship\":[\"The 'Load dependencies from the file asynchronously' use case is related to 'Save dependencies to the file asynchronously' as it involves reading and writing to the file.\",\"The 'Update dependencies for a file asynchronously' use case is related to 'Get dependencies for a file asynchronously' as it involves updating and retrieving dependencies for a file.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/utils/dependency_file.py:DependencyFile", "target": "\nsequenceDiagram\n participant User\n participant DependencyFile\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:exists", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:exists", "target": "{\"name\":\"exists\",\"type_\":\"\",\"default_\":\"\",\"description\":\"exists\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:exists", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:delete_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:delete_file", "target": "{\"name\":\"delete_file\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_file()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(filename: Path \\\\| str, persist)\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:load", "target": "{\"name\":\"load\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:save", "target": "{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:update", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/dependency_file.py:DependencyFile:update", "target": "{\"name\":\"update\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"dependencies\",\"type_\":\"Set[Path\\\\|str]\",\"default_\":\"\",\"description\":\"dependencies: Set[Path \\\\| str]\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"persist\",\"type_\":\"\",\"default_\":\"\",\"description\":\"persist\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update(filename: Path \\\\| str, dependencies: Set[Path \\\\| str], persist)\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/design_api_review.py", "target": "metagpt/actions/design_api_review.py:DesignReview"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "{\"name\":\"DesignReview\",\"package\":\"metagpt/actions/design_api_review.py:DesignReview\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},{\"name\":\"api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_design\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd, api_design)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "metagpt/actions/design_api_review.py:DesignReview:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "metagpt/actions/design_api_review.py:DesignReview:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "metagpt/actions/design_api_review.py:DesignReview:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "{\"lineno\":14,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DesignReview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/design_api_review.py:DesignReview", "target": "{\"name\":\"DesignReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py:DesignReview:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api_review.py:DesignReview:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py:DesignReview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api_review.py:DesignReview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api_review.py:DesignReview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api_review.py:DesignReview:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},{\"name\":\"api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_design\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd, api_design)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/di_graph_repository.py", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "{\"name\":\"DiGraphRepository\",\"package\":\"metagpt/utils/di_graph_repository.py:DiGraphRepository\",\"attributes\":{\"pathname\":{\"name\":\"pathname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pathname\",\"compositions\":[]},\"repo\":{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]},\"root\":{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]},\"insert\":{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]},\"json\":{\"name\":\"json\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"json(): str\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(pathname: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"load_from\":{\"name\":\"load_from\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"GraphRepository\",\"description\":\"GraphRepository\",\"compositions\":[\"GraphRepository\"]},\"description\":\"load_from(pathname: str \\\\| Path): GraphRepository\",\"aggregations\":[\"GraphRepository\",\"str\\\\\",\"Path\"]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]},\"select\":{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\",\"GraphRepository\",\"SPO\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:delete"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:insert"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:json"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load_from"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:save"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:select"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "?:GraphRepository"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "?:SPO"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository"}, {"predicate": "has_class_method", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "metagpt/utils/di_graph_repository.py:DiGraphRepository:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "{\"lineno\":21,\"end_lineno\":88,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DiGraphRepository\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository", "target": "{\"name\":\"DiGraphRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"pathname\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"root\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname", "target": "{\"name\":\"pathname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"pathname\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:pathname", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo", "target": "{\"name\":\"repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root", "target": "{\"name\":\"root\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:root", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:insert", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:insert", "target": "{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:json", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:json", "target": "{\"name\":\"json\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"json(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load", "target": "{\"name\":\"load\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(pathname: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load_from", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:load_from", "target": "{\"name\":\"load_from\",\"args\":[{\"name\":\"pathname\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"pathname: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"GraphRepository\",\"description\":\"GraphRepository\",\"compositions\":[\"GraphRepository\"]},\"description\":\"load_from(pathname: str \\\\| Path): GraphRepository\",\"aggregations\":[\"GraphRepository\",\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:save", "target": "{\"name\":\"save\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:select", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:select", "target": "{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/project_repo.py", "target": "metagpt/utils/project_repo.py:DocFileRepositories"}, {"predicate": "has_class", "source": "metagpt/utils/project_repo.py", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "has_class", "source": "metagpt/utils/project_repo.py", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "{\"name\":\"DocFileRepositories\",\"package\":\"metagpt/utils/project_repo.py:DocFileRepositories\",\"attributes\":{\"class_view\":{\"name\":\"class_view\",\"type_\":\"\",\"default_\":\"\",\"description\":\"class_view\",\"compositions\":[]},\"code_plan_and_change\":{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]},\"code_summary\":{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]},\"graph_repo\":{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},\"system_design\":{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]},\"task\":{\"name\":\"task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:class_view"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:code_plan_and_change"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:code_summary"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:graph_repo"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:prd"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:system_design"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:task"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/file_repository.py:FileRepository"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:ProjectRepo:docs"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "metagpt/utils/project_repo.py:DocFileRepositories:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "{\"lineno\":42,\"end_lineno\":60,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocFileRepositories\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "{\"name\":\"DocFileRepositories\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"class_view\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_summary\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"system_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "{\"description\":\"This code defines a class for managing different types of file repositories related to project documentation.\",\"use_cases\":[{\"description\":\"Create DocFileRepositories instance\",\"inputs\":[\"git_repo\"],\"outputs\":[\"prd\",\"system_design\",\"task\",\"code_summary\",\"graph_repo\",\"class_view\",\"code_plan_and_change\"],\"actors\":[\"Project Manager\",\"Developer\"],\"steps\":[\"The Project Manager or Developer provides a git repository as input.\",\"The system creates a new DocFileRepositories instance with file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change.\",\"The system returns the file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change as output.\"],\"reason\":\"This use case is executed when a new instance of DocFileRepositories is required to manage different types of file repositories related to project documentation.\"}],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/utils/project_repo.py:DocFileRepositories", "target": "\nsequenceDiagram\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:class_view", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:class_view", "target": "{\"name\":\"class_view\",\"type_\":\"\",\"default_\":\"\",\"description\":\"class_view\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:code_plan_and_change", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:code_plan_and_change", "target": "{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:code_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:code_summary", "target": "{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:graph_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:graph_repo", "target": "{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:prd", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:prd", "target": "{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:system_design", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:system_design", "target": "{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:task", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:DocFileRepositories:task", "target": "{\"name\":\"task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"task\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/pycst.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:DocstringCollector"}, {"predicate": "has_class", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:DocstringTransformer"}, {"predicate": "has_function", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:get_docstring_statement"}, {"predicate": "has_function", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:has_decorator"}, {"predicate": "has_function", "source": "metagpt/utils/pycst.py", "target": "metagpt/utils/pycst.py:merge_docstring"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "{\"name\":\"DocstringCollector\",\"package\":\"metagpt/utils/pycst.py:DocstringCollector\",\"attributes\":{\"docstrings\":{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]},\"stack\":{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}},\"methods\":{\"leave_ClassDef\":{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_ClassDef(node: cst.ClassDef): None\",\"aggregations\":[\"cst.ClassDef\"]},\"leave_FunctionDef\":{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_FunctionDef(node: cst.FunctionDef): None\",\"aggregations\":[\"cst.FunctionDef\"]},\"leave_Module\":{\"name\":\"leave_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_Module(node: cst.Module): None\",\"aggregations\":[\"cst.Module\"]},\"visit_ClassDef\":{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"cst.ClassDef\",\"bool\\\\\"]},\"visit_FunctionDef\":{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]},\"visit_Module\":{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}},\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"],\"aggregations\":[\"cst.ClassDef\",\"cst.FunctionDef\",\"cst.Module\",\"bool\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:docstrings"}, {"predicate": "has_class_property", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:stack"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:leave_ClassDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:leave_FunctionDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:leave_Module"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:visit_ClassDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:visit_FunctionDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:visit_Module"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:..."}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:cst.SimpleStatementLine"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:tuple"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:cst.ClassDef"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:cst.FunctionDef"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:cst.Module"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "?:bool\\"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "metagpt/utils/pycst.py:DocstringCollector:_leave"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "{\"lineno\":60,\"end_lineno\":98,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringCollector\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/pycst.py:DocstringCollector", "target": "{\"name\":\"DocstringCollector\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstrings\",\"visibility\":\"+\",\"value_type\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_value\":\"\"},{\"name\":\"stack\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:docstrings", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:docstrings", "target": "{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:stack", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:stack", "target": "{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_ClassDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_ClassDef", "target": "{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_ClassDef(node: cst.ClassDef): None\",\"aggregations\":[\"cst.ClassDef\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_FunctionDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_FunctionDef", "target": "{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_FunctionDef(node: cst.FunctionDef): None\",\"aggregations\":[\"cst.FunctionDef\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_Module", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:leave_Module", "target": "{\"name\":\"leave_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"leave_Module(node: cst.Module): None\",\"aggregations\":[\"cst.Module\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_ClassDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_ClassDef", "target": "{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"cst.ClassDef\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_FunctionDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_FunctionDef", "target": "{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_Module", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringCollector:visit_Module", "target": "{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "{\"name\":\"DocstringTransformer\",\"package\":\"metagpt/utils/pycst.py:DocstringTransformer\",\"attributes\":{\"docstrings\":{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]},\"stack\":{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}},\"methods\":{\"leave_ClassDef\":{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"original_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"updated_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_ClassDef(original_node: cst.ClassDef, updated_node: cst.ClassDef): cst.CSTNode\",\"aggregations\":[\"cst.ClassDef\",\"cst.CSTNode\"]},\"leave_FunctionDef\":{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"original_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"updated_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_FunctionDef(original_node: cst.FunctionDef, updated_node: cst.FunctionDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.FunctionDef\"]},\"leave_Module\":{\"name\":\"leave_Module\",\"args\":[{\"name\":\"original_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"original_node: Module\",\"compositions\":[\"Module\"]},{\"name\":\"updated_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"updated_node: Module\",\"compositions\":[\"Module\"]}],\"return_args\":{\"type_\":\"Module\",\"description\":\"Module\",\"compositions\":[\"Module\"]},\"description\":\"leave_Module(original_node: Module, updated_node: Module): Module\",\"aggregations\":[\"Module\"]},\"visit_ClassDef\":{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"cst.ClassDef\",\"bool\\\\\"]},\"visit_FunctionDef\":{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]},\"visit_Module\":{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}},\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"],\"aggregations\":[\"cst.ClassDef\",\"cst.CSTNode\",\"cst.FunctionDef\",\"Module\",\"bool\\\\\",\"cst.Module\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:docstrings"}, {"predicate": "has_class_property", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:stack"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:leave_ClassDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:leave_FunctionDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:leave_Module"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:visit_ClassDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:visit_FunctionDef"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:visit_Module"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:..."}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.SimpleStatementLine"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:tuple"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.ClassDef"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.CSTNode"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.FunctionDef"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:Module"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:bool\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "?:cst.Module"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "metagpt/utils/pycst.py:DocstringTransformer:_leave"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "{\"lineno\":101,\"end_lineno\":156,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocstringTransformer\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/pycst.py:DocstringTransformer", "target": "{\"name\":\"DocstringTransformer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docstrings\",\"visibility\":\"+\",\"value_type\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_value\":\"\"},{\"name\":\"stack\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:docstrings", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:docstrings", "target": "{\"name\":\"docstrings\",\"type_\":\"dict[tuple[str,...],cst.SimpleStatementLine]\",\"default_\":\"\",\"description\":\"docstrings : dict[tuple[str, ...], cst.SimpleStatementLine]\",\"compositions\":[\"...\",\"cst.SimpleStatementLine\",\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:stack", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:stack", "target": "{\"name\":\"stack\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"stack : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_ClassDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_ClassDef", "target": "{\"name\":\"leave_ClassDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"original_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"updated_node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_ClassDef(original_node: cst.ClassDef, updated_node: cst.ClassDef): cst.CSTNode\",\"aggregations\":[\"cst.ClassDef\",\"cst.CSTNode\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_FunctionDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_FunctionDef", "target": "{\"name\":\"leave_FunctionDef\",\"args\":[{\"name\":\"original_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"original_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]},{\"name\":\"updated_node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"updated_node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"cst.CSTNode\",\"description\":\"cst.CSTNode\",\"compositions\":[\"cst.CSTNode\"]},\"description\":\"leave_FunctionDef(original_node: cst.FunctionDef, updated_node: cst.FunctionDef): cst.CSTNode\",\"aggregations\":[\"cst.CSTNode\",\"cst.FunctionDef\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_Module", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:leave_Module", "target": "{\"name\":\"leave_Module\",\"args\":[{\"name\":\"original_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"original_node: Module\",\"compositions\":[\"Module\"]},{\"name\":\"updated_node\",\"type_\":\"Module\",\"default_\":\"\",\"description\":\"updated_node: Module\",\"compositions\":[\"Module\"]}],\"return_args\":{\"type_\":\"Module\",\"description\":\"Module\",\"compositions\":[\"Module\"]},\"description\":\"leave_Module(original_node: Module, updated_node: Module): Module\",\"aggregations\":[\"Module\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_ClassDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_ClassDef", "target": "{\"name\":\"visit_ClassDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.ClassDef\",\"default_\":\"\",\"description\":\"node: cst.ClassDef\",\"compositions\":[\"cst.ClassDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_ClassDef(node: cst.ClassDef): bool \\\\| None\",\"aggregations\":[\"cst.ClassDef\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_FunctionDef", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_FunctionDef", "target": "{\"name\":\"visit_FunctionDef\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.FunctionDef\",\"default_\":\"\",\"description\":\"node: cst.FunctionDef\",\"compositions\":[\"cst.FunctionDef\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_FunctionDef(node: cst.FunctionDef): bool \\\\| None\",\"aggregations\":[\"cst.FunctionDef\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_Module", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/pycst.py:DocstringTransformer:visit_Module", "target": "{\"name\":\"visit_Module\",\"args\":[{\"name\":\"node\",\"type_\":\"cst.Module\",\"default_\":\"\",\"description\":\"node: cst.Module\",\"compositions\":[\"cst.Module\"]}],\"return_args\":{\"type_\":\"bool\\\\|None\",\"description\":\"bool \\\\| None\",\"compositions\":[\"bool\\\\\"]},\"description\":\"visit_Module(node: cst.Module): bool \\\\| None\",\"aggregations\":[\"cst.Module\",\"bool\\\\\"]}"}, {"predicate": "is", "source": "metagpt/document.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:Document"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:DocumentStatus"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:IndexableDocument"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:Repo"}, {"predicate": "has_class", "source": "metagpt/document.py", "target": "metagpt/document.py:RepoMetadata"}, {"predicate": "has_function", "source": "metagpt/document.py", "target": "metagpt/document.py:validate_cols"}, {"predicate": "has_function", "source": "metagpt/document.py", "target": "metagpt/document.py:read_data"}, {"predicate": "is", "source": "metagpt/document.py:Document", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document", "target": "{\"name\":\"Document\",\"package\":\"metagpt/document.py:Document\",\"attributes\":{\"author\":{\"name\":\"author\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"author : str\",\"compositions\":[]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]},\"reviews\":{\"name\":\"reviews\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"reviews : list\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}},\"methods\":{\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]},\"from_text\":{\"name\":\"from_text\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_text(text: str, path: Optional[Path])\",\"aggregations\":[\"Path\"]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"to_path\":{\"name\":\"to_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path(path: Optional[Path])\",\"aggregations\":[\"Path\"]}},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:author"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:content"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:name"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:path"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:reviews"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:status"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:from_path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:from_text"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:persist"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Document", "target": "metagpt/document.py:Document:to_path"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:Document", "target": "?:Path"}, {"predicate": "has_page_info", "source": "metagpt/document.py:Document", "target": "{\"lineno\":62,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Document\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:Document", "target": "{\"name\":\"Document\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"author\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"reviews\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:author", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:author", "target": "{\"name\":\"author\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"author : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:path", "target": "{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:reviews", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:reviews", "target": "{\"name\":\"reviews\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"reviews : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:status", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:status", "target": "{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:from_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:from_path", "target": "{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:from_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:from_text", "target": "{\"name\":\"from_text\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_text(text: str, path: Optional[Path])\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Document:to_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Document:to_path", "target": "{\"name\":\"to_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"path: Optional[Path]\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path(path: Optional[Path])\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document", "target": "{\"name\":\"Document\",\"package\":\"metagpt/schema.py:Document\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"root_path\":{\"name\":\"root_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"root_path : str\",\"compositions\":[]},\"root_relative_path\":{\"name\":\"root_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_relative_path\",\"compositions\":[]}},\"methods\":{\"get_meta\":{\"name\":\"get_meta\",\"args\":[],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"get_meta(): Document\",\"aggregations\":[\"Document\"]}},\"compositions\":[],\"aggregations\":[\"Document\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:content"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:root_path"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:root_relative_path"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:get_meta"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:Document", "target": "?:Document"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Document", "target": "metagpt/actions/write_code.py:WriteCode"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Document", "target": "metagpt/actions/write_code.py:WriteCode:i_context"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:CodingContext"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:CodingContext:code_doc"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:TestingContext"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:TestingContext:code_doc"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:__str__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Document", "target": "metagpt/schema.py:Document:__repr__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:Document", "target": "{\"lineno\":127,\"end_lineno\":156,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Document\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:Document", "target": "{\"name\":\"Document\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"root_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"root_relative_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:root_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:root_path", "target": "{\"name\":\"root_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"root_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:root_relative_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:root_relative_path", "target": "{\"name\":\"root_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_relative_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Document:root_relative_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Document:get_meta", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Document:get_meta", "target": "{\"name\":\"get_meta\",\"args\":[],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"get_meta(): Document\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/document.py:DocumentStatus", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:DocumentStatus", "target": "{\"name\":\"DocumentStatus\",\"package\":\"metagpt/document.py:DocumentStatus\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:DocumentStatus", "target": "metagpt/document.py:DocumentStatus:name"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:DocumentStatus", "target": "metagpt/document.py:Document"}, {"predicate": "isCompositeOn", "source": "metagpt/document.py:DocumentStatus", "target": "metagpt/document.py:Document:status"}, {"predicate": "has_page_info", "source": "metagpt/document.py:DocumentStatus", "target": "{\"lineno\":53,\"end_lineno\":59,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DocumentStatus\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:DocumentStatus", "target": "{\"name\":\"DocumentStatus\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:DocumentStatus:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:DocumentStatus:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Documents", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Documents", "target": "{\"name\":\"Documents\",\"package\":\"metagpt/schema.py:Documents\",\"attributes\":{\"docs\":{\"name\":\"docs\",\"type_\":\"Dict[str,Document]\",\"default_\":\"\",\"description\":\"docs : Dict[str, Document]\",\"compositions\":[\"Document\"]}},\"methods\":{\"from_iterable\":{\"name\":\"from_iterable\",\"args\":[{\"name\":\"documents\",\"type_\":\"Iterable[Document]\",\"default_\":\"\",\"description\":\"documents: Iterable[Document]\",\"compositions\":[\"Document\",\"Iterable\"]}],\"return_args\":{\"type_\":\"Documents\",\"description\":\"Documents\",\"compositions\":[\"Documents\"]},\"description\":\"from_iterable(documents: Iterable[Document]): Documents\",\"aggregations\":[\"Documents\",\"Iterable\",\"Document\"]},\"to_action_output\":{\"name\":\"to_action_output\",\"args\":[],\"return_args\":{\"type_\":\"'ActionOutput'\",\"description\":\"'ActionOutput'\",\"compositions\":[\"ActionOutput\"]},\"description\":\"to_action_output(): 'ActionOutput'\",\"aggregations\":[\"ActionOutput\"]}},\"compositions\":[\"Document\"],\"aggregations\":[\"Documents\",\"Iterable\",\"ActionOutput\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Documents", "target": "metagpt/schema.py:Documents:docs"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Documents", "target": "metagpt/schema.py:Documents:from_iterable"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Documents", "target": "metagpt/schema.py:Documents:to_action_output"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Documents", "target": "?:Document"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:Documents", "target": "?:Documents"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:Documents", "target": "?:Iterable"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:Documents", "target": "?:ActionOutput"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:Documents", "target": "{\"lineno\":159,\"end_lineno\":186,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Documents\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:Documents", "target": "{\"name\":\"Documents\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Documents:docs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Documents:docs", "target": "{\"name\":\"docs\",\"type_\":\"Dict[str,Document]\",\"default_\":\"\",\"description\":\"docs : Dict[str, Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Documents:from_iterable", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Documents:from_iterable", "target": "{\"name\":\"from_iterable\",\"args\":[{\"name\":\"documents\",\"type_\":\"Iterable[Document]\",\"default_\":\"\",\"description\":\"documents: Iterable[Document]\",\"compositions\":[\"Document\",\"Iterable\"]}],\"return_args\":{\"type_\":\"Documents\",\"description\":\"Documents\",\"compositions\":[\"Documents\"]},\"description\":\"from_iterable(documents: Iterable[Document]): Documents\",\"aggregations\":[\"Documents\",\"Iterable\",\"Document\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Documents:to_action_output", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Documents:to_action_output", "target": "{\"name\":\"to_action_output\",\"args\":[],\"return_args\":{\"type_\":\"'ActionOutput'\",\"description\":\"'ActionOutput'\",\"compositions\":[\"ActionOutput\"]},\"description\":\"to_action_output(): 'ActionOutput'\",\"aggregations\":[\"ActionOutput\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "{\"name\":\"DotClassAttribute\",\"package\":\"metagpt/repo_parser.py:DotClassAttribute\",\"attributes\":{\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"default_\":{\"name\":\"default_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_ : str\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"type_\":{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassAttribute'\",\"description\":\"'DotClassAttribute'\",\"compositions\":[\"DotClassAttribute\"]},\"description\":\"parse(v: str): 'DotClassAttribute'\",\"aggregations\":[\"DotClassAttribute\"]},\"parse_compositions\":{\"name\":\"parse_compositions\",\"args\":[{\"name\":\"types_part\",\"type_\":\"\",\"default_\":\"\",\"description\":\"types_part\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_compositions(types_part): List[str]\",\"aggregations\":[]},\"remove_white_spaces\":{\"name\":\"remove_white_spaces\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove_white_spaces(v: str)\",\"aggregations\":[]},\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"DotClassAttribute\"]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:compositions"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:default_"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:description"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:name"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:type_"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:parse"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:parse_compositions"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:remove_white_spaces"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:sort"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "?:DotClassAttribute"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "metagpt/repo_parser.py:DotClassAttribute:_split_literal"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "{\"lineno\":42,\"end_lineno\":157,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassAttribute\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotClassAttribute", "target": "{\"name\":\"DotClassAttribute\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"default_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"type_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:compositions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:compositions", "target": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:default_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:default_", "target": "{\"name\":\"default_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:type_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:type_", "target": "{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:parse", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:parse", "target": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassAttribute'\",\"description\":\"'DotClassAttribute'\",\"compositions\":[\"DotClassAttribute\"]},\"description\":\"parse(v: str): 'DotClassAttribute'\",\"aggregations\":[\"DotClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:parse_compositions", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:parse_compositions", "target": "{\"name\":\"parse_compositions\",\"args\":[{\"name\":\"types_part\",\"type_\":\"\",\"default_\":\"\",\"description\":\"types_part\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_compositions(types_part): List[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:remove_white_spaces", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:remove_white_spaces", "target": "{\"name\":\"remove_white_spaces\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"remove_white_spaces(v: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:sort", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassAttribute:sort", "target": "{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "{\"name\":\"DotClassInfo\",\"package\":\"metagpt/repo_parser.py:DotClassInfo\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"attributes\":{\"name\":\"attributes\",\"type_\":\"Dict[str,DotClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : Dict[str, DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]},\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"methods\":{\"name\":\"methods\",\"type_\":\"Dict[str,DotClassMethod]\",\"default_\":\"\",\"description\":\"methods : Dict[str, DotClassMethod]\",\"compositions\":[\"DotClassMethod\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"package\":{\"name\":\"package\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"package : Optional[str]\",\"compositions\":[]}},\"methods\":{\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[\"DotClassAttribute\",\"DotClassMethod\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:aggregations"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:attributes"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:compositions"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:methods"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:name"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:package"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassInfo:sort"}, {"predicate": "is_composite_of", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassAttribute"}, {"predicate": "is_composite_of", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "metagpt/repo_parser.py:DotClassMethod"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "{\"lineno\":160,\"end_lineno\":172,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassInfo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "{\"name\":\"DotClassInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"attributes\",\"visibility\":\"+\",\"value_type\":\"Dict[str,DotClassAttribute]\",\"default_value\":\"\"},{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"methods\",\"visibility\":\"+\",\"value_type\":\"Dict[str,DotClassMethod]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"package\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "?:DotClassAttribute"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:DotClassInfo", "target": "?:DotClassMethod"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:aggregations", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:aggregations", "target": "{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:attributes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:attributes", "target": "{\"name\":\"attributes\",\"type_\":\"Dict[str,DotClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : Dict[str, DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:compositions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:compositions", "target": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:methods", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:methods", "target": "{\"name\":\"methods\",\"type_\":\"Dict[str,DotClassMethod]\",\"default_\":\"\",\"description\":\"methods : Dict[str, DotClassMethod]\",\"compositions\":[\"DotClassMethod\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:package", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:package", "target": "{\"name\":\"package\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"package : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassInfo:sort", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassInfo:sort", "target": "{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "{\"name\":\"DotClassMethod\",\"package\":\"metagpt/repo_parser.py:DotClassMethod\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"args\":{\"name\":\"args\",\"type_\":\"List[DotClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"return_args\":{\"name\":\"return_args\",\"type_\":\"Optional[DotReturn]\",\"default_\":\"\",\"description\":\"return_args : Optional[DotReturn]\",\"compositions\":[\"DotReturn\"]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassMethod'\",\"description\":\"'DotClassMethod'\",\"compositions\":[\"DotClassMethod\"]},\"description\":\"parse(v: str): 'DotClassMethod'\",\"aggregations\":[\"DotClassMethod\"]}},\"compositions\":[\"DotClassAttribute\",\"DotReturn\"],\"aggregations\":[\"DotClassMethod\"]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:aggregations"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:args"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:description"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:name"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:return_args"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:parse"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "?:DotClassMethod"}, {"predicate": "is_composite_of", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassAttribute"}, {"predicate": "is_composite_of", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotReturn"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:_parse_name"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "metagpt/repo_parser.py:DotClassMethod:_parse_args"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "{\"lineno\":202,\"end_lineno\":264,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassMethod\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "{\"name\":\"DotClassMethod\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"List[DotClassAttribute]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"return_args\",\"visibility\":\"+\",\"value_type\":\"Optional[DotReturn]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "?:DotClassAttribute"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:DotClassMethod", "target": "?:DotReturn"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:aggregations", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:aggregations", "target": "{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:args", "target": "{\"name\":\"args\",\"type_\":\"List[DotClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[DotClassAttribute]\",\"compositions\":[\"DotClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:return_args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:return_args", "target": "{\"name\":\"return_args\",\"type_\":\"Optional[DotReturn]\",\"default_\":\"\",\"description\":\"return_args : Optional[DotReturn]\",\"compositions\":[\"DotReturn\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:parse", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassMethod:parse", "target": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotClassMethod'\",\"description\":\"'DotClassMethod'\",\"compositions\":[\"DotClassMethod\"]},\"description\":\"parse(v: str): 'DotClassMethod'\",\"aggregations\":[\"DotClassMethod\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "{\"name\":\"DotClassRelationship\",\"package\":\"metagpt/repo_parser.py:DotClassRelationship\",\"attributes\":{\"dest\":{\"name\":\"dest\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dest : str\",\"compositions\":[]},\"label\":{\"name\":\"label\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"label : Optional[str]\",\"compositions\":[]},\"relationship\":{\"name\":\"relationship\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"relationship : str\",\"compositions\":[]},\"src\":{\"name\":\"src\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"src : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "metagpt/repo_parser.py:DotClassRelationship:dest"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "metagpt/repo_parser.py:DotClassRelationship:label"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "metagpt/repo_parser.py:DotClassRelationship:relationship"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "metagpt/repo_parser.py:DotClassRelationship:src"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "{\"lineno\":175,\"end_lineno\":179,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotClassRelationship\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotClassRelationship", "target": "{\"name\":\"DotClassRelationship\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"dest\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"label\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"relationship\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship:dest", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship:dest", "target": "{\"name\":\"dest\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"dest : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship:label", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship:label", "target": "{\"name\":\"label\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"label : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship:relationship", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship:relationship", "target": "{\"name\":\"relationship\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"relationship : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassRelationship:src", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotClassRelationship:src", "target": "{\"name\":\"src\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"src : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn", "target": "{\"name\":\"DotReturn\",\"package\":\"metagpt/repo_parser.py:DotReturn\",\"attributes\":{\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"type_\":{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}},\"methods\":{\"parse\":{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotReturn'\\\\|None\",\"description\":\"'DotReturn' \\\\| None\",\"compositions\":[\"DotReturn\\\\\"]},\"description\":\"parse(v: str): 'DotReturn' \\\\| None\",\"aggregations\":[\"DotReturn\\\\\"]},\"sort\":{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"DotReturn\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:compositions"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:description"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:type_"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:parse"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:DotReturn", "target": "metagpt/repo_parser.py:DotReturn:sort"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:DotReturn", "target": "?:DotReturn\\"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:DotReturn", "target": "{\"lineno\":182,\"end_lineno\":199,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"DotReturn\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:DotReturn", "target": "{\"name\":\"DotReturn\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"type_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:compositions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:compositions", "target": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:type_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:type_", "target": "{\"name\":\"type_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:parse", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:parse", "target": "{\"name\":\"parse\",\"args\":[{\"name\":\"v\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"v: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'DotReturn'\\\\|None\",\"description\":\"'DotReturn' \\\\| None\",\"compositions\":[\"DotReturn\\\\\"]},\"description\":\"parse(v: str): 'DotReturn' \\\\| None\",\"aggregations\":[\"DotReturn\\\\\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotReturn:sort", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:DotReturn:sort", "target": "{\"name\":\"sort\",\"args\":[{\"name\":\"lst\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"lst: List\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"sort(lst: List): List\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "{\"name\":\"Embedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:Embedding\",\"attributes\":{\"embedding\":{\"name\":\"embedding\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"embedding : List[float]\",\"compositions\":[]},\"index\":{\"name\":\"index\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"index : int\",\"compositions\":[]},\"object\":{\"name\":\"object\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding:embedding"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding:index"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding:object"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "{\"lineno\":19,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Embedding\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding", "target": "{\"name\":\"Embedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"List[float]\",\"default_value\":\"\"},{\"name\":\"index\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"object\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:embedding", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:embedding", "target": "{\"name\":\"embedding\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"embedding : List[float]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:index", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:index", "target": "{\"name\":\"index\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"index : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:object", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Embedding:object", "target": "{\"name\":\"object\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/engineer.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/engineer.py", "target": "metagpt/roles/engineer.py:Engineer"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer", "target": "{\"name\":\"Engineer\",\"package\":\"metagpt/roles/engineer.py:Engineer\",\"attributes\":{\"action_description\":{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]},\"code_todos\":{\"name\":\"code_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"code_todos : list\",\"compositions\":[]},\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"n_borg\":{\"name\":\"n_borg\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_borg : int\",\"compositions\":[]},\"n_summarize\":{\"name\":\"n_summarize\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_summarize : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"next_todo_action\":{\"name\":\"next_todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"next_todo_action : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]},\"summarize_todos\":{\"name\":\"summarize_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"summarize_todos : list\",\"compositions\":[]},\"use_code_review\":{\"name\":\"use_code_review\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_code_review : bool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:action_description"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:code_todos"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:n_borg"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:n_summarize"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:next_todo_action"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:src_workspace"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:summarize_todos"}, {"predicate": "has_class_property", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:use_code_review"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_parse_tasks"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act_sp_with_cr"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act_write_code"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act_summarize"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_act_code_plan_and_change"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_is_pass"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_coding_context"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_coding_doc"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_code_actions"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_summarize_actions"}, {"predicate": "has_class_method", "source": "metagpt/roles/engineer.py:Engineer", "target": "metagpt/roles/engineer.py:Engineer:_new_code_plan_and_change_action"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:Engineer", "target": "{\"lineno\":62,\"end_lineno\":360,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Engineer\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/engineer.py:Engineer", "target": "{\"name\":\"Engineer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"action_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_todos\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_borg\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_summarize\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"next_todo_action\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"summarize_todos\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"use_code_review\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/roles/engineer.py:Engineer", "target": "{\"description\":\"The source code represents an Engineer role responsible for writing and possibly reviewing code. It includes attributes and methods for writing and reviewing code, summarizing code, and writing code plan and change. It also includes methods for determining the mode of action, thinking, and acting based on whether code review is used.\",\"use_cases\":[{\"description\":\"Write Code\",\"inputs\":[\"coding_context\"],\"outputs\":[\"changed_files\"],\"actors\":[\"Engineer\"],\"steps\":[\"Select essential information from the historical data to reduce the length of the prompt\",\"Run the code review if enabled\",\"Save the changed files and relevant messages\",\"Return the changed files\"],\"reason\":\"When the engineer needs to write code\"},{\"description\":\"Summarize Code\",\"inputs\":[\"summary\"],\"outputs\":[\"tasks\"],\"actors\":[\"Engineer\"],\"steps\":[\"Run the code summary for each pair of (system_design_doc, task_doc)\",\"Save the summary and check if it passes\",\"Send the summary to QA Engineer if needed\",\"Return the tasks if not passed\"],\"reason\":\"When the engineer needs to summarize code\"},{\"description\":\"Write Code Plan and Change\",\"inputs\":[\"files\",\"requirement\"],\"outputs\":[\"code_plan_and_change\"],\"actors\":[\"Engineer\"],\"steps\":[\"Write code plan and change that guides subsequent WriteCode and WriteCodeReview\",\"Save the code plan and change\",\"Return the code plan and change\"],\"reason\":\"When the engineer needs to write code plan and change\"}],\"relationship\":[\"Write Code is performed by Engineer\",\"Summarize Code is performed by Engineer\",\"Write Code Plan and Change is performed by Engineer\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/roles/engineer.py:Engineer", "target": "\nsequenceDiagram\n participant Engineer\n\n Engineer->>Engineer: action_description\n Engineer->>Engineer: list code_todos\n Engineer->>Engineer: str constraints\n Engineer->>Engineer: str goal\n Engineer->>Engineer: int n_borg\n Engineer->>Engineer: int n_summarize\n Engineer->>Engineer: str name\n Engineer->>Engineer: str next_todo_action\n Engineer->>Engineer: str profile\n Engineer->>Engineer: src_workspace\n Engineer->>Engineer: list summarize_todos\n Engineer->>Engineer: bool use_code_review\n"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:action_description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:action_description", "target": "{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:action_description", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:code_todos", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:code_todos", "target": "{\"name\":\"code_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"code_todos : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:n_borg", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:n_borg", "target": "{\"name\":\"n_borg\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_borg : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:n_summarize", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:n_summarize", "target": "{\"name\":\"n_summarize\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_summarize : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:next_todo_action", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:next_todo_action", "target": "{\"name\":\"next_todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"next_todo_action : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:src_workspace", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:src_workspace", "target": "{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:summarize_todos", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:summarize_todos", "target": "{\"name\":\"summarize_todos\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"summarize_todos : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:use_code_review", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/engineer.py:Engineer:use_code_review", "target": "{\"name\":\"use_code_review\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_code_review : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "{\"name\":\"EnronTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:EnronTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"subj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen(subj)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "metagpt/tools/prompt_writer.py:EnronTemplate:gen"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "metagpt/tools/prompt_writer.py:EnronTemplate:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "{\"lineno\":77,\"end_lineno\":92,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"EnronTemplate\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/prompt_writer.py:EnronTemplate", "target": "{\"name\":\"EnronTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:EnronTemplate:gen", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:EnronTemplate:gen", "target": "{\"name\":\"gen\",\"args\":[{\"name\":\"subj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"subj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen(subj)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Entity", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Entity", "target": "{\"name\":\"Entity\",\"package\":\"metagpt/learn/skill_loader.py:Entity\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"name : Optional[str]\",\"compositions\":[]},\"skills\":{\"name\":\"skills\",\"type_\":\"List[Skill]\",\"default_\":\"\",\"description\":\"skills : List[Skill]\",\"compositions\":[\"Skill\"]}},\"methods\":{},\"compositions\":[\"Skill\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Entity", "target": "metagpt/learn/skill_loader.py:Entity:name"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Entity", "target": "metagpt/learn/skill_loader.py:Entity:skills"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:Entity", "target": "metagpt/learn/skill_loader.py:Skill"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Entity", "target": "{\"lineno\":53,\"end_lineno\":55,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Entity\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Entity", "target": "{\"name\":\"Entity\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"skills\",\"visibility\":\"+\",\"value_type\":\"List[Skill]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Entity", "target": "?:Skill"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Entity:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Entity:name", "target": "{\"name\":\"name\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"name : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Entity:skills", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Entity:skills", "target": "{\"name\":\"skills\",\"type_\":\"List[Skill]\",\"default_\":\"\",\"description\":\"skills : List[Skill]\",\"compositions\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/environment.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/environment.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/environment.py", "target": "metagpt/environment.py:Environment"}, {"predicate": "is", "source": "metagpt/environment.py:Environment", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment", "target": "{\"name\":\"Environment\",\"package\":\"metagpt/environment.py:Environment\",\"attributes\":{\"context\":{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history : str\",\"compositions\":[]},\"is_idle\":{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]},\"member_addrs\":{\"name\":\"member_addrs\",\"type_\":\"dict[Role,Set]\",\"default_\":\"\",\"description\":\"member_addrs : dict[Role, Set]\",\"compositions\":[\"Role\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"roles\":{\"name\":\"roles\",\"type_\":\"dict[str,SerializeAsAny[Role]]\",\"default_\":\"\",\"description\":\"roles : dict[str, SerializeAsAny[Role]]\",\"compositions\":[\"Role\",\"SerializeAsAny\"]}},\"methods\":{\"add_role\":{\"name\":\"add_role\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_role(role: Role)\",\"aggregations\":[\"Role\"]},\"add_roles\":{\"name\":\"add_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Role]\",\"default_\":\"\",\"description\":\"roles: Iterable[Role]\",\"compositions\":[\"Iterable\",\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_roles(roles: Iterable[Role])\",\"aggregations\":[\"Role\",\"Iterable\"]},\"archive\":{\"name\":\"archive\",\"args\":[{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(auto_archive)\",\"aggregations\":[]},\"get_addresses\":{\"name\":\"get_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_addresses(obj)\",\"aggregations\":[]},\"get_role\":{\"name\":\"get_role\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Role\",\"description\":\"Role\",\"compositions\":[\"Role\"]},\"description\":\"get_role(name: str): Role\",\"aggregations\":[\"Role\"]},\"get_roles\":{\"name\":\"get_roles\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,Role]\",\"description\":\"dict[str, Role]\",\"compositions\":[\"Role\"]},\"description\":\"get_roles(): dict[str, Role]\",\"aggregations\":[\"Role\"]},\"init_roles\":{\"name\":\"init_roles\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_roles()\",\"aggregations\":[]},\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"peekable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"peekable: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"publish_message(message: Message, peekable: bool): bool\",\"aggregations\":[\"Message\"]},\"role_names\":{\"name\":\"role_names\",\"args\":[],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"role_names(): list[str]\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]},\"set_addresses\":{\"name\":\"set_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]},{\"name\":\"addresses\",\"type_\":\"\",\"default_\":\"\",\"description\":\"addresses\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(obj, addresses)\",\"aggregations\":[]}},\"compositions\":[\"Role\",\"SerializeAsAny\"],\"aggregations\":[\"Iterable\",\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:context"}, {"predicate": "has_class_property", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:desc"}, {"predicate": "has_class_property", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:history"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:is_idle"}, {"predicate": "has_class_property", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:member_addrs"}, {"predicate": "has_class_property", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:model_config"}, {"predicate": "has_class_property", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:roles"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:add_role"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:add_roles"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:archive"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:get_addresses"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:get_role"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:get_roles"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:init_roles"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:publish_message"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:role_names"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:run"}, {"predicate": "has_class_method", "source": "metagpt/environment.py:Environment", "target": "metagpt/environment.py:Environment:set_addresses"}, {"predicate": "isCompositeOf", "source": "metagpt/environment.py:Environment", "target": "?:SerializeAsAny"}, {"predicate": "isAggregateOf", "source": "metagpt/environment.py:Environment", "target": "?:Iterable"}, {"predicate": "isAggregateOf", "source": "metagpt/environment.py:Environment", "target": "?:Message"}, {"predicate": "isCompositeOf", "source": "metagpt/environment.py:Environment", "target": "metagpt/team.py:Team"}, {"predicate": "isCompositeOn", "source": "metagpt/environment.py:Environment", "target": "metagpt/team.py:Team:env"}, {"predicate": "is_composite_of", "source": "metagpt/environment.py:Environment", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:Environment", "target": "{\"lineno\":26,\"end_lineno\":131,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Environment\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/environment.py:Environment", "target": "{\"name\":\"Environment\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_idle\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"member_addrs\",\"visibility\":\"+\",\"value_type\":\"dict[Role,Set]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"roles\",\"visibility\":\"+\",\"value_type\":\"dict[str,SerializeAsAny[Role]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/environment.py:Environment", "target": "?:Role"}, {"predicate": "has_class_use_case", "source": "metagpt/environment.py:Environment", "target": "{\"description\":\"The source code defines an Environment class that hosts a batch of roles. Roles can publish messages to the environment and can be observed by other roles. The environment also provides methods to add roles, publish messages, run role processes, and manage role addresses.\",\"use_cases\":[{\"description\":\"Add a role to the current environment\",\"inputs\":[\"role: Role\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"Add the role to the roles dictionary of the environment\",\"Set the environment for the role\",\"Set the context for the role\"],\"reason\":\"When a new role needs to be added to the environment\"},{\"description\":\"Add a batch of roles to the current environment\",\"inputs\":[\"roles: Iterable[Role]\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"Add each role to the roles dictionary of the environment\",\"Set the environment for each role\",\"Set the context for each role\"],\"reason\":\"When multiple roles need to be added to the environment\"},{\"description\":\"Publish a message to the recipients in the environment\",\"inputs\":[\"message: Message\",\"peekable: bool\"],\"outputs\":[\"bool\"],\"actors\":[\"Environment\"],\"steps\":[\"Iterate through the member addresses of the environment\",\"Check if the message is to be sent to the current recipient\",\"If found, put the message in the recipient's queue\",\"Update the history of the environment\"],\"reason\":\"When a message needs to be distributed to the recipients in the environment\"},{\"description\":\"Process all role runs at once\",\"inputs\":[\"k: int\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"For each role, initiate a run process\",\"Gather all the run processes using asyncio\",\"Check if all actions have been executed\"],\"reason\":\"When all role processes need to be executed at once\"},{\"description\":\"Get all roles in the environment\",\"inputs\":[],\"outputs\":[\"dict[str, Role]\"],\"actors\":[\"Environment\"],\"steps\":[\"Return the roles dictionary of the environment\"],\"reason\":\"When all roles in the environment need to be retrieved\"},{\"description\":\"Get a specific role in the environment\",\"inputs\":[\"name: str\"],\"outputs\":[\"Role\"],\"actors\":[\"Environment\"],\"steps\":[\"Return the role with the specified name from the roles dictionary of the environment\"],\"reason\":\"When a specific role in the environment needs to be retrieved\"},{\"description\":\"Get all role names in the environment\",\"inputs\":[],\"outputs\":[\"list[str]\"],\"actors\":[\"Environment\"],\"steps\":[\"Return a list of names of all roles in the environment\"],\"reason\":\"When all role names in the environment need to be retrieved\"},{\"description\":\"Get the addresses of the object\",\"inputs\":[\"obj\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"Return the addresses of the specified object from the member addresses of the environment\"],\"reason\":\"When the addresses of a specific object in the environment need to be retrieved\"},{\"description\":\"Set the addresses of the object\",\"inputs\":[\"obj\",\"addresses\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"Set the addresses of the specified object in the member addresses of the environment\"],\"reason\":\"When the addresses of a specific object in the environment need to be updated\"},{\"description\":\"Archive the environment\",\"inputs\":[\"auto_archive: bool\"],\"outputs\":[],\"actors\":[\"Environment\"],\"steps\":[\"If auto_archive is true and the environment has a git repository, archive the repository\"],\"reason\":\"When the environment needs to be archived, and auto archiving is enabled\"}],\"relationship\":[\"The 'Add a role to the current environment' use case is related to the 'Add a batch of roles to the current environment' use case as it involves adding roles to the environment.\",\"The 'Publish a message to the recipients in the environment' use case is related to the 'Process all role runs at once' use case as it involves distributing messages to the roles in the environment and processing their runs.\",\"The 'Get all roles in the environment' use case is related to the 'Get a specific role in the environment' use case and the 'Get all role names in the environment' use case as it involves retrieving information about roles in the environment.\",\"The 'Get the addresses of the object' use case is related to the 'Set the addresses of the object' use case as it involves managing addresses of objects in the environment.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/environment.py:Environment", "target": "\nsequenceDiagram\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:context", "target": "{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:history", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:history", "target": "{\"name\":\"history\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:is_idle", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:is_idle", "target": "{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:is_idle", "target": "class_method"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:member_addrs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:member_addrs", "target": "{\"name\":\"member_addrs\",\"type_\":\"dict[Role,Set]\",\"default_\":\"\",\"description\":\"member_addrs : dict[Role, Set]\",\"compositions\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:roles", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:roles", "target": "{\"name\":\"roles\",\"type_\":\"dict[str,SerializeAsAny[Role]]\",\"default_\":\"\",\"description\":\"roles : dict[str, SerializeAsAny[Role]]\",\"compositions\":[\"Role\",\"SerializeAsAny\"]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:add_role", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:add_role", "target": "{\"name\":\"add_role\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_role(role: Role)\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:add_roles", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:add_roles", "target": "{\"name\":\"add_roles\",\"args\":[{\"name\":\"roles\",\"type_\":\"Iterable[Role]\",\"default_\":\"\",\"description\":\"roles: Iterable[Role]\",\"compositions\":[\"Iterable\",\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_roles(roles: Iterable[Role])\",\"aggregations\":[\"Role\",\"Iterable\"]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:archive", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:archive", "target": "{\"name\":\"archive\",\"args\":[{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(auto_archive)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:get_addresses", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:get_addresses", "target": "{\"name\":\"get_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_addresses(obj)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:get_role", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:get_role", "target": "{\"name\":\"get_role\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Role\",\"description\":\"Role\",\"compositions\":[\"Role\"]},\"description\":\"get_role(name: str): Role\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:get_roles", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:get_roles", "target": "{\"name\":\"get_roles\",\"args\":[],\"return_args\":{\"type_\":\"dict[str,Role]\",\"description\":\"dict[str, Role]\",\"compositions\":[\"Role\"]},\"description\":\"get_roles(): dict[str, Role]\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:init_roles", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:init_roles", "target": "{\"name\":\"init_roles\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"init_roles()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:publish_message", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:publish_message", "target": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"peekable\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"peekable: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"publish_message(message: Message, peekable: bool): bool\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:role_names", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:role_names", "target": "{\"name\":\"role_names\",\"args\":[],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"role_names(): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(k)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/environment.py:Environment:set_addresses", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/environment.py:Environment:set_addresses", "target": "{\"name\":\"set_addresses\",\"args\":[{\"name\":\"obj\",\"type_\":\"\",\"default_\":\"\",\"description\":\"obj\",\"compositions\":[]},{\"name\":\"addresses\",\"type_\":\"\",\"default_\":\"\",\"description\":\"addresses\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(obj, addresses)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Example", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Example", "target": "{\"name\":\"Example\",\"package\":\"metagpt/learn/skill_loader.py:Example\",\"attributes\":{\"answer\":{\"name\":\"answer\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"answer : str\",\"compositions\":[]},\"ask\":{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Example", "target": "metagpt/learn/skill_loader.py:Example:answer"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Example", "target": "metagpt/learn/skill_loader.py:Example:ask"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Example", "target": "{\"lineno\":19,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Example\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Example", "target": "{\"name\":\"Example\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"answer\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ask\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Example:answer", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Example:answer", "target": "{\"name\":\"answer\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"answer : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Example:ask", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Example:ask", "target": "{\"name\":\"ask\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ask : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/execute_task.py", "target": "metagpt/actions/execute_task.py:ExecuteTask"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "{\"name\":\"ExecuteTask\",\"package\":\"metagpt/actions/execute_task.py:ExecuteTask\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"i_context : list[Message]\",\"compositions\":[\"Message\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/actions/execute_task.py:ExecuteTask:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/actions/execute_task.py:ExecuteTask:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/actions/execute_task.py:ExecuteTask:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "{\"lineno\":14,\"end_lineno\":19,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ExecuteTask\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "{\"name\":\"ExecuteTask\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"list[Message]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/execute_task.py:ExecuteTask", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py:ExecuteTask:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/execute_task.py:ExecuteTask:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"i_context : list[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py:ExecuteTask:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/execute_task.py:ExecuteTask:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/execute_task.py:ExecuteTask:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/execute_task.py:ExecuteTask:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/faiss_store.py", "target": "metagpt/document_store/faiss_store.py:FaissStore"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "{\"name\":\"FaissStore\",\"package\":\"metagpt/document_store/faiss_store.py:FaissStore\",\"attributes\":{\"content_col\":{\"name\":\"content_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content_col : str\",\"compositions\":[]},\"embedding\":{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]},\"meta_col\":{\"name\":\"meta_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"meta_col : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"texts\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"texts: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"add(texts: list[str]): list[str]\",\"aggregations\":[]},\"asearch\":{\"name\":\"asearch\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"asearch()\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete()\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"expand_cols\",\"type_\":\"\",\"default_\":\"\",\"description\":\"expand_cols\",\"compositions\":[]},{\"name\":\"sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, expand_cols, sep)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[\"OpenAIEmbeddings\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:content_col"}, {"predicate": "has_class_property", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:embedding"}, {"predicate": "has_class_property", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:meta_col"}, {"predicate": "has_class_property", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:store"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:asearch"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:delete"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:persist"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:write"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "?:OpenAIEmbeddings"}, {"predicate": "isGeneralizeOf", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/base_store.py:LocalStore"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:__init__"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:_load"}, {"predicate": "has_class_method", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "metagpt/document_store/faiss_store.py:FaissStore:_write"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "{\"lineno\":21,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FaissStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/faiss_store.py:FaissStore", "target": "{\"name\":\"FaissStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"OpenAIEmbeddings\",\"default_value\":\"\"},{\"name\":\"meta_col\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:content_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:content_col", "target": "{\"name\":\"content_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:embedding", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:embedding", "target": "{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:meta_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:meta_col", "target": "{\"name\":\"meta_col\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"meta_col : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:store", "target": "{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"texts\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"texts: list[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"add(texts: list[str]): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:asearch", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:asearch", "target": "{\"name\":\"asearch\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"asearch()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:delete", "target": "{\"name\":\"delete\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"expand_cols\",\"type_\":\"\",\"default_\":\"\",\"description\":\"expand_cols\",\"compositions\":[]},{\"name\":\"sep\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sep\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, expand_cols, sep)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/faiss_store.py:FaissStore:write", "target": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/file.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/file.py", "target": "metagpt/utils/file.py:File"}, {"predicate": "is", "source": "metagpt/utils/file.py:File", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/file.py:File", "target": "{\"name\":\"File\",\"package\":\"metagpt/utils/file.py:File\",\"attributes\":{\"CHUNK_SIZE\":{\"name\":\"CHUNK_SIZE\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"CHUNK_SIZE : int\",\"compositions\":[]}},\"methods\":{\"read\":{\"name\":\"read\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"chunk_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"chunk_size: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"read(file_path: Path, chunk_size: int): bytes\",\"aggregations\":[\"bytes\",\"Path\"]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"root_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"root_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"bytes\",\"default_\":\"\",\"description\":\"content: bytes\",\"compositions\":[\"bytes\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"write(root_path: Path, filename: str, content: bytes): Path\",\"aggregations\":[\"bytes\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"bytes\",\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/file.py:File", "target": "metagpt/utils/file.py:File:CHUNK_SIZE"}, {"predicate": "has_class_method", "source": "metagpt/utils/file.py:File", "target": "metagpt/utils/file.py:File:read"}, {"predicate": "has_class_method", "source": "metagpt/utils/file.py:File", "target": "metagpt/utils/file.py:File:write"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file.py:File", "target": "?:bytes"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file.py:File", "target": "?:Path"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:File", "target": "{\"lineno\":17,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"File\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/file.py:File", "target": "{\"name\":\"File\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"CHUNK_SIZE\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file.py:File:CHUNK_SIZE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file.py:File:CHUNK_SIZE", "target": "{\"name\":\"CHUNK_SIZE\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"CHUNK_SIZE : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file.py:File:read", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file.py:File:read", "target": "{\"name\":\"read\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"chunk_size\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"chunk_size: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"read(file_path: Path, chunk_size: int): bytes\",\"aggregations\":[\"bytes\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/file.py:File:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file.py:File:write", "target": "{\"name\":\"write\",\"args\":[{\"name\":\"root_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"root_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"bytes\",\"default_\":\"\",\"description\":\"content: bytes\",\"compositions\":[\"bytes\"]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"write(root_path: Path, filename: str, content: bytes): Path\",\"aggregations\":[\"bytes\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/file_repository.py", "target": "metagpt/utils/file_repository.py:FileRepository"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "{\"name\":\"FileRepository\",\"package\":\"metagpt/utils/file_repository.py:FileRepository\",\"attributes\":{\"all_files\":{\"name\":\"all_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_files\",\"compositions\":[]},\"changed_files\":{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]},\"root_path\":{\"name\":\"root_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_path\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(filename: Path \\\\| str)\",\"aggregations\":[\"Path\\\\\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Document\\\\|None\",\"description\":\"Document \\\\| None\",\"compositions\":[\"Document\\\\\"]},\"description\":\"get(filename: Path \\\\| str): Document \\\\| None\",\"aggregations\":[\"Path\\\\\",\"Document\\\\\"]},\"get_all\":{\"name\":\"get_all\",\"args\":[{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[Document]\",\"description\":\"List[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_all(filter_ignored): List[Document]\",\"aggregations\":[\"Document\"]},\"get_change_dir_files\":{\"name\":\"get_change_dir_files\",\"args\":[{\"name\":\"dir\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"dir: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_change_dir_files(dir: Path \\\\| str): List\",\"aggregations\":[\"Path\\\\\"]},\"get_changed_dependency\":{\"name\":\"get_changed_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_changed_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]},\"get_dependency\":{\"name\":\"get_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]},\"new_filename\":{\"name\":\"new_filename\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_filename()\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"save(filename: Path \\\\| str, content, dependencies: List[str]): Document\",\"aggregations\":[\"Path\\\\\",\"Document\"]},\"save_doc\":{\"name\":\"save_doc\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_doc(doc: Document, dependencies: List[str])\",\"aggregations\":[\"Document\"]},\"save_pdf\":{\"name\":\"save_pdf\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"with_suffix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"with_suffix: str\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_pdf(doc: Document, with_suffix: str, dependencies: List[str])\",\"aggregations\":[\"Document\"]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\",\"Document\\\\\",\"Document\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:all_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:changed_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:root_path"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:workdir"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:delete"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get_all"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get_change_dir_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get_changed_dependency"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:get_dependency"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:new_filename"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:save"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:save_doc"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:save_pdf"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "?:Path\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "?:Document\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "?:Document"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo:tests"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs"}, {"predicate": "has_class_method", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "metagpt/utils/file_repository.py:FileRepository:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "{\"lineno\":25,\"end_lineno\":240,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FileRepository\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "{\"name\":\"FileRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"all_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"changed_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"root_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "{\"description\":\"This source code defines a class representing a FileRepository associated with a Git repository. The class includes methods for saving, getting, and deleting files, as well as managing file dependencies and generating new filenames.\",\"use_cases\":[{\"description\":\"Save content to a file and update its dependencies.\",\"inputs\":[\"filename\",\"content\",\"dependencies\"],\"outputs\":[\"Document\"],\"actors\":[\"Document\",\"Path\",\"List\"],\"steps\":[\"Create the pathname for the file within the repository.\",\"Write the content to the file.\",\"Update the dependencies if provided.\",\"Return the saved document.\"],\"reason\":\"When new content needs to be saved to a file and its dependencies need to be updated.\"},{\"description\":\"Get the dependencies of a file.\",\"inputs\":[\"filename\"],\"outputs\":[\"Set\"],\"actors\":[\"Path\"],\"steps\":[\"Retrieve the pathname of the file within the repository.\",\"Get the dependencies of the file.\",\"Return the set of dependencies.\"],\"reason\":\"When the dependencies of a file need to be retrieved.\"},{\"description\":\"Get the dependencies of a file that have changed.\",\"inputs\":[\"filename\"],\"outputs\":[\"Set\"],\"actors\":[\"Path\"],\"steps\":[\"Get the dependencies of the file.\",\"Identify the changed dependent files.\",\"Return the set of changed dependencies.\"],\"reason\":\"When the dependencies of a file that have changed need to be retrieved.\"},{\"description\":\"Read the content of a file.\",\"inputs\":[\"filename\"],\"outputs\":[\"Document\",\"None\"],\"actors\":[\"Path\"],\"steps\":[\"Create a document instance for the file.\",\"Read the content of the file.\",\"Return the document with the content or None if the file does not exist.\"],\"reason\":\"When the content of a file needs to be read.\"},{\"description\":\"Get the content of all files in the repository.\",\"inputs\":[\"filter_ignored\"],\"outputs\":[\"List[Document]\"],\"actors\":[\"Path\"],\"steps\":[\"Retrieve the content of all files in the repository.\",\"Return a list of document instances representing the files.\"],\"reason\":\"When the content of all files in the repository needs to be retrieved.\"},{\"description\":\"Get the files in a directory that have changed.\",\"inputs\":[\"dir\"],\"outputs\":[\"List\"],\"actors\":[\"Path\"],\"steps\":[\"Identify the changed files within the directory.\",\"Return the list of changed files.\"],\"reason\":\"When the changed files within a directory need to be retrieved.\"},{\"description\":\"Generate a new filename based on the current timestamp and a UUID suffix.\",\"inputs\":[],\"outputs\":[\"str\"],\"actors\":[],\"steps\":[\"Generate a new filename based on the current timestamp and a UUID suffix.\",\"Return the new filename.\"],\"reason\":\"When a new filename needs to be generated.\"},{\"description\":\"Save content to a file and update its dependencies using a Document instance.\",\"inputs\":[\"doc\",\"dependencies\"],\"outputs\":[],\"actors\":[\"Document\",\"List\"],\"steps\":[\"Save the content of the document to a file.\",\"Update the dependencies if provided.\"],\"reason\":\"When the content of a document needs to be saved to a file and its dependencies need to be updated.\"},{\"description\":\"Save a Document instance as a PDF file.\",\"inputs\":[\"doc\",\"with_suffix\",\"dependencies\"],\"outputs\":[],\"actors\":[\"Document\",\"List\"],\"steps\":[\"Convert the content of the document to Markdown.\",\"Save it to a file with an optional specified suffix.\",\"Log the saved file.\"],\"reason\":\"When a document instance needs to be saved as a PDF file.\"},{\"description\":\"Delete a file from the file repository.\",\"inputs\":[\"filename\"],\"outputs\":[],\"actors\":[\"Path\"],\"steps\":[\"Delete the file from the file repository.\"],\"reason\":\"When a file needs to be deleted from the file repository.\"}],\"relationship\":[\"Save content to a file and update its dependencies is related to Get the dependencies of a file.\",\"Save content to a file and update its dependencies is related to Get the dependencies of a file that have changed.\",\"Save content to a file and update its dependencies is related to Read the content of a file.\",\"Save content to a file and update its dependencies is related to Get the content of all files in the repository.\",\"Save content to a file and update its dependencies is related to Get the files in a directory that have changed.\",\"Save content to a file and update its dependencies is related to Generate a new filename based on the current timestamp and a UUID suffix.\",\"Save content to a file and update its dependencies is related to Save content to a file and update its dependencies using a Document instance.\",\"Save content to a file and update its dependencies is related to Save a Document instance as a PDF file.\",\"Save content to a file and update its dependencies is related to Delete a file from the file repository.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/utils/file_repository.py:FileRepository", "target": "\nsequenceDiagram\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->> FileRepository: get_all(filter_ignored)\n FileRepository ->> FileRepository: retrieve content of all files\n FileRepository ->> Document: return list of document instances\n\n Document ->> FileRepository: get_change_dir_files(dir)\n FileRepository ->> FileRepository: identify changed files within directory\n FileRepository ->> Document: return list of changed files\n\n Document ->> FileRepository: save_doc(doc, dependencies)\n FileRepository ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository ->> Path: convert content of document to Markdown\n FileRepository ->> FileRepository: save content to file with optional suffix\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: delete(filename)\n FileRepository ->> Path: delete file from repository\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(filename, dependencies)\n"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:all_files", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:all_files", "target": "{\"name\":\"all_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_files\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:all_files", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:changed_files", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:changed_files", "target": "{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:changed_files", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:root_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:root_path", "target": "{\"name\":\"root_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"root_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:root_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:workdir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:workdir", "target": "{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:workdir", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(filename: Path \\\\| str)\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Document\\\\|None\",\"description\":\"Document \\\\| None\",\"compositions\":[\"Document\\\\\"]},\"description\":\"get(filename: Path \\\\| str): Document \\\\| None\",\"aggregations\":[\"Path\\\\\",\"Document\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get_all", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get_all", "target": "{\"name\":\"get_all\",\"args\":[{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[Document]\",\"description\":\"List[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_all(filter_ignored): List[Document]\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get_change_dir_files", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get_change_dir_files", "target": "{\"name\":\"get_change_dir_files\",\"args\":[{\"name\":\"dir\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"dir: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_change_dir_files(dir: Path \\\\| str): List\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get_changed_dependency", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get_changed_dependency", "target": "{\"name\":\"get_changed_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_changed_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:get_dependency", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:get_dependency", "target": "{\"name\":\"get_dependency\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"Set[str]\",\"description\":\"Set[str]\",\"compositions\":[]},\"description\":\"get_dependency(filename: Path \\\\| str): Set[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:new_filename", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:new_filename", "target": "{\"name\":\"new_filename\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_filename()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:save", "target": "{\"name\":\"save\",\"args\":[{\"name\":\"filename\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"filename: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Document\",\"description\":\"Document\",\"compositions\":[\"Document\"]},\"description\":\"save(filename: Path \\\\| str, content, dependencies: List[str]): Document\",\"aggregations\":[\"Path\\\\\",\"Document\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:save_doc", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:save_doc", "target": "{\"name\":\"save_doc\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_doc(doc: Document, dependencies: List[str])\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:save_pdf", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/file_repository.py:FileRepository:save_pdf", "target": "{\"name\":\"save_pdf\",\"args\":[{\"name\":\"doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"with_suffix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"with_suffix: str\",\"compositions\":[]},{\"name\":\"dependencies\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"dependencies: List[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save_pdf(doc: Document, with_suffix: str, dependencies: List[str])\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/fireworks_api.py", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager"}, {"predicate": "has_class", "source": "metagpt/provider/fireworks_api.py", "target": "metagpt/provider/fireworks_api.py:FireworksLLM"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "{\"name\":\"FireworksCostManager\",\"package\":\"metagpt/provider/fireworks_api.py:FireworksCostManager\",\"attributes\":{\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]},\"total_cost\":{\"name\":\"total_cost\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_cost\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}},\"methods\":{\"model_grade_token_costs\":{\"name\":\"model_grade_token_costs\",\"args\":[{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,float]\",\"description\":\"dict[str, float]\",\"compositions\":[]},\"description\":\"model_grade_token_costs(model: str): dict[str, float]\",\"aggregations\":[]},\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens: int\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"completion_tokens: int\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens: int, completion_tokens: int, model: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_completion_tokens"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_cost"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_prompt_tokens"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:model_grade_token_costs"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksCostManager:update_cost"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "{\"lineno\":32,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FireworksCostManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager", "target": "{\"name\":\"FireworksCostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_cost\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_completion_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_completion_tokens", "target": "{\"name\":\"total_completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_completion_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_cost", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_cost", "target": "{\"name\":\"total_cost\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_cost\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:total_prompt_tokens", "target": "{\"name\":\"total_prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_prompt_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:model_grade_token_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:model_grade_token_costs", "target": "{\"name\":\"model_grade_token_costs\",\"args\":[{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,float]\",\"description\":\"dict[str, float]\",\"compositions\":[]},\"description\":\"model_grade_token_costs(model: str): dict[str, float]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:update_cost", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksCostManager:update_cost", "target": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens: int\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"completion_tokens: int\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens: int, completion_tokens: int, model: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "{\"name\":\"FireworksLLM\",\"package\":\"metagpt/provider/fireworks_api.py:FireworksLLM\",\"attributes\":{\"auto_max_tokens\":{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}},\"methods\":{\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:auto_max_tokens"}, {"predicate": "has_class_property", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:get_costs"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "?:Costs"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:_make_client_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:_update_costs"}, {"predicate": "has_class_method", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "metagpt/provider/fireworks_api.py:FireworksLLM:_achat_completion_stream"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "{\"lineno\":74,\"end_lineno\":131,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FireworksLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/fireworks_api.py:FireworksLLM", "target": "{\"name\":\"FireworksLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auto_max_tokens\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:auto_max_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:auto_max_tokens", "target": "{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:get_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:get_costs", "target": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"predicate": "is", "source": "metagpt/actions/fix_bug.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/fix_bug.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/fix_bug.py", "target": "metagpt/actions/fix_bug.py:FixBug"}, {"predicate": "is", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "{\"name\":\"FixBug\",\"package\":\"metagpt/actions/fix_bug.py:FixBug\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "metagpt/actions/fix_bug.py:FixBug:name"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "{\"lineno\":10,\"end_lineno\":13,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"FixBug\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/fix_bug.py:FixBug", "target": "{\"name\":\"FixBug\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/fix_bug.py:FixBug:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/fix_bug.py:FixBug:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "{\"name\":\"GPTPromptGenerator\",\"package\":\"metagpt/tools/prompt_writer.py:GPTPromptGenerator\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"example\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"example: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"style: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[list[str],str]\",\"description\":\"Union[list[str], str]\",\"compositions\":[]},\"description\":\"gen(example: str, style: str): Union[list[str], str]\",\"aggregations\":[]},\"gen_chatbot_style\":{\"name\":\"gen_chatbot_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_chatbot_style(example)\",\"aggregations\":[]},\"gen_instruction_style\":{\"name\":\"gen_instruction_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_instruction_style(example)\",\"aggregations\":[]},\"gen_query_style\":{\"name\":\"gen_query_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_query_style(example)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_chatbot_style"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_instruction_style"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_query_style"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "{\"lineno\":11,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GPTPromptGenerator\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator", "target": "{\"name\":\"GPTPromptGenerator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen", "target": "{\"name\":\"gen\",\"args\":[{\"name\":\"example\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"example: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"style: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Union[list[str],str]\",\"description\":\"Union[list[str], str]\",\"compositions\":[]},\"description\":\"gen(example: str, style: str): Union[list[str], str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_chatbot_style", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_chatbot_style", "target": "{\"name\":\"gen_chatbot_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_chatbot_style(example)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_instruction_style", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_instruction_style", "target": "{\"name\":\"gen_instruction_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_instruction_style(example)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_query_style", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:gen_query_style", "target": "{\"name\":\"gen_query_style\",\"args\":[{\"name\":\"example\",\"type_\":\"\",\"default_\":\"\",\"description\":\"example\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_query_style(example)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/google_gemini_api.py", "target": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel"}, {"predicate": "has_class", "source": "metagpt/provider/google_gemini_api.py", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "{\"name\":\"GeminiGenerativeModel\",\"package\":\"metagpt/provider/google_gemini_api.py:GeminiGenerativeModel\",\"attributes\":{},\"methods\":{\"count_tokens\":{\"name\":\"count_tokens\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]},\"count_tokens_async\":{\"name\":\"count_tokens_async\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens_async(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]}},\"compositions\":[],\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]}"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens_async"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "?:content_types.ContentsType"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "?:glm.CountTokensResponse"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "{\"lineno\":29,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeminiGenerativeModel\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel", "target": "{\"name\":\"GeminiGenerativeModel\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens", "target": "{\"name\":\"count_tokens\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens_async", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiGenerativeModel:count_tokens_async", "target": "{\"name\":\"count_tokens_async\",\"args\":[{\"name\":\"contents\",\"type_\":\"content_types.ContentsType\",\"default_\":\"\",\"description\":\"contents: content_types.ContentsType\",\"compositions\":[\"content_types.ContentsType\"]}],\"return_args\":{\"type_\":\"glm.CountTokensResponse\",\"description\":\"glm.CountTokensResponse\",\"compositions\":[\"glm.CountTokensResponse\"]},\"description\":\"count_tokens_async(contents: content_types.ContentsType): glm.CountTokensResponse\",\"aggregations\":[\"content_types.ContentsType\",\"glm.CountTokensResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "{\"name\":\"GeminiLLM\",\"package\":\"metagpt/provider/google_gemini_api.py:GeminiLLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"aget_usage\":{\"name\":\"aget_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aget_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]},\"completion\":{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'GenerateContentResponse'\",\"description\":\"'GenerateContentResponse'\",\"compositions\":[\"GenerateContentResponse\"]},\"description\":\"completion(messages: list[dict]): 'GenerateContentResponse'\",\"aggregations\":[\"GenerateContentResponse\"]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"GenerateContentResponse\",\"default_\":\"\",\"description\":\"resp: GenerateContentResponse\",\"compositions\":[\"GenerateContentResponse\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: GenerateContentResponse): str\",\"aggregations\":[\"GenerateContentResponse\"]},\"get_usage\":{\"name\":\"get_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"GenerateContentResponse\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm"}, {"predicate": "has_class_property", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:use_system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:aget_usage"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_choice_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_usage"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "?:GenerateContentResponse"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init_gemini"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_user_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_assistant_msg"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_const_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_update_costs"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion_stream"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "{\"lineno\":45,\"end_lineno\":143,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeminiLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM", "target": "{\"name\":\"GeminiLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:model", "target": "{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:use_system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:use_system_prompt", "target": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:aget_usage", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:aget_usage", "target": "{\"name\":\"aget_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aget_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:completion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:completion", "target": "{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'GenerateContentResponse'\",\"description\":\"'GenerateContentResponse'\",\"compositions\":[\"GenerateContentResponse\"]},\"description\":\"completion(messages: list[dict]): 'GenerateContentResponse'\",\"aggregations\":[\"GenerateContentResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"GenerateContentResponse\",\"default_\":\"\",\"description\":\"resp: GenerateContentResponse\",\"compositions\":[\"GenerateContentResponse\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: GenerateContentResponse): str\",\"aggregations\":[\"GenerateContentResponse\"]}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_usage", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:get_usage", "target": "{\"name\":\"get_usage\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"resp_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"resp_text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(messages: list[dict], resp_text: str): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/general_api_requestor.py", "target": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_requestor.py", "target": "metagpt/provider/general_api_requestor.py:parse_stream_helper"}, {"predicate": "has_function", "source": "metagpt/provider/general_api_requestor.py", "target": "metagpt/provider/general_api_requestor.py:parse_stream"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "{\"name\":\"GeneralAPIRequestor\",\"package\":\"metagpt/provider/general_api_requestor.py:GeneralAPIRequestor\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/general_api_base.py:APIRequestor"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/ollama_api.py:OllamaLLM:client"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response_line"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_async_response"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "{\"lineno\":38,\"end_lineno\":104,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GeneralAPIRequestor\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor", "target": "{\"name\":\"GeneralAPIRequestor\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/generate_questions.py", "target": "metagpt/actions/generate_questions.py:GenerateQuestions"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "{\"name\":\"GenerateQuestions\",\"package\":\"metagpt/actions/generate_questions.py:GenerateQuestions\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionNode\",\"description\":\"ActionNode\",\"compositions\":[\"ActionNode\"]},\"description\":\"run(context): ActionNode\",\"aggregations\":[\"ActionNode\"]}},\"compositions\":[],\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "metagpt/actions/generate_questions.py:GenerateQuestions:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "metagpt/actions/generate_questions.py:GenerateQuestions:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "?:ActionNode"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "{\"lineno\":18,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GenerateQuestions\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/generate_questions.py:GenerateQuestions", "target": "{\"name\":\"GenerateQuestions\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py:GenerateQuestions:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/generate_questions.py:GenerateQuestions:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py:GenerateQuestions:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/generate_questions.py:GenerateQuestions:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionNode\",\"description\":\"ActionNode\",\"compositions\":[\"ActionNode\"]},\"description\":\"run(context): ActionNode\",\"aggregations\":[\"ActionNode\"]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/invoice_ocr.py", "target": "metagpt/actions/invoice_ocr.py:GenerateTable"}, {"predicate": "has_class", "source": "metagpt/actions/invoice_ocr.py", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR"}, {"predicate": "has_class", "source": "metagpt/actions/invoice_ocr.py", "target": "metagpt/actions/invoice_ocr.py:ReplyQuestion"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "{\"name\":\"GenerateTable\",\"package\":\"metagpt/actions/invoice_ocr.py:GenerateTable\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"ocr_results\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_results: list\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(ocr_results: list, filename: str): dict[str, str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/invoice_ocr.py:GenerateTable:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/invoice_ocr.py:GenerateTable:language"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/invoice_ocr.py:GenerateTable:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/invoice_ocr.py:GenerateTable:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "{\"lineno\":122,\"end_lineno\":163,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GenerateTable\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/invoice_ocr.py:GenerateTable", "target": "{\"name\":\"GenerateTable\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:GenerateTable:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"ocr_results\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_results: list\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(ocr_results: list, filename: str): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/spark_api.py", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb"}, {"predicate": "has_class", "source": "metagpt/provider/spark_api.py", "target": "metagpt/provider/spark_api.py:SparkLLM"}, {"predicate": "has_class", "source": "metagpt/provider/spark_api.py", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "{\"name\":\"GetMessageFromWeb\",\"package\":\"metagpt/provider/spark_api.py:GetMessageFromWeb\",\"attributes\":{\"domain\":{\"name\":\"domain\",\"type_\":\"\",\"default_\":\"\",\"description\":\"domain\",\"compositions\":[]},\"ret\":{\"name\":\"ret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ret : str\",\"compositions\":[]},\"spark_api_key\":{\"name\":\"spark_api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_key\",\"compositions\":[]},\"spark_api_secret\":{\"name\":\"spark_api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_secret\",\"compositions\":[]},\"spark_appid\":{\"name\":\"spark_appid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_appid\",\"compositions\":[]},\"spark_url\":{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]},\"text\":{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}},\"methods\":{\"gen_params\":{\"name\":\"gen_params\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_params()\",\"aggregations\":[]},\"on_close\":{\"name\":\"on_close\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"one\",\"type_\":\"\",\"default_\":\"\",\"description\":\"one\",\"compositions\":[]},{\"name\":\"two\",\"type_\":\"\",\"default_\":\"\",\"description\":\"two\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_close(ws, one, two)\",\"aggregations\":[]},\"on_error\":{\"name\":\"on_error\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"error\",\"type_\":\"\",\"default_\":\"\",\"description\":\"error\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_error(ws, error)\",\"aggregations\":[]},\"on_message\":{\"name\":\"on_message\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_message(ws, message)\",\"aggregations\":[]},\"on_open\":{\"name\":\"on_open\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_open(ws)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"send\":{\"name\":\"send\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"send(ws)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:domain"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:ret"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_key"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_secret"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_appid"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_url"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:text"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:gen_params"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_close"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_error"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_message"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_open"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:run"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:send"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:_run"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "{\"lineno\":46,\"end_lineno\":168,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GetMessageFromWeb\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb", "target": "{\"name\":\"GetMessageFromWeb\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"domain\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"ret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"spark_api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_api_secret\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_appid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"text\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:domain", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:domain", "target": "{\"name\":\"domain\",\"type_\":\"\",\"default_\":\"\",\"description\":\"domain\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:ret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:ret", "target": "{\"name\":\"ret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ret : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_key", "target": "{\"name\":\"spark_api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_key\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_secret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_api_secret", "target": "{\"name\":\"spark_api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_api_secret\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_appid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_appid", "target": "{\"name\":\"spark_appid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_appid\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:spark_url", "target": "{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:text", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:text", "target": "{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:gen_params", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:gen_params", "target": "{\"name\":\"gen_params\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"gen_params()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_close", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_close", "target": "{\"name\":\"on_close\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"one\",\"type_\":\"\",\"default_\":\"\",\"description\":\"one\",\"compositions\":[]},{\"name\":\"two\",\"type_\":\"\",\"default_\":\"\",\"description\":\"two\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_close(ws, one, two)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_error", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_error", "target": "{\"name\":\"on_error\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"error\",\"type_\":\"\",\"default_\":\"\",\"description\":\"error\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_error(ws, error)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_message", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_message", "target": "{\"name\":\"on_message\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]},{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_message(ws, message)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_open", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:on_open", "target": "{\"name\":\"on_open\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"on_open(ws)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:send", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:send", "target": "{\"name\":\"send\",\"args\":[{\"name\":\"ws\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ws\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"send(ws)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "{\"name\":\"GitRepository\",\"package\":\"metagpt/utils/git_repository.py:GitRepository\",\"attributes\":{\"changed_files\":{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]},\"is_valid\":{\"name\":\"is_valid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_valid\",\"compositions\":[]},\"status\":{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"add_change\":{\"name\":\"add_change\",\"args\":[{\"name\":\"files\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"files: Dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_change(files: Dict)\",\"aggregations\":[]},\"archive\":{\"name\":\"archive\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(comments)\",\"aggregations\":[]},\"commit\":{\"name\":\"commit\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"commit(comments)\",\"aggregations\":[]},\"delete_repository\":{\"name\":\"delete_repository\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_repository()\",\"aggregations\":[]},\"filter_gitignore\":{\"name\":\"filter_gitignore\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"filenames: List[str]\",\"compositions\":[]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"filter_gitignore(filenames: List[str], root_relative_path: Path \\\\| str): List[str]\",\"aggregations\":[\"Path\\\\\"]},\"get_dependency\":{\"name\":\"get_dependency\",\"args\":[],\"return_args\":{\"type_\":\"DependencyFile\",\"description\":\"DependencyFile\",\"compositions\":[\"DependencyFile\"]},\"description\":\"get_dependency(): DependencyFile\",\"aggregations\":[\"DependencyFile\"]},\"get_files\":{\"name\":\"get_files\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_files(relative_path: Path \\\\| str, root_relative_path: Path \\\\| str, filter_ignored): List\",\"aggregations\":[\"Path\\\\\"]},\"is_git_dir\":{\"name\":\"is_git_dir\",\"args\":[{\"name\":\"local_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"local_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_git_dir(local_path)\",\"aggregations\":[]},\"new_file_repository\":{\"name\":\"new_file_repository\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"FileRepository\",\"description\":\"FileRepository\",\"compositions\":[\"FileRepository\"]},\"description\":\"new_file_repository(relative_path: Path \\\\| str): FileRepository\",\"aggregations\":[\"Path\\\\\",\"FileRepository\"]},\"open\":{\"name\":\"open\",\"args\":[{\"name\":\"local_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"auto_init\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_init\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"open(local_path: Path, auto_init)\",\"aggregations\":[\"Path\"]},\"rename_root\":{\"name\":\"rename_root\",\"args\":[{\"name\":\"new_dir_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_dir_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rename_root(new_dir_name)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Path\\\\\",\"DependencyFile\",\"FileRepository\",\"Path\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:changed_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:is_valid"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:status"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:workdir"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:add_change"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:archive"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:commit"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:delete_repository"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:filter_gitignore"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:get_dependency"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:get_files"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:is_git_dir"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:new_file_repository"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:open"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:rename_root"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "?:Path\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "?:DependencyFile"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "?:FileRepository"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "?:Path"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/context.py:Context:git_repo"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "isAggregateOn", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/project_repo.py:ProjectRepo:_git_repo"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "metagpt/utils/git_repository.py:GitRepository:_init"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "{\"lineno\":35,\"end_lineno\":285,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GitRepository\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "{\"name\":\"GitRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"changed_files\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"is_valid\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"status\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "{\"description\":\"This source code defines a class `GitRepository` that represents a Git repository. It provides methods to interact with the repository, such as opening an existing repository, initializing a new repository, adding or removing files from the staging area, committing changes, deleting the repository, and more.\",\"use_cases\":[{\"description\":\"Open an existing Git repository or initialize a new one.\",\"inputs\":[\"local_path\",\"auto_init\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Check if the provided path is a Git repository\",\"If it is a Git repository, open it and set the repository attribute\",\"If it is not a Git repository and auto_init is True, initialize a new Git repository at the provided path\"],\"reason\":\"When a user wants to open an existing Git repository or initialize a new one for further operations.\"},{\"description\":\"Add or remove files from the staging area based on the provided changes.\",\"inputs\":[\"files\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Iterate through the provided files and their change types\",\"Add or remove files from the staging area based on the change types\"],\"reason\":\"When a user wants to stage changes in the Git repository.\"},{\"description\":\"Commit the staged changes with the given comments.\",\"inputs\":[\"comments\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Commit the staged changes with the provided comments\"],\"reason\":\"When a user wants to commit the staged changes in the Git repository.\"},{\"description\":\"Delete the entire repository directory.\",\"inputs\":[],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Delete the entire repository directory if it is valid\"],\"reason\":\"When a user wants to delete the entire Git repository directory.\"},{\"description\":\"Return a dictionary of changed files and their change types.\",\"inputs\":[],\"outputs\":[\"changed_files\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Retrieve the untracked files and their change types\",\"Retrieve the changed files and their change types from the index\",\"Combine the untracked and changed files into a dictionary\"],\"reason\":\"When a user wants to get the changed files in the Git repository.\"},{\"description\":\"Check if the specified directory is a Git repository.\",\"inputs\":[\"local_path\"],\"outputs\":[\"is_git_dir\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Check if the specified directory contains a .git directory\"],\"reason\":\"When a user wants to check if a directory is a Git repository.\"},{\"description\":\"Check if the Git repository is valid (exists and is initialized).\",\"inputs\":[],\"outputs\":[\"is_valid\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Check if the repository attribute is not None\"],\"reason\":\"When a user wants to check if the Git repository is valid.\"},{\"description\":\"Return the Git repository's status as a string.\",\"inputs\":[],\"outputs\":[\"status\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Return the status of the Git repository using GitPython\"],\"reason\":\"When a user wants to get the status of the Git repository.\"},{\"description\":\"Return the path to the working directory of the Git repository.\",\"inputs\":[],\"outputs\":[\"workdir\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Return the path to the working directory if the repository is valid\"],\"reason\":\"When a user wants to get the working directory of the Git repository.\"},{\"description\":\"Archive the current state of the Git repository.\",\"inputs\":[\"comments\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Add all changed files to the staging area\",\"Commit the changes with the provided comments\"],\"reason\":\"When a user wants to archive the current state of the Git repository.\"},{\"description\":\"Create a new instance of FileRepository associated with this Git repository.\",\"inputs\":[\"relative_path\"],\"outputs\":[\"FileRepository\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Create a new instance of FileRepository with the provided relative path\"],\"reason\":\"When a user wants to create a new instance of FileRepository associated with the Git repository.\"},{\"description\":\"Get the dependency file associated with the Git repository.\",\"inputs\":[],\"outputs\":[\"DependencyFile\"],\"actors\":[\"FileRepository\"],\"steps\":[\"If the dependency file is not available, create a new instance of DependencyFile\"],\"reason\":\"When a user wants to get the dependency file associated with the Git repository.\"},{\"description\":\"Rename the root directory of the Git repository.\",\"inputs\":[\"new_dir_name\"],\"outputs\":[],\"actors\":[\"FileRepository\"],\"steps\":[\"Rename the root directory of the Git repository to the provided new name\"],\"reason\":\"When a user wants to rename the root directory of the Git repository.\"},{\"description\":\"Retrieve a list of files in the specified relative path.\",\"inputs\":[\"relative_path\",\"root_relative_path\",\"filter_ignored\"],\"outputs\":[\"List\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Retrieve the list of files in the specified relative path\",\"Recursively retrieve files from subdirectories if present\",\"Filter the files based on .gitignore rules if required\"],\"reason\":\"When a user wants to retrieve a list of files in the specified relative path within the Git repository.\"},{\"description\":\"Filter a list of filenames based on .gitignore rules.\",\"inputs\":[\"filenames\",\"root_relative_path\"],\"outputs\":[\"List\"],\"actors\":[\"FileRepository\"],\"steps\":[\"Filter the list of filenames based on .gitignore rules\"],\"reason\":\"When a user wants to filter a list of filenames based on .gitignore rules.\"}],\"relationship\":[\"Open an existing Git repository or initialize a new one can be performed by FileRepository\",\"Add or remove files from the staging area based on the provided changes can be performed by FileRepository\",\"Commit the staged changes with the given comments can be performed by FileRepository\",\"Delete the entire repository directory can be performed by FileRepository\",\"Return a dictionary of changed files and their change types can be performed by FileRepository\",\"Check if the specified directory is a Git repository can be performed by FileRepository\",\"Check if the Git repository is valid (exists and is initialized) can be performed by FileRepository\",\"Return the Git repository's status as a string can be performed by FileRepository\",\"Return the path to the working directory of the Git repository can be performed by FileRepository\",\"Archive the current state of the Git repository can be performed by FileRepository\",\"Create a new instance of FileRepository associated with this Git repository can be performed by FileRepository\",\"Get the dependency file associated with the Git repository can be performed by FileRepository\",\"Rename the root directory of the Git repository can be performed by FileRepository\",\"Retrieve a list of files in the specified relative path can be performed by FileRepository\",\"Filter a list of filenames based on .gitignore rules can be performed by FileRepository\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/utils/git_repository.py:GitRepository", "target": "\nsequenceDiagram\n participant FileRepository\n participant DependencyFile\n participant Path\n participant Path\\\\\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n FileRepository->>FileRepository: filter_gitignore(filenames, root_relative_path)\n"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:changed_files", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:changed_files", "target": "{\"name\":\"changed_files\",\"type_\":\"\",\"default_\":\"\",\"description\":\"changed_files\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:changed_files", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:is_valid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:is_valid", "target": "{\"name\":\"is_valid\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_valid\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:is_valid", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:status", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:status", "target": "{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:status", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:workdir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:workdir", "target": "{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:workdir", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:add_change", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:add_change", "target": "{\"name\":\"add_change\",\"args\":[{\"name\":\"files\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"files: Dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_change(files: Dict)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:archive", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:archive", "target": "{\"name\":\"archive\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"archive(comments)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:commit", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:commit", "target": "{\"name\":\"commit\",\"args\":[{\"name\":\"comments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"comments\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"commit(comments)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:delete_repository", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:delete_repository", "target": "{\"name\":\"delete_repository\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_repository()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:filter_gitignore", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:filter_gitignore", "target": "{\"name\":\"filter_gitignore\",\"args\":[{\"name\":\"filenames\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"filenames: List[str]\",\"compositions\":[]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"filter_gitignore(filenames: List[str], root_relative_path: Path \\\\| str): List[str]\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:get_dependency", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:get_dependency", "target": "{\"name\":\"get_dependency\",\"args\":[],\"return_args\":{\"type_\":\"DependencyFile\",\"description\":\"DependencyFile\",\"compositions\":[\"DependencyFile\"]},\"description\":\"get_dependency(): DependencyFile\",\"aggregations\":[\"DependencyFile\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:get_files", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:get_files", "target": "{\"name\":\"get_files\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"root_relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"root_relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]},{\"name\":\"filter_ignored\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filter_ignored\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List\",\"description\":\"List\",\"compositions\":[]},\"description\":\"get_files(relative_path: Path \\\\| str, root_relative_path: Path \\\\| str, filter_ignored): List\",\"aggregations\":[\"Path\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:is_git_dir", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:is_git_dir", "target": "{\"name\":\"is_git_dir\",\"args\":[{\"name\":\"local_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"local_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_git_dir(local_path)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:new_file_repository", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:new_file_repository", "target": "{\"name\":\"new_file_repository\",\"args\":[{\"name\":\"relative_path\",\"type_\":\"Path\\\\|str\",\"default_\":\"\",\"description\":\"relative_path: Path \\\\| str\",\"compositions\":[\"Path\\\\\"]}],\"return_args\":{\"type_\":\"FileRepository\",\"description\":\"FileRepository\",\"compositions\":[\"FileRepository\"]},\"description\":\"new_file_repository(relative_path: Path \\\\| str): FileRepository\",\"aggregations\":[\"Path\\\\\",\"FileRepository\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:open", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:open", "target": "{\"name\":\"open\",\"args\":[{\"name\":\"local_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"local_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"auto_init\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_init\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"open(local_path: Path, auto_init)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:rename_root", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/git_repository.py:GitRepository:rename_root", "target": "{\"name\":\"rename_root\",\"args\":[{\"name\":\"new_dir_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"new_dir_name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rename_root(new_dir_name)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_googleapi.py", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper"}, {"predicate": "has_function", "source": "metagpt/tools/search_engine_googleapi.py", "target": "metagpt/tools/search_engine_googleapi.py:safe_google_results"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "{\"name\":\"GoogleAPIWrapper\",\"package\":\"metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper\",\"attributes\":{\"executor\":{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]},\"google_api_client\":{\"name\":\"google_api_client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"google_api_client\",\"compositions\":[]},\"google_api_key\":{\"name\":\"google_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"google_api_key : Optional[str]\",\"compositions\":[]},\"google_cse_id\":{\"name\":\"google_cse_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"google_cse_id : Optional[str]\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"check_google_api_key\":{\"name\":\"check_google_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_google_api_key(val: str)\",\"aggregations\":[]},\"check_google_cse_id\":{\"name\":\"check_google_cse_id\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_google_cse_id(val: str)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\\\\|list[dict]\",\"description\":\"str \\\\| list[dict]\",\"compositions\":[\"str\\\\\"]},\"description\":\"run(query: str, max_results: int, as_string: bool, focus: list[str] \\\\| None): str \\\\| list[dict]\",\"aggregations\":[\"str\\\\\",\"\\\\\"]}},\"compositions\":[\"futures.Executor\",\"asyncio.AbstractEventLoop\"],\"aggregations\":[\"str\\\\\",\"\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:executor"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_key"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_cse_id"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:loop"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:model_config"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:check_google_api_key"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:check_google_cse_id"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:run"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "?:futures.Executor"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "?:asyncio.AbstractEventLoop"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "?:\\"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "{\"lineno\":27,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GoogleAPIWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper", "target": "{\"name\":\"GoogleAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"Optional[futures.Executor]\",\"default_value\":\"\"},{\"name\":\"google_api_client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"google_api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"google_cse_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"Optional[asyncio.AbstractEventLoop]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:executor", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:executor", "target": "{\"name\":\"executor\",\"type_\":\"Optional[futures.Executor]\",\"default_\":\"\",\"description\":\"executor : Optional[futures.Executor]\",\"compositions\":[\"futures.Executor\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client", "target": "{\"name\":\"google_api_client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"google_api_client\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_client", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_api_key", "target": "{\"name\":\"google_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"google_api_key : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_cse_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:google_cse_id", "target": "{\"name\":\"google_cse_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"google_cse_id : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:loop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:loop", "target": "{\"name\":\"loop\",\"type_\":\"Optional[asyncio.AbstractEventLoop]\",\"default_\":\"\",\"description\":\"loop : Optional[asyncio.AbstractEventLoop]\",\"compositions\":[\"asyncio.AbstractEventLoop\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:check_google_api_key", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:check_google_api_key", "target": "{\"name\":\"check_google_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_google_api_key(val: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:check_google_cse_id", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:check_google_cse_id", "target": "{\"name\":\"check_google_cse_id\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_google_cse_id(val: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_googleapi.py:GoogleAPIWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]},{\"name\":\"focus\",\"type_\":\"list[str]\\\\|None\",\"default_\":\"\",\"description\":\"focus: list[str] \\\\| None\",\"compositions\":[\"\\\\\"]}],\"return_args\":{\"type_\":\"str\\\\|list[dict]\",\"description\":\"str \\\\| list[dict]\",\"compositions\":[\"str\\\\\"]},\"description\":\"run(query: str, max_results: int, as_string: bool, focus: list[str] \\\\| None): str \\\\| list[dict]\",\"aggregations\":[\"str\\\\\",\"\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/graph_repository.py", "target": "metagpt/utils/graph_repository.py:GraphKeyword"}, {"predicate": "has_class", "source": "metagpt/utils/graph_repository.py", "target": "metagpt/utils/graph_repository.py:GraphRepository"}, {"predicate": "has_class", "source": "metagpt/utils/graph_repository.py", "target": "metagpt/utils/graph_repository.py:SPO"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "{\"name\":\"GraphKeyword\",\"package\":\"metagpt/utils/graph_repository.py:GraphKeyword\",\"attributes\":{\"CLASS\":{\"name\":\"CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS : str\",\"compositions\":[]},\"CLASS_METHOD\":{\"name\":\"CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_METHOD : str\",\"compositions\":[]},\"CLASS_PROPERTY\":{\"name\":\"CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_PROPERTY : str\",\"compositions\":[]},\"FUNCTION\":{\"name\":\"FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FUNCTION : str\",\"compositions\":[]},\"GLOBAL_VARIABLE\":{\"name\":\"GLOBAL_VARIABLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"GLOBAL_VARIABLE : str\",\"compositions\":[]},\"HAS_CLASS\":{\"name\":\"HAS_CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS : str\",\"compositions\":[]},\"HAS_CLASS_METHOD\":{\"name\":\"HAS_CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_METHOD : str\",\"compositions\":[]},\"HAS_CLASS_PROPERTY\":{\"name\":\"HAS_CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_PROPERTY : str\",\"compositions\":[]},\"HAS_CLASS_USE_CASE\":{\"name\":\"HAS_CLASS_USE_CASE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_USE_CASE : str\",\"compositions\":[]},\"HAS_CLASS_VIEW\":{\"name\":\"HAS_CLASS_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_VIEW : str\",\"compositions\":[]},\"HAS_DETAIL\":{\"name\":\"HAS_DETAIL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_DETAIL : str\",\"compositions\":[]},\"HAS_FUNCTION\":{\"name\":\"HAS_FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_FUNCTION : str\",\"compositions\":[]},\"HAS_PAGE_INFO\":{\"name\":\"HAS_PAGE_INFO\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PAGE_INFO : str\",\"compositions\":[]},\"HAS_PARTICIPANT\":{\"name\":\"HAS_PARTICIPANT\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PARTICIPANT : str\",\"compositions\":[]},\"HAS_SEQUENCE_VIEW\":{\"name\":\"HAS_SEQUENCE_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW : str\",\"compositions\":[]},\"IS\":{\"name\":\"IS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS : str\",\"compositions\":[]},\"IS_AGGREGATE_OF\":{\"name\":\"IS_AGGREGATE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_AGGREGATE_OF : str\",\"compositions\":[]},\"IS_COMPOSITE_OF\":{\"name\":\"IS_COMPOSITE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_COMPOSITE_OF : str\",\"compositions\":[]},\"NULL\":{\"name\":\"NULL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"NULL : str\",\"compositions\":[]},\"OF\":{\"name\":\"OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"OF : str\",\"compositions\":[]},\"ON\":{\"name\":\"ON\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ON : str\",\"compositions\":[]},\"SOURCE_CODE\":{\"name\":\"SOURCE_CODE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"SOURCE_CODE : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_METHOD"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_PROPERTY"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:FUNCTION"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:GLOBAL_VARIABLE"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_METHOD"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_PROPERTY"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_USE_CASE"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_VIEW"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_DETAIL"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_FUNCTION"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PAGE_INFO"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PARTICIPANT"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:IS"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:IS_AGGREGATE_OF"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:IS_COMPOSITE_OF"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:NULL"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:OF"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:ON"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "metagpt/utils/graph_repository.py:GraphKeyword:SOURCE_CODE"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "{\"lineno\":21,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GraphKeyword\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/graph_repository.py:GraphKeyword", "target": "{\"name\":\"GraphKeyword\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"CLASS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"CLASS_METHOD\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"CLASS_PROPERTY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FUNCTION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"GLOBAL_VARIABLE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_METHOD\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_PROPERTY\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_USE_CASE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_CLASS_VIEW\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_DETAIL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_FUNCTION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_PAGE_INFO\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_PARTICIPANT\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"HAS_SEQUENCE_VIEW\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS_AGGREGATE_OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"IS_COMPOSITE_OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"NULL\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"OF\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ON\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"SOURCE_CODE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS", "target": "{\"name\":\"CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_METHOD", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_METHOD", "target": "{\"name\":\"CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_METHOD : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_PROPERTY", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:CLASS_PROPERTY", "target": "{\"name\":\"CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"CLASS_PROPERTY : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:FUNCTION", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:FUNCTION", "target": "{\"name\":\"FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FUNCTION : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:GLOBAL_VARIABLE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:GLOBAL_VARIABLE", "target": "{\"name\":\"GLOBAL_VARIABLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"GLOBAL_VARIABLE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS", "target": "{\"name\":\"HAS_CLASS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_METHOD", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_METHOD", "target": "{\"name\":\"HAS_CLASS_METHOD\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_METHOD : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_PROPERTY", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_PROPERTY", "target": "{\"name\":\"HAS_CLASS_PROPERTY\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_PROPERTY : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_USE_CASE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_USE_CASE", "target": "{\"name\":\"HAS_CLASS_USE_CASE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_USE_CASE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_VIEW", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_CLASS_VIEW", "target": "{\"name\":\"HAS_CLASS_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_CLASS_VIEW : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_DETAIL", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_DETAIL", "target": "{\"name\":\"HAS_DETAIL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_DETAIL : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_FUNCTION", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_FUNCTION", "target": "{\"name\":\"HAS_FUNCTION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_FUNCTION : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PAGE_INFO", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PAGE_INFO", "target": "{\"name\":\"HAS_PAGE_INFO\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PAGE_INFO : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PARTICIPANT", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_PARTICIPANT", "target": "{\"name\":\"HAS_PARTICIPANT\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_PARTICIPANT : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:HAS_SEQUENCE_VIEW", "target": "{\"name\":\"HAS_SEQUENCE_VIEW\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"HAS_SEQUENCE_VIEW : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS", "target": "{\"name\":\"IS\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS_AGGREGATE_OF", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS_AGGREGATE_OF", "target": "{\"name\":\"IS_AGGREGATE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_AGGREGATE_OF : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS_COMPOSITE_OF", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:IS_COMPOSITE_OF", "target": "{\"name\":\"IS_COMPOSITE_OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"IS_COMPOSITE_OF : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:NULL", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:NULL", "target": "{\"name\":\"NULL\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"NULL : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:OF", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:OF", "target": "{\"name\":\"OF\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"OF : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:ON", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:ON", "target": "{\"name\":\"ON\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ON : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphKeyword:SOURCE_CODE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphKeyword:SOURCE_CODE", "target": "{\"name\":\"SOURCE_CODE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"SOURCE_CODE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "{\"name\":\"GraphRepository\",\"package\":\"metagpt/utils/graph_repository.py:GraphRepository\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]},\"insert\":{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]},\"rebuild_composition_relationship\":{\"name\":\"rebuild_composition_relationship\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_composition_relationship(graph_db: 'GraphRepository')\",\"aggregations\":[\"GraphRepository\"]},\"save\":{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]},\"select\":{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]},\"update_graph_db_with_class_relationship_views\":{\"name\":\"update_graph_db_with_class_relationship_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"relationship_views\",\"type_\":\"List[DotClassRelationship]\",\"default_\":\"\",\"description\":\"relationship_views: List[DotClassRelationship]\",\"compositions\":[\"DotClassRelationship\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_relationship_views(graph_db: 'GraphRepository', relationship_views: List[DotClassRelationship])\",\"aggregations\":[\"GraphRepository\",\"DotClassRelationship\"]},\"update_graph_db_with_class_views\":{\"name\":\"update_graph_db_with_class_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"class_views\",\"type_\":\"List[DotClassInfo]\",\"default_\":\"\",\"description\":\"class_views: List[DotClassInfo]\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_views(graph_db: 'GraphRepository', class_views: List[DotClassInfo])\",\"aggregations\":[\"GraphRepository\",\"DotClassInfo\"]},\"update_graph_db_with_file_info\":{\"name\":\"update_graph_db_with_file_info\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"file_info\",\"type_\":\"RepoFileInfo\",\"default_\":\"\",\"description\":\"file_info: RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_file_info(graph_db: 'GraphRepository', file_info: RepoFileInfo)\",\"aggregations\":[\"GraphRepository\",\"RepoFileInfo\"]}},\"compositions\":[],\"aggregations\":[\"GraphRepository\",\"SPO\",\"DotClassRelationship\",\"DotClassInfo\",\"RepoFileInfo\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:name"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:delete"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:insert"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:rebuild_composition_relationship"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:save"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:select"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_relationship_views"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_views"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_file_info"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:GraphRepository"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:SPO"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:DotClassRelationship"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:DotClassInfo"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "?:RepoFileInfo"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db"}, {"predicate": "has_class_method", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "metagpt/utils/graph_repository.py:GraphRepository:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "{\"lineno\":52,\"end_lineno\":232,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"GraphRepository\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/graph_repository.py:GraphRepository", "target": "{\"name\":\"GraphRepository\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"delete(subject: str, predicate: str, object_: str): int\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:insert", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:insert", "target": "{\"name\":\"insert\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"insert(subject: str, predicate: str, object_: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:rebuild_composition_relationship", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:rebuild_composition_relationship", "target": "{\"name\":\"rebuild_composition_relationship\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_composition_relationship(graph_db: 'GraphRepository')\",\"aggregations\":[\"GraphRepository\"]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:save", "target": "{\"name\":\"save\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:select", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:select", "target": "{\"name\":\"select\",\"args\":[{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject: str\",\"compositions\":[]},{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate: str\",\"compositions\":[]},{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[SPO]\",\"description\":\"List[SPO]\",\"compositions\":[\"SPO\"]},\"description\":\"select(subject: str, predicate: str, object_: str): List[SPO]\",\"aggregations\":[\"SPO\"]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_relationship_views", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_relationship_views", "target": "{\"name\":\"update_graph_db_with_class_relationship_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"relationship_views\",\"type_\":\"List[DotClassRelationship]\",\"default_\":\"\",\"description\":\"relationship_views: List[DotClassRelationship]\",\"compositions\":[\"DotClassRelationship\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_relationship_views(graph_db: 'GraphRepository', relationship_views: List[DotClassRelationship])\",\"aggregations\":[\"GraphRepository\",\"DotClassRelationship\"]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_views", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_class_views", "target": "{\"name\":\"update_graph_db_with_class_views\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"class_views\",\"type_\":\"List[DotClassInfo]\",\"default_\":\"\",\"description\":\"class_views: List[DotClassInfo]\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_class_views(graph_db: 'GraphRepository', class_views: List[DotClassInfo])\",\"aggregations\":[\"GraphRepository\",\"DotClassInfo\"]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_file_info", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:GraphRepository:update_graph_db_with_file_info", "target": "{\"name\":\"update_graph_db_with_file_info\",\"args\":[{\"name\":\"graph_db\",\"type_\":\"GraphRepository\",\"default_\":\"\",\"description\":\"graph_db: 'GraphRepository'\",\"compositions\":[\"GraphRepository\"]},{\"name\":\"file_info\",\"type_\":\"RepoFileInfo\",\"default_\":\"\",\"description\":\"file_info: RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_graph_db_with_file_info(graph_db: 'GraphRepository', file_info: RepoFileInfo)\",\"aggregations\":[\"GraphRepository\",\"RepoFileInfo\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/human_interaction.py", "target": "metagpt/utils/human_interaction.py:HumanInteraction"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "{\"name\":\"HumanInteraction\",\"package\":\"metagpt/utils/human_interaction.py:HumanInteraction\",\"attributes\":{\"stop_list\":{\"name\":\"stop_list\",\"type_\":\"tuple\",\"default_\":\"\",\"description\":\"stop_list : tuple\",\"compositions\":[\"tuple\"]}},\"methods\":{\"check_input_type\":{\"name\":\"check_input_type\",\"args\":[{\"name\":\"input_str\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_str: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Tuple[bool,Any]\",\"description\":\"Tuple[bool, Any]\",\"compositions\":[]},\"description\":\"check_input_type(input_str: str, req_type: Type): Tuple[bool, Any]\",\"aggregations\":[\"Type\"]},\"input_num_until_valid\":{\"name\":\"input_num_until_valid\",\"args\":[{\"name\":\"num_max\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_max: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"input_num_until_valid(num_max: int): int\",\"aggregations\":[]},\"input_until_valid\":{\"name\":\"input_until_valid\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Any\",\"description\":\"Any\",\"compositions\":[]},\"description\":\"input_until_valid(prompt: str, req_type: Type): Any\",\"aggregations\":[\"Type\"]},\"interact_with_instruct_content\":{\"name\":\"interact_with_instruct_content\",\"args\":[{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content: BaseModel\",\"compositions\":[\"BaseModel\"]},{\"name\":\"mapping\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"mapping: dict\",\"compositions\":[]},{\"name\":\"interact_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"interact_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Any]\",\"description\":\"dict[str, Any]\",\"compositions\":[]},\"description\":\"interact_with_instruct_content(instruct_content: BaseModel, mapping: dict, interact_type: str): dict[str, Any]\",\"aggregations\":[\"BaseModel\"]},\"multilines_input\":{\"name\":\"multilines_input\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"multilines_input(prompt: str): str\",\"aggregations\":[]}},\"compositions\":[\"tuple\"],\"aggregations\":[\"Type\",\"BaseModel\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:stop_list"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:check_input_type"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:input_num_until_valid"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:input_until_valid"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:interact_with_instruct_content"}, {"predicate": "has_class_method", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "metagpt/utils/human_interaction.py:HumanInteraction:multilines_input"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "?:tuple"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "?:Type"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "?:BaseModel"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "{\"lineno\":14,\"end_lineno\":107,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"HumanInteraction\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/human_interaction.py:HumanInteraction", "target": "{\"name\":\"HumanInteraction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"stop_list\",\"visibility\":\"+\",\"value_type\":\"tuple\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:stop_list", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:stop_list", "target": "{\"name\":\"stop_list\",\"type_\":\"tuple\",\"default_\":\"\",\"description\":\"stop_list : tuple\",\"compositions\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:check_input_type", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:check_input_type", "target": "{\"name\":\"check_input_type\",\"args\":[{\"name\":\"input_str\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"input_str: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Tuple[bool,Any]\",\"description\":\"Tuple[bool, Any]\",\"compositions\":[]},\"description\":\"check_input_type(input_str: str, req_type: Type): Tuple[bool, Any]\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:input_num_until_valid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:input_num_until_valid", "target": "{\"name\":\"input_num_until_valid\",\"args\":[{\"name\":\"num_max\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"num_max: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"input_num_until_valid(num_max: int): int\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:input_until_valid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:input_until_valid", "target": "{\"name\":\"input_until_valid\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]},{\"name\":\"req_type\",\"type_\":\"Type\",\"default_\":\"\",\"description\":\"req_type: Type\",\"compositions\":[\"Type\"]}],\"return_args\":{\"type_\":\"Any\",\"description\":\"Any\",\"compositions\":[]},\"description\":\"input_until_valid(prompt: str, req_type: Type): Any\",\"aggregations\":[\"Type\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:interact_with_instruct_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:interact_with_instruct_content", "target": "{\"name\":\"interact_with_instruct_content\",\"args\":[{\"name\":\"instruct_content\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"instruct_content: BaseModel\",\"compositions\":[\"BaseModel\"]},{\"name\":\"mapping\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"mapping: dict\",\"compositions\":[]},{\"name\":\"interact_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"interact_type: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,Any]\",\"description\":\"dict[str, Any]\",\"compositions\":[]},\"description\":\"interact_with_instruct_content(instruct_content: BaseModel, mapping: dict, interact_type: str): dict[str, Any]\",\"aggregations\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/utils/human_interaction.py:HumanInteraction:multilines_input", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/human_interaction.py:HumanInteraction:multilines_input", "target": "{\"name\":\"multilines_input\",\"args\":[{\"name\":\"prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prompt: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"multilines_input(prompt: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/human_provider.py", "target": "metagpt/provider/human_provider.py:HumanProvider"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "{\"name\":\"HumanProvider\",\"package\":\"metagpt/provider/human_provider.py:HumanProvider\",\"attributes\":{\"system_prompt\":{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}},\"methods\":{\"aask\":{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"generator\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"generator: bool\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], generator: bool, timeout): str\",\"aggregations\":[]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"ask\":{\"name\":\"ask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(msg: str, timeout): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:aask"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:ask"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/roles/role.py:Role"}, {"predicate": "isCompositeOn", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/roles/role.py:Role:llm"}, {"predicate": "has_class_method", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "metagpt/provider/human_provider.py:HumanProvider:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "{\"lineno\":13,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"HumanProvider\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/human_provider.py:HumanProvider", "target": "{\"name\":\"HumanProvider\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"system_prompt\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:system_prompt", "target": "{\"name\":\"system_prompt\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_prompt : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:aask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:aask", "target": "{\"name\":\"aask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"system_msgs\",\"type_\":\"Optional[list[str]]\",\"default_\":\"\",\"description\":\"system_msgs: Optional[list[str]]\",\"compositions\":[]},{\"name\":\"format_msgs\",\"type_\":\"Optional[list[dict[str,str]]]\",\"default_\":\"\",\"description\":\"format_msgs: Optional[list[dict[str, str]]]\",\"compositions\":[]},{\"name\":\"generator\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"generator: bool\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"aask(msg: str, system_msgs: Optional[list[str]], format_msgs: Optional[list[dict[str, str]]], generator: bool, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:ask", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/human_provider.py:HumanProvider:ask", "target": "{\"name\":\"ask\",\"args\":[{\"name\":\"msg\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"msg: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"ask(msg: str, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "{\"name\":\"IFlyTekTTS\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTS\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_secret : str\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"app_id : str\",\"compositions\":[]}},\"methods\":{\"synthesize_speech\":{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output_file: str\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(text, output_file: str, voice)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_key"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_secret"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:app_id"}, {"predicate": "has_class_method", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:synthesize_speech"}, {"predicate": "has_class_method", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:_create_url"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "{\"lineno\":51,\"end_lineno\":113,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTS\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS", "target": "{\"name\":\"IFlyTekTTS\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_secret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:api_secret", "target": "{\"name\":\"api_secret\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_secret : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:app_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:app_id", "target": "{\"name\":\"app_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"app_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:synthesize_speech", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:synthesize_speech", "target": "{\"name\":\"synthesize_speech\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"output_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"output_file: str\",\"compositions\":[]},{\"name\":\"voice\",\"type_\":\"\",\"default_\":\"\",\"description\":\"voice\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"synthesize_speech(text, output_file: str, voice)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "{\"name\":\"IFlyTekTTSResponse\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse\",\"attributes\":{\"code\":{\"name\":\"code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code : int\",\"compositions\":[]},\"data\":{\"name\":\"data\",\"type_\":\"Optional[AudioData]\",\"default_\":\"\",\"description\":\"data : Optional[AudioData]\",\"compositions\":[\"AudioData\"]},\"message\":{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]},\"sid\":{\"name\":\"sid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sid : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"AudioData\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:code"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:data"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:message"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:sid"}, {"predicate": "is_composite_of", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "metagpt/tools/iflytek_tts.py:AudioData"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "{\"lineno\":41,\"end_lineno\":45,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTSResponse\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "{\"name\":\"IFlyTekTTSResponse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"Optional[AudioData]\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"sid\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse", "target": "?:AudioData"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:code", "target": "{\"name\":\"code\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"code : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:data", "target": "{\"name\":\"data\",\"type_\":\"Optional[AudioData]\",\"default_\":\"\",\"description\":\"data : Optional[AudioData]\",\"compositions\":[\"AudioData\"]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:message", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:message", "target": "{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:sid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSResponse:sid", "target": "{\"name\":\"sid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sid : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "{\"name\":\"IFlyTekTTSStatus\",\"package\":\"metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus:name"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "{\"lineno\":29,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IFlyTekTTSStatus\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus", "target": "{\"name\":\"IFlyTekTTSStatus\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTSStatus:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult"}, {"predicate": "has_class", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image"}, {"predicate": "has_function", "source": "metagpt/tools/metagpt_text_to_image.py", "target": "metagpt/tools/metagpt_text_to_image.py:oas3_metagpt_text_to_image"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "{\"name\":\"ImageResult\",\"package\":\"metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult\",\"attributes\":{\"images\":{\"name\":\"images\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"images : List\",\"compositions\":[]},\"parameters\":{\"name\":\"parameters\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"parameters : Dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:images"}, {"predicate": "has_class_property", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:parameters"}, {"predicate": "has_class_view", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult", "target": "{\"name\":\"ImageResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"images\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"parameters\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:images", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:images", "target": "{\"name\":\"images\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"images : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:parameters", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image:ImageResult:parameters", "target": "{\"name\":\"parameters\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"parameters : Dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument", "target": "{\"name\":\"IndexableDocument\",\"package\":\"metagpt/document.py:IndexableDocument\",\"attributes\":{\"content_col\":{\"name\":\"content_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content_col : Optional[str]\",\"compositions\":[]},\"data\":{\"name\":\"data\",\"type_\":\"Union[pd.DataFrame,list]\",\"default_\":\"\",\"description\":\"data : Union[pd.DataFrame, list]\",\"compositions\":[\"pd.DataFrame\"]},\"meta_col\":{\"name\":\"meta_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"meta_col : Optional[str]\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"data_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"content_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content_col\",\"compositions\":[]},{\"name\":\"meta_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"meta_col\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(data_path: Path, content_col, meta_col)\",\"aggregations\":[\"Path\"]},\"get_docs_and_metadatas\":{\"name\":\"get_docs_and_metadatas\",\"args\":[{\"name\":\")\",\"type_\":\"(list\",\"default_\":\"\",\"description\":\"): (list\",\"compositions\":[]},{\"name\":\"list\",\"type_\":\"\",\"default_\":\"\",\"description\":\"list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_docs_and_metadatas(): (list, list)\",\"aggregations\":[]}},\"compositions\":[\"pd.DataFrame\"],\"aggregations\":[\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:content_col"}, {"predicate": "has_class_property", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:data"}, {"predicate": "has_class_property", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:meta_col"}, {"predicate": "has_class_property", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:model_config"}, {"predicate": "has_class_method", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:from_path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:get_docs_and_metadatas"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:IndexableDocument", "target": "?:pd.DataFrame"}, {"predicate": "isAggregateOf", "source": "metagpt/document.py:IndexableDocument", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:Document"}, {"predicate": "has_class_method", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_df"}, {"predicate": "has_class_method", "source": "metagpt/document.py:IndexableDocument", "target": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_langchain"}, {"predicate": "has_page_info", "source": "metagpt/document.py:IndexableDocument", "target": "{\"lineno\":114,\"end_lineno\":161,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"IndexableDocument\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:IndexableDocument", "target": "{\"name\":\"IndexableDocument\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content_col\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"Union[pd.DataFrame,list]\",\"default_value\":\"\"},{\"name\":\"meta_col\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:content_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:content_col", "target": "{\"name\":\"content_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content_col : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:data", "target": "{\"name\":\"data\",\"type_\":\"Union[pd.DataFrame,list]\",\"default_\":\"\",\"description\":\"data : Union[pd.DataFrame, list]\",\"compositions\":[\"pd.DataFrame\"]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:meta_col", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:meta_col", "target": "{\"name\":\"meta_col\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"meta_col : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:from_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:from_path", "target": "{\"name\":\"from_path\",\"args\":[{\"name\":\"data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"data_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"content_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content_col\",\"compositions\":[]},{\"name\":\"meta_col\",\"type_\":\"\",\"default_\":\"\",\"description\":\"meta_col\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(data_path: Path, content_col, meta_col)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:get_docs_and_metadatas", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:IndexableDocument:get_docs_and_metadatas", "target": "{\"name\":\"get_docs_and_metadatas\",\"args\":[{\"name\":\")\",\"type_\":\"(list\",\"default_\":\"\",\"description\":\"): (list\",\"compositions\":[]},{\"name\":\"list\",\"type_\":\"\",\"default_\":\"\",\"description\":\"list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_docs_and_metadatas(): (list, list)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:OCRResults"}, {"predicate": "has_class", "source": "metagpt/roles/invoice_ocr_assistant.py", "target": "metagpt/roles/invoice_ocr_assistant.py:ReplyData"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "{\"name\":\"InvoiceData\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoiceData\",\"attributes\":{\"invoice_data\":{\"name\":\"invoice_data\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"invoice_data : list[dict]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData:invoice_data"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "{\"lineno\":31,\"end_lineno\":32,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceData\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData", "target": "{\"name\":\"InvoiceData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"invoice_data\",\"visibility\":\"+\",\"value_type\":\"list[dict]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData:invoice_data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceData:invoice_data", "target": "{\"name\":\"invoice_data\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"invoice_data : list[dict]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "{\"name\":\"InvoiceOCR\",\"package\":\"metagpt/actions/invoice_ocr.py:InvoiceOCR\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"run(file_path: Path): list\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_check_file_type"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_unzip"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_ocr"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "{\"lineno\":31,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceOCR\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR", "target": "{\"name\":\"InvoiceOCR\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"list\",\"description\":\"list\",\"compositions\":[]},\"description\":\"run(file_path: Path): list\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "{\"name\":\"InvoiceOCRAssistant\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"orc_data\":{\"name\":\"orc_data\",\"type_\":\"Optional[list]\",\"default_\":\"\",\"description\":\"orc_data : Optional[list]\",\"compositions\":[]},\"origin_query\":{\"name\":\"origin_query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"origin_query : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:filename"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:language"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:orc_data"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:origin_query"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:profile"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "{\"lineno\":39,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoiceOCRAssistant\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant", "target": "{\"name\":\"InvoiceOCRAssistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"orc_data\",\"visibility\":\"+\",\"value_type\":\"Optional[list]\",\"default_value\":\"\"},{\"name\":\"origin_query\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:orc_data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:orc_data", "target": "{\"name\":\"orc_data\",\"type_\":\"Optional[list]\",\"default_\":\"\",\"description\":\"orc_data : Optional[list]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:origin_query", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:origin_query", "target": "{\"name\":\"origin_query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"origin_query : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "{\"name\":\"InvoicePath\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:InvoicePath\",\"attributes\":{\"file_path\":{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path : Path\",\"compositions\":[\"Path\"]}},\"methods\":{},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath:file_path"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "?:Path"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "{\"lineno\":23,\"end_lineno\":24,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"InvoicePath\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath", "target": "{\"name\":\"InvoicePath\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"file_path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath:file_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoicePath:file_path", "target": "{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/llm_config.py", "target": "metagpt/configs/llm_config.py:LLMConfig"}, {"predicate": "has_class", "source": "metagpt/configs/llm_config.py", "target": "metagpt/configs/llm_config.py:LLMType"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "{\"name\":\"LLMConfig\",\"package\":\"metagpt/configs/llm_config.py:LLMConfig\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_secret : Optional[str]\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]},\"api_version\":{\"name\":\"api_version\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_version : Optional[str]\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"app_id : Optional[str]\",\"compositions\":[]},\"base_url\":{\"name\":\"base_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"base_url : str\",\"compositions\":[]},\"best_of\":{\"name\":\"best_of\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"best_of : Optional[int]\",\"compositions\":[]},\"calc_usage\":{\"name\":\"calc_usage\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"calc_usage : bool\",\"compositions\":[]},\"domain\":{\"name\":\"domain\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"domain : Optional[str]\",\"compositions\":[]},\"frequency_penalty\":{\"name\":\"frequency_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"frequency_penalty : float\",\"compositions\":[]},\"logprobs\":{\"name\":\"logprobs\",\"type_\":\"Optional[bool]\",\"default_\":\"\",\"description\":\"logprobs : Optional[bool]\",\"compositions\":[]},\"max_token\":{\"name\":\"max_token\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_token : int\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]},\"n\":{\"name\":\"n\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"n : Optional[int]\",\"compositions\":[]},\"presence_penalty\":{\"name\":\"presence_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"presence_penalty : float\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]},\"repetition_penalty\":{\"name\":\"repetition_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"repetition_penalty : float\",\"compositions\":[]},\"stop\":{\"name\":\"stop\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"stop : Optional[str]\",\"compositions\":[]},\"stream\":{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream : bool\",\"compositions\":[]},\"temperature\":{\"name\":\"temperature\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"temperature : float\",\"compositions\":[]},\"timeout\":{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout : int\",\"compositions\":[]},\"top_k\":{\"name\":\"top_k\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"top_k : int\",\"compositions\":[]},\"top_logprobs\":{\"name\":\"top_logprobs\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"top_logprobs : Optional[int]\",\"compositions\":[]},\"top_p\":{\"name\":\"top_p\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"top_p : float\",\"compositions\":[]}},\"methods\":{\"check_llm_key\":{\"name\":\"check_llm_key\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_llm_key(v)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:api_key"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:api_secret"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:api_type"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:api_version"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:app_id"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:base_url"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:best_of"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:calc_usage"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:domain"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:frequency_penalty"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:logprobs"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:max_token"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:model"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:n"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:presence_penalty"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:proxy"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:repetition_penalty"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:stop"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:stream"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:temperature"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:timeout"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:top_k"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:top_logprobs"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:top_p"}, {"predicate": "has_class_method", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/configs/llm_config.py:LLMConfig:check_llm_key"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/config2.py:Config"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/config2.py:Config:llm"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/base_llm.py:BaseLLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/anthropic_api.py:Claude2"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/anthropic_api.py:Claude2:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/google_gemini_api.py:GeminiLLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/ollama_api.py:OllamaLLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/openai_api.py:OpenAILLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/spark_api.py:SparkLLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/spark_api.py:SparkLLM:config"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "{\"lineno\":32,\"end_lineno\":78,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "{\"name\":\"LLMConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_version\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"base_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"best_of\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"calc_usage\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"domain\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"frequency_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"logprobs\",\"visibility\":\"+\",\"value_type\":\"Optional[bool]\",\"default_value\":\"\"},{\"name\":\"max_token\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"n\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"presence_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"repetition_penalty\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"stop\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"stream\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"temperature\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"timeout\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"top_k\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"top_logprobs\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"top_p\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "{\"description\":\"This source code defines a class LLMConfig which represents the configuration for an LLM (Language Model) system. It includes various fields such as API key, base URL, model, app ID, and other parameters for controlling the behavior of the LLM system.\",\"use_cases\":[{\"description\":\"Configure LLM system\",\"inputs\":[\"api_key\",\"api_type\",\"base_url\",\"api_version\",\"model\",\"app_id\",\"api_secret\",\"domain\",\"max_token\",\"temperature\",\"top_p\",\"top_k\",\"repetition_penalty\",\"stop\",\"presence_penalty\",\"frequency_penalty\",\"best_of\",\"n\",\"stream\",\"logprobs\",\"top_logprobs\",\"timeout\",\"proxy\",\"calc_usage\"],\"outputs\":[],\"actors\":[\"System Administrator\"],\"steps\":[\"The system administrator provides the configuration parameters for the LLM system.\",\"The system validates the provided configuration parameters.\",\"The LLM system is configured with the provided parameters.\"],\"reason\":\"The external system needs to configure the LLM system with specific parameters to control its behavior and functionality.\"}],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/configs/llm_config.py:LLMConfig", "target": "\nsequenceDiagram\n participant SystemAdministrator\n participant LLMSystem\n\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:api_secret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:api_secret", "target": "{\"name\":\"api_secret\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_secret : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:api_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:api_type", "target": "{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:api_version", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:api_version", "target": "{\"name\":\"api_version\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_version : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:app_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:app_id", "target": "{\"name\":\"app_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"app_id : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:base_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:base_url", "target": "{\"name\":\"base_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"base_url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:best_of", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:best_of", "target": "{\"name\":\"best_of\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"best_of : Optional[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:calc_usage", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:calc_usage", "target": "{\"name\":\"calc_usage\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"calc_usage : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:domain", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:domain", "target": "{\"name\":\"domain\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"domain : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:frequency_penalty", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:frequency_penalty", "target": "{\"name\":\"frequency_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"frequency_penalty : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:logprobs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:logprobs", "target": "{\"name\":\"logprobs\",\"type_\":\"Optional[bool]\",\"default_\":\"\",\"description\":\"logprobs : Optional[bool]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:max_token", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:max_token", "target": "{\"name\":\"max_token\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_token : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:model", "target": "{\"name\":\"model\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"model : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:n", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:n", "target": "{\"name\":\"n\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"n : Optional[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:presence_penalty", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:presence_penalty", "target": "{\"name\":\"presence_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"presence_penalty : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"proxy : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:repetition_penalty", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:repetition_penalty", "target": "{\"name\":\"repetition_penalty\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"repetition_penalty : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:stop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:stop", "target": "{\"name\":\"stop\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"stop : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:stream", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:stream", "target": "{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:temperature", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:temperature", "target": "{\"name\":\"temperature\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"temperature : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:timeout", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:timeout", "target": "{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:top_k", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:top_k", "target": "{\"name\":\"top_k\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"top_k : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:top_logprobs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:top_logprobs", "target": "{\"name\":\"top_logprobs\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"top_logprobs : Optional[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:top_p", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:top_p", "target": "{\"name\":\"top_p\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"top_p : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMConfig:check_llm_key", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMConfig:check_llm_key", "target": "{\"name\":\"check_llm_key\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_llm_key(v)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/llm_provider_registry.py", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry"}, {"predicate": "has_function", "source": "metagpt/provider/llm_provider_registry.py", "target": "metagpt/provider/llm_provider_registry.py:register_provider"}, {"predicate": "has_function", "source": "metagpt/provider/llm_provider_registry.py", "target": "metagpt/provider/llm_provider_registry.py:create_llm_instance"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "{\"name\":\"LLMProviderRegistry\",\"package\":\"metagpt/provider/llm_provider_registry.py:LLMProviderRegistry\",\"attributes\":{\"providers\":{\"name\":\"providers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"providers : dict\",\"compositions\":[]}},\"methods\":{\"get_provider\":{\"name\":\"get_provider\",\"args\":[{\"name\":\"enum\",\"type_\":\"LLMType\",\"default_\":\"\",\"description\":\"enum: LLMType\",\"compositions\":[\"LLMType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_provider(enum: LLMType)\",\"aggregations\":[\"LLMType\"]},\"register\":{\"name\":\"register\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"provider_cls\",\"type_\":\"\",\"default_\":\"\",\"description\":\"provider_cls\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register(key, provider_cls)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"LLMType\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:providers"}, {"predicate": "has_class_method", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:get_provider"}, {"predicate": "has_class_method", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:register"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "?:LLMType"}, {"predicate": "has_class_method", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "{\"lineno\":12,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMProviderRegistry\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry", "target": "{\"name\":\"LLMProviderRegistry\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"providers\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:providers", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:providers", "target": "{\"name\":\"providers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"providers : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:get_provider", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:get_provider", "target": "{\"name\":\"get_provider\",\"args\":[{\"name\":\"enum\",\"type_\":\"LLMType\",\"default_\":\"\",\"description\":\"enum: LLMType\",\"compositions\":[\"LLMType\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_provider(enum: LLMType)\",\"aggregations\":[\"LLMType\"]}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:register", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:register", "target": "{\"name\":\"register\",\"args\":[{\"name\":\"key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"key\",\"compositions\":[]},{\"name\":\"provider_cls\",\"type_\":\"\",\"default_\":\"\",\"description\":\"provider_cls\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"register(key, provider_cls)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMType", "target": "{\"name\":\"LLMType\",\"package\":\"metagpt/configs/llm_config.py:LLMType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/llm_config.py:LLMType", "target": "metagpt/configs/llm_config.py:LLMType:name"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/llm_config.py:LLMType", "target": "metagpt/configs/llm_config.py:LLMConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/llm_config.py:LLMType", "target": "metagpt/configs/llm_config.py:LLMConfig:api_type"}, {"predicate": "has_class_method", "source": "metagpt/configs/llm_config.py:LLMType", "target": "metagpt/configs/llm_config.py:LLMType:__missing__"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:LLMType", "target": "{\"lineno\":16,\"end_lineno\":29,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LLMType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/llm_config.py:LLMType", "target": "{\"name\":\"LLMType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/llm_config.py:LLMType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/lancedb_store.py", "target": "metagpt/document_store/lancedb_store.py:LanceStore"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "{\"name\":\"LanceStore\",\"package\":\"metagpt/document_store/lancedb_store.py:LanceStore\",\"attributes\":{\"db\":{\"name\":\"db\",\"type_\":\"LanceDBConnection,RemoteDBConnection\",\"default_\":\"\",\"description\":\"db : LanceDBConnection, RemoteDBConnection\",\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\"]},\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"table\":{\"name\":\"table\",\"type_\":\"LanceTable,NoneType,RemoteTable\",\"default_\":\"\",\"description\":\"table : LanceTable, NoneType, RemoteTable\",\"compositions\":[\"LanceTable\",\"RemoteTable\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(data, metadata, _id)\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]},\"drop\":{\"name\":\"drop\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"drop(name)\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metric\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metric\",\"compositions\":[]},{\"name\":\"nprobes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"nprobes\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metric, nprobes)\",\"aggregations\":[]},\"write\":{\"name\":\"write\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(data, metadatas, ids)\",\"aggregations\":[]}},\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\",\"LanceTable\",\"RemoteTable\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:db"}, {"predicate": "has_class_property", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:name"}, {"predicate": "has_class_property", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:table"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:delete"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:drop"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:persist"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:write"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "?:LanceDBConnection"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "?:RemoteDBConnection"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "?:LanceTable"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "?:RemoteTable"}, {"predicate": "has_class_method", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "metagpt/document_store/lancedb_store.py:LanceStore:__init__"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "{\"lineno\":14,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LanceStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/lancedb_store.py:LanceStore", "target": "{\"name\":\"LanceStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"db\",\"visibility\":\"+\",\"value_type\":\"LanceDBConnection,RemoteDBConnection\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"table\",\"visibility\":\"+\",\"value_type\":\"LanceTable,NoneType,RemoteTable\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:db", "target": "{\"name\":\"db\",\"type_\":\"LanceDBConnection,RemoteDBConnection\",\"default_\":\"\",\"description\":\"db : LanceDBConnection, RemoteDBConnection\",\"compositions\":[\"LanceDBConnection\",\"RemoteDBConnection\"]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:table", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:table", "target": "{\"name\":\"table\",\"type_\":\"LanceTable,NoneType,RemoteTable\",\"default_\":\"\",\"description\":\"table : LanceTable, NoneType, RemoteTable\",\"compositions\":[\"LanceTable\",\"RemoteTable\"]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadata\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadata\",\"compositions\":[]},{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(data, metadata, _id)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"_id\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(_id)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:drop", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:drop", "target": "{\"name\":\"drop\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"drop(name)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_results\",\"compositions\":[]},{\"name\":\"metric\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metric\",\"compositions\":[]},{\"name\":\"nprobes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"nprobes\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query, n_results, metric, nprobes)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/lancedb_store.py:LanceStore:write", "target": "{\"name\":\"write\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"metadatas\",\"type_\":\"\",\"default_\":\"\",\"description\":\"metadatas\",\"compositions\":[]},{\"name\":\"ids\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ids\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write(data, metadatas, ids)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "{\"name\":\"LocalStore\",\"package\":\"metagpt/document_store/base_store.py:LocalStore\",\"attributes\":{\"cache_dir\":{\"name\":\"cache_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"cache_dir : Optional[Path]\",\"compositions\":[\"Path\"]},\"fname\":{\"name\":\"fname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"fname\",\"compositions\":[]},\"raw_data_path\":{\"name\":\"raw_data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"raw_data_path : Path\",\"compositions\":[\"Path\"]},\"store\":{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:cache_dir"}, {"predicate": "has_class_property", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:fname"}, {"predicate": "has_class_property", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:raw_data_path"}, {"predicate": "has_class_property", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:store"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:__init__"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:_get_index_and_store_fname"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:_load"}, {"predicate": "has_class_method", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "metagpt/document_store/base_store.py:LocalStore:_write"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "{\"lineno\":28,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LocalStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/base_store.py:LocalStore", "target": "{\"name\":\"LocalStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cache_dir\",\"visibility\":\"+\",\"value_type\":\"Optional[Path]\",\"default_value\":\"\"},{\"name\":\"fname\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"raw_data_path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:cache_dir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore:cache_dir", "target": "{\"name\":\"cache_dir\",\"type_\":\"Optional[Path]\",\"default_\":\"\",\"description\":\"cache_dir : Optional[Path]\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:fname", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore:fname", "target": "{\"name\":\"fname\",\"type_\":\"\",\"default_\":\"\",\"description\":\"fname\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:raw_data_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore:raw_data_path", "target": "{\"name\":\"raw_data_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"raw_data_path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/base_store.py:LocalStore:store", "target": "{\"name\":\"store\",\"type_\":\"\",\"default_\":\"\",\"description\":\"store\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/memory/longterm_memory.py", "target": "metagpt/memory/longterm_memory.py:LongTermMemory"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "{\"name\":\"LongTermMemory\",\"package\":\"metagpt/memory/longterm_memory.py:LongTermMemory\",\"attributes\":{\"memory_storage\":{\"name\":\"memory_storage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory_storage\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"msg_from_recover\":{\"name\":\"msg_from_recover\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"msg_from_recover : bool\",\"compositions\":[]},\"rc\":{\"name\":\"rc\",\"type_\":\"Optional[RoleContext]\",\"default_\":\"\",\"description\":\"rc : Optional[RoleContext]\",\"compositions\":[\"RoleContext\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]},\"clear\":{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]},\"find_news\":{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]},\"recover_memory\":{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]},{\"name\":\"rc\",\"type_\":\"RoleContext\",\"default_\":\"\",\"description\":\"rc: RoleContext\",\"compositions\":[\"RoleContext\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"recover_memory(role_id: str, rc: RoleContext)\",\"aggregations\":[\"RoleContext\"]}},\"compositions\":[\"RoleContext\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage"}, {"predicate": "has_class_property", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:model_config"}, {"predicate": "has_class_property", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:msg_from_recover"}, {"predicate": "has_class_property", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:rc"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:add"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:clear"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:delete"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:find_news"}, {"predicate": "has_class_method", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:recover_memory"}, {"predicate": "isAggregateOf", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/memory/memory.py:Memory"}, {"predicate": "is_composite_of", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "{\"lineno\":18,\"end_lineno\":77,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"LongTermMemory\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "{\"name\":\"LongTermMemory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"memory_storage\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"msg_from_recover\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"rc\",\"visibility\":\"+\",\"value_type\":\"Optional[RoleContext]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/longterm_memory.py:LongTermMemory", "target": "?:RoleContext"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage", "target": "{\"name\":\"memory_storage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory_storage\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:msg_from_recover", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:msg_from_recover", "target": "{\"name\":\"msg_from_recover\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"msg_from_recover : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:rc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:rc", "target": "{\"name\":\"rc\",\"type_\":\"Optional[RoleContext]\",\"default_\":\"\",\"description\":\"rc : Optional[RoleContext]\",\"compositions\":[\"RoleContext\"]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:clear", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:clear", "target": "{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:find_news", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:find_news", "target": "{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:recover_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/longterm_memory.py:LongTermMemory:recover_memory", "target": "{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]},{\"name\":\"rc\",\"type_\":\"RoleContext\",\"default_\":\"\",\"description\":\"rc: RoleContext\",\"compositions\":[\"RoleContext\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"recover_memory(role_id: str, rc: RoleContext)\",\"aggregations\":[\"RoleContext\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "{\"name\":\"MCTSSolver\",\"package\":\"metagpt/strategy/tot.py:MCTSSolver\",\"attributes\":{},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "metagpt/strategy/tot.py:MCTSSolver:solve"}, {"predicate": "isGeneralizeOf", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "{\"lineno\":230,\"end_lineno\":232,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MCTSSolver\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:MCTSSolver", "target": "{\"name\":\"MCTSSolver\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:MCTSSolver:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:MCTSSolver:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "{\"name\":\"MeilisearchEngine\",\"package\":\"metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"Client\",\"default_\":\"\",\"description\":\"client : Client\",\"compositions\":[\"Client\"]}},\"methods\":{\"add_documents\":{\"name\":\"add_documents\",\"args\":[{\"name\":\"data_source\",\"type_\":\"DataSource\",\"default_\":\"\",\"description\":\"data_source: DataSource\",\"compositions\":[\"DataSource\"]},{\"name\":\"documents\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"documents: List[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_documents(data_source: DataSource, documents: List[dict])\",\"aggregations\":[\"DataSource\"]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query)\",\"aggregations\":[]},\"set_index\":{\"name\":\"set_index\",\"args\":[{\"name\":\"index\",\"type_\":\"\",\"default_\":\"\",\"description\":\"index\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_index(index)\",\"aggregations\":[]}},\"compositions\":[\"Client\"],\"aggregations\":[\"DataSource\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:client"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:add_documents"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:search"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:set_index"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "?:Client"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "?:DataSource"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "{\"lineno\":23,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MeilisearchEngine\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine", "target": "{\"name\":\"MeilisearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"Client\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:client", "target": "{\"name\":\"client\",\"type_\":\"Client\",\"default_\":\"\",\"description\":\"client : Client\",\"compositions\":[\"Client\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:add_documents", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:add_documents", "target": "{\"name\":\"add_documents\",\"args\":[{\"name\":\"data_source\",\"type_\":\"DataSource\",\"default_\":\"\",\"description\":\"data_source: DataSource\",\"compositions\":[\"DataSource\"]},{\"name\":\"documents\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"documents: List[dict]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_documents(data_source: DataSource, documents: List[dict])\",\"aggregations\":[\"DataSource\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(query)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:set_index", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:set_index", "target": "{\"name\":\"set_index\",\"args\":[{\"name\":\"index\",\"type_\":\"\",\"default_\":\"\",\"description\":\"index\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_index(index)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/memory.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/memory/memory.py", "target": "metagpt/memory/memory.py:Memory"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory", "target": "{\"name\":\"Memory\",\"package\":\"metagpt/memory/memory.py:Memory\",\"attributes\":{\"ignore_id\":{\"name\":\"ignore_id\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"ignore_id : bool\",\"compositions\":[]},\"index\":{\"name\":\"index\",\"type_\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_\":\"\",\"description\":\"index : DefaultDict[str, list[SerializeAsAny[Message]]]\",\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"]},\"storage\":{\"name\":\"storage\",\"type_\":\"list[SerializeAsAny[Message]]\",\"default_\":\"\",\"description\":\"storage : list[SerializeAsAny[Message]]\",\"compositions\":[\"Message\",\"SerializeAsAny\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]},\"add_batch\":{\"name\":\"add_batch\",\"args\":[{\"name\":\"messages\",\"type_\":\"Iterable[Message]\",\"default_\":\"\",\"description\":\"messages: Iterable[Message]\",\"compositions\":[\"Iterable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_batch(messages: Iterable[Message])\",\"aggregations\":[\"Message\",\"Iterable\"]},\"clear\":{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]},\"count\":{\"name\":\"count\",\"args\":[],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"count(): int\",\"aggregations\":[]},\"delete\":{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]},\"delete_newest\":{\"name\":\"delete_newest\",\"args\":[],\"return_args\":{\"type_\":\"'Message'\",\"description\":\"'Message'\",\"compositions\":[\"Message\"]},\"description\":\"delete_newest(): 'Message'\",\"aggregations\":[\"Message\"]},\"find_news\":{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get(k): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_action\":{\"name\":\"get_by_action\",\"args\":[{\"name\":\"action\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_action(action): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_actions\":{\"name\":\"get_by_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"Set\",\"default_\":\"\",\"description\":\"actions: Set\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_actions(actions: Set): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_content\":{\"name\":\"get_by_content\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_content(content: str): list[Message]\",\"aggregations\":[\"Message\"]},\"get_by_role\":{\"name\":\"get_by_role\",\"args\":[{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_role(role: str): list[Message]\",\"aggregations\":[\"Message\"]},\"try_remember\":{\"name\":\"try_remember\",\"args\":[{\"name\":\"keyword\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"keyword: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"try_remember(keyword: str): list[Message]\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"],\"aggregations\":[\"Iterable\"]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:ignore_id"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:index"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:storage"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:add"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:add_batch"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:clear"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:count"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:delete"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:delete_newest"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:find_news"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get_by_action"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get_by_actions"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get_by_content"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:get_by_role"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/memory/memory.py:Memory:try_remember"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory.py:Memory", "target": "?:DefaultDict"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory.py:Memory", "target": "?:SerializeAsAny"}, {"predicate": "isAggregateOf", "source": "metagpt/memory/memory.py:Memory", "target": "?:Iterable"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "isCompositeOn", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/roles/role.py:RoleContext:memory"}, {"predicate": "is_composite_of", "source": "metagpt/memory/memory.py:Memory", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:Memory", "target": "{\"lineno\":19,\"end_lineno\":106,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Memory\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/memory/memory.py:Memory", "target": "{\"name\":\"Memory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ignore_id\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"index\",\"visibility\":\"+\",\"value_type\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_value\":\"\"},{\"name\":\"storage\",\"visibility\":\"+\",\"value_type\":\"list[SerializeAsAny[Message]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory.py:Memory", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:ignore_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:ignore_id", "target": "{\"name\":\"ignore_id\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"ignore_id : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:index", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:index", "target": "{\"name\":\"index\",\"type_\":\"DefaultDict[str,list[SerializeAsAny[Message]]]\",\"default_\":\"\",\"description\":\"index : DefaultDict[str, list[SerializeAsAny[Message]]]\",\"compositions\":[\"DefaultDict\",\"Message\",\"SerializeAsAny\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:storage", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:storage", "target": "{\"name\":\"storage\",\"type_\":\"list[SerializeAsAny[Message]]\",\"default_\":\"\",\"description\":\"storage : list[SerializeAsAny[Message]]\",\"compositions\":[\"Message\",\"SerializeAsAny\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:add_batch", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:add_batch", "target": "{\"name\":\"add_batch\",\"args\":[{\"name\":\"messages\",\"type_\":\"Iterable[Message]\",\"default_\":\"\",\"description\":\"messages: Iterable[Message]\",\"compositions\":[\"Iterable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_batch(messages: Iterable[Message])\",\"aggregations\":[\"Message\",\"Iterable\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:clear", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:clear", "target": "{\"name\":\"clear\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clear()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:count", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:count", "target": "{\"name\":\"count\",\"args\":[],\"return_args\":{\"type_\":\"int\",\"description\":\"int\",\"compositions\":[]},\"description\":\"count(): int\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:delete", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:delete", "target": "{\"name\":\"delete\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete(message: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:delete_newest", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:delete_newest", "target": "{\"name\":\"delete_newest\",\"args\":[],\"return_args\":{\"type_\":\"'Message'\",\"description\":\"'Message'\",\"compositions\":[\"Message\"]},\"description\":\"delete_newest(): 'Message'\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:find_news", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:find_news", "target": "{\"name\":\"find_news\",\"args\":[{\"name\":\"observed\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"observed: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"find_news(observed: list[Message], k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get(k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get_by_action", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get_by_action", "target": "{\"name\":\"get_by_action\",\"args\":[{\"name\":\"action\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_action(action): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get_by_actions", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get_by_actions", "target": "{\"name\":\"get_by_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"Set\",\"default_\":\"\",\"description\":\"actions: Set\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_actions(actions: Set): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get_by_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get_by_content", "target": "{\"name\":\"get_by_content\",\"args\":[{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_content(content: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:get_by_role", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:get_by_role", "target": "{\"name\":\"get_by_role\",\"args\":[{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_by_role(role: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory.py:Memory:try_remember", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory.py:Memory:try_remember", "target": "{\"name\":\"try_remember\",\"args\":[{\"name\":\"keyword\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"keyword: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"try_remember(keyword: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/memory/memory_storage.py", "target": "metagpt/memory/memory_storage.py:MemoryStorage"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "{\"name\":\"MemoryStorage\",\"package\":\"metagpt/memory/memory_storage.py:MemoryStorage\",\"attributes\":{\"embedding\":{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]},\"is_initialized\":{\"name\":\"is_initialized\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_initialized\",\"compositions\":[]},\"mem_ttl\":{\"name\":\"mem_ttl\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mem_ttl : int\",\"compositions\":[]},\"role_id\":{\"name\":\"role_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"role_id : Optional[str]\",\"compositions\":[]},\"role_mem_path\":{\"name\":\"role_mem_path\",\"type_\":\"Optional[str],Path\",\"default_\":\"\",\"description\":\"role_mem_path : Optional[str], Path\",\"compositions\":[\"Path\"]},\"store\":{\"name\":\"store\",\"type_\":\"NoneType,Optional[FAISS]\",\"default_\":\"\",\"description\":\"store : NoneType, Optional[FAISS]\",\"compositions\":[\"FAISS\"]},\"threshold\":{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"add(message: Message): bool\",\"aggregations\":[\"Message\"]},\"clean\":{\"name\":\"clean\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clean()\",\"aggregations\":[]},\"persist\":{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]},\"recover_memory\":{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"recover_memory(role_id: str): list[Message]\",\"aggregations\":[\"Message\"]},\"search_dissimilar\":{\"name\":\"search_dissimilar\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"search_dissimilar(message: Message, k): list[Message]\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"OpenAIEmbeddings\",\"Path\",\"FAISS\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:embedding"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:mem_ttl"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:role_id"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:role_mem_path"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:store"}, {"predicate": "has_class_property", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:threshold"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:add"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:clean"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:persist"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:recover_memory"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:search_dissimilar"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "?:OpenAIEmbeddings"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "?:Path"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "?:FAISS"}, {"predicate": "isAggregateOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/document_store/faiss_store.py:FaissStore"}, {"predicate": "isCompositeOf", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/longterm_memory.py:LongTermMemory"}, {"predicate": "isCompositeOn", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:memory_storage"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:__init__"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:_load"}, {"predicate": "has_class_method", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "metagpt/memory/memory_storage.py:MemoryStorage:_get_index_and_store_fname"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "{\"lineno\":21,\"end_lineno\":117,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MemoryStorage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/memory/memory_storage.py:MemoryStorage", "target": "{\"name\":\"MemoryStorage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"embedding\",\"visibility\":\"+\",\"value_type\":\"OpenAIEmbeddings\",\"default_value\":\"\"},{\"name\":\"is_initialized\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"mem_ttl\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"role_id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"role_mem_path\",\"visibility\":\"+\",\"value_type\":\"Optional[str],Path\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"NoneType,Optional[FAISS]\",\"default_value\":\"\"},{\"name\":\"threshold\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:embedding", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:embedding", "target": "{\"name\":\"embedding\",\"type_\":\"OpenAIEmbeddings\",\"default_\":\"\",\"description\":\"embedding : OpenAIEmbeddings\",\"compositions\":[\"OpenAIEmbeddings\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized", "target": "{\"name\":\"is_initialized\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_initialized\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:is_initialized", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:mem_ttl", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:mem_ttl", "target": "{\"name\":\"mem_ttl\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"mem_ttl : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:role_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:role_id", "target": "{\"name\":\"role_id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"role_id : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:role_mem_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:role_mem_path", "target": "{\"name\":\"role_mem_path\",\"type_\":\"Optional[str],Path\",\"default_\":\"\",\"description\":\"role_mem_path : Optional[str], Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:store", "target": "{\"name\":\"store\",\"type_\":\"NoneType,Optional[FAISS]\",\"default_\":\"\",\"description\":\"store : NoneType, Optional[FAISS]\",\"compositions\":[\"FAISS\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:threshold", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:threshold", "target": "{\"name\":\"threshold\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"threshold : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"add(message: Message): bool\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:clean", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:clean", "target": "{\"name\":\"clean\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"clean()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:persist", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:persist", "target": "{\"name\":\"persist\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"persist()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:recover_memory", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:recover_memory", "target": "{\"name\":\"recover_memory\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"recover_memory(role_id: str): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:search_dissimilar", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/memory/memory_storage.py:MemoryStorage:search_dissimilar", "target": "{\"name\":\"search_dissimilar\",\"args\":[{\"name\":\"message\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"message: Message\",\"compositions\":[\"Message\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"search_dissimilar(message: Message, k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/mermaid_config.py", "target": "metagpt/configs/mermaid_config.py:MermaidConfig"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "{\"name\":\"MermaidConfig\",\"package\":\"metagpt/configs/mermaid_config.py:MermaidConfig\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_\":\"\",\"description\":\"engine : Literal['nodejs', 'ink', 'playwright', 'pyppeteer']\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]},\"puppeteer_config\":{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/configs/mermaid_config.py:MermaidConfig:engine"}, {"predicate": "has_class_property", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/configs/mermaid_config.py:MermaidConfig:path"}, {"predicate": "has_class_property", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/configs/mermaid_config.py:MermaidConfig:puppeteer_config"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/config2.py:Config"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "metagpt/config2.py:Config:mermaid"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MermaidConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/mermaid_config.py:MermaidConfig", "target": "{\"name\":\"MermaidConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"puppeteer_config\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:engine", "target": "{\"name\":\"engine\",\"type_\":\"Literal['nodejs','ink','playwright','pyppeteer']\",\"default_\":\"\",\"description\":\"engine : Literal['nodejs', 'ink', 'playwright', 'pyppeteer']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:path", "target": "{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:puppeteer_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/mermaid_config.py:MermaidConfig:puppeteer_config", "target": "{\"name\":\"puppeteer_config\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"puppeteer_config : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message", "target": "{\"name\":\"Message\",\"package\":\"metagpt/schema.py:Message\",\"attributes\":{\"cause_by\":{\"name\":\"cause_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cause_by : str\",\"compositions\":[]},\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"id\":{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id : str\",\"compositions\":[]},\"instruct_content\":{\"name\":\"instruct_content\",\"type_\":\"Optional[BaseModel]\",\"default_\":\"\",\"description\":\"instruct_content : Optional[BaseModel]\",\"compositions\":[\"BaseModel\"]},\"role\":{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]},\"send_to\":{\"name\":\"send_to\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"send_to : set[str]\",\"compositions\":[]},\"sent_from\":{\"name\":\"sent_from\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sent_from : str\",\"compositions\":[]}},\"methods\":{\"check_cause_by\":{\"name\":\"check_cause_by\",\"args\":[{\"name\":\"cause_by\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"cause_by: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_cause_by(cause_by: Any): str\",\"aggregations\":[]},\"check_id\":{\"name\":\"check_id\",\"args\":[{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_id(id: str): str\",\"aggregations\":[]},\"check_instruct_content\":{\"name\":\"check_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"ic: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"BaseModel\",\"description\":\"BaseModel\",\"compositions\":[\"BaseModel\"]},\"description\":\"check_instruct_content(ic: Any): BaseModel\",\"aggregations\":[\"BaseModel\"]},\"check_send_to\":{\"name\":\"check_send_to\",\"args\":[{\"name\":\"send_to\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"send_to: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"set\",\"description\":\"set\",\"compositions\":[]},\"description\":\"check_send_to(send_to: Any): set\",\"aggregations\":[]},\"check_sent_from\":{\"name\":\"check_sent_from\",\"args\":[{\"name\":\"sent_from\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"sent_from: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_sent_from(sent_from: Any): str\",\"aggregations\":[]},\"dump\":{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"val\",\"type_\":\"\",\"default_\":\"\",\"description\":\"val\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(val)\",\"aggregations\":[]},\"ser_instruct_content\":{\"name\":\"ser_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"ic: BaseModel\",\"compositions\":[\"BaseModel\"]}],\"return_args\":{\"type_\":\"Union[dict,None]\",\"description\":\"Union[dict, None]\",\"compositions\":[]},\"description\":\"ser_instruct_content(ic: BaseModel): Union[dict, None]\",\"aggregations\":[\"BaseModel\"]},\"to_dict\":{\"name\":\"to_dict\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"to_dict(): dict\",\"aggregations\":[]}},\"compositions\":[\"BaseModel\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:cause_by"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:content"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:id"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:instruct_content"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:role"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:send_to"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:sent_from"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_cause_by"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_id"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_instruct_content"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_send_to"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:check_sent_from"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:dump"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:load"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:ser_instruct_content"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:to_dict"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Message", "target": "?:BaseModel"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:rsp"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/skill_action.py:SkillAction"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/skill_action.py:SkillAction:rsp"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/talk_action.py:TalkAction"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:Message", "target": "metagpt/actions/talk_action.py:TalkAction:rsp"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:__init__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:__setattr__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:__str__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:Message", "target": "metagpt/schema.py:Message:__repr__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:Message", "target": "{\"lineno\":189,\"end_lineno\":304,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Message\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:Message", "target": "{\"name\":\"Message\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cause_by\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"instruct_content\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseModel]\",\"default_value\":\"\"},{\"name\":\"role\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"send_to\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"sent_from\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/schema.py:Message", "target": "{\"description\":\"This source code defines a Message class that represents a message with various attributes and methods for validation and serialization. It also includes methods for converting the message object to a dictionary and JSON string, as well as loading a message from a JSON string.\",\"use_cases\":[{\"description\":\"Create a new message with the given content, instruct content, role, cause by, sent from, and send to.\",\"inputs\":[\"content\",\"instruct_content\",\"role\",\"cause_by\",\"sent_from\",\"send_to\"],\"outputs\":[\"message_id\"],\"actors\":[\"User\"],\"steps\":[\"Validate and set the message ID if not provided\",\"Validate and set the instruct content if provided\",\"Validate and set the cause by if provided\",\"Validate and set the sent from if provided\",\"Validate and set the send to if provided\",\"Create a new message object with the provided data\",\"Return the message ID\"],\"reason\":\"When a user wants to create a new message with specific attributes.\"},{\"description\":\"Convert the message object to a dictionary containing role and content.\",\"inputs\":[],\"outputs\":[\"message_dict\"],\"actors\":[\"User\"],\"steps\":[\"Create a dictionary with role and content attributes of the message object\",\"Return the created dictionary\"],\"reason\":\"When a user needs to convert a message object to a dictionary.\"},{\"description\":\"Convert the message object to a JSON string.\",\"inputs\":[],\"outputs\":[\"json_string\"],\"actors\":[\"User\"],\"steps\":[\"Convert the message object to a JSON string\",\"Return the JSON string\"],\"reason\":\"When a user needs to convert a message object to a JSON string.\"},{\"description\":\"Load a message object from a JSON string.\",\"inputs\":[\"json_string\"],\"outputs\":[\"message_object\"],\"actors\":[\"User\"],\"steps\":[\"Parse the JSON string to a dictionary\",\"Create a message object from the dictionary\",\"Return the created message object\"],\"reason\":\"When a user needs to load a message object from a JSON string.\"}],\"relationship\":[\"Create a new message use case is related to Convert the message object to a dictionary use case and Convert the message object to a JSON string use case.\",\"Load a message object from a JSON string use case is independent of other use cases.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/schema.py:Message", "target": "\nsequenceDiagram\n participant User\n participant Message\n\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n"}, {"predicate": "is", "source": "metagpt/schema.py:Message:cause_by", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:cause_by", "target": "{\"name\":\"cause_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cause_by : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:id", "target": "{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:instruct_content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:instruct_content", "target": "{\"name\":\"instruct_content\",\"type_\":\"Optional[BaseModel]\",\"default_\":\"\",\"description\":\"instruct_content : Optional[BaseModel]\",\"compositions\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:role", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:role", "target": "{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:send_to", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:send_to", "target": "{\"name\":\"send_to\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"send_to : set[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:sent_from", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:sent_from", "target": "{\"name\":\"sent_from\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"sent_from : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_cause_by", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_cause_by", "target": "{\"name\":\"check_cause_by\",\"args\":[{\"name\":\"cause_by\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"cause_by: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_cause_by(cause_by: Any): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_id", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_id", "target": "{\"name\":\"check_id\",\"args\":[{\"name\":\"id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_id(id: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_instruct_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_instruct_content", "target": "{\"name\":\"check_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"ic: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"BaseModel\",\"description\":\"BaseModel\",\"compositions\":[\"BaseModel\"]},\"description\":\"check_instruct_content(ic: Any): BaseModel\",\"aggregations\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_send_to", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_send_to", "target": "{\"name\":\"check_send_to\",\"args\":[{\"name\":\"send_to\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"send_to: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"set\",\"description\":\"set\",\"compositions\":[]},\"description\":\"check_send_to(send_to: Any): set\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:check_sent_from", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:check_sent_from", "target": "{\"name\":\"check_sent_from\",\"args\":[{\"name\":\"sent_from\",\"type_\":\"Any\",\"default_\":\"\",\"description\":\"sent_from: Any\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"check_sent_from(sent_from: Any): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:dump", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:dump", "target": "{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:load", "target": "{\"name\":\"load\",\"args\":[{\"name\":\"val\",\"type_\":\"\",\"default_\":\"\",\"description\":\"val\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load(val)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:ser_instruct_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:ser_instruct_content", "target": "{\"name\":\"ser_instruct_content\",\"args\":[{\"name\":\"ic\",\"type_\":\"BaseModel\",\"default_\":\"\",\"description\":\"ic: BaseModel\",\"compositions\":[\"BaseModel\"]}],\"return_args\":{\"type_\":\"Union[dict,None]\",\"description\":\"Union[dict, None]\",\"compositions\":[]},\"description\":\"ser_instruct_content(ic: BaseModel): Union[dict, None]\",\"aggregations\":[\"BaseModel\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:Message:to_dict", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:Message:to_dict", "target": "{\"name\":\"to_dict\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"to_dict(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue", "target": "{\"name\":\"MessageQueue\",\"package\":\"metagpt/schema.py:MessageQueue\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"dump\":{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]},\"empty\":{\"name\":\"empty\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"empty()\",\"aggregations\":[]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'MessageQueue'\",\"description\":\"'MessageQueue'\",\"compositions\":[\"MessageQueue\"]},\"description\":\"load(data): 'MessageQueue'\",\"aggregations\":[\"MessageQueue\"]},\"pop\":{\"name\":\"pop\",\"args\":[],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"pop(): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]},\"pop_all\":{\"name\":\"pop_all\",\"args\":[],\"return_args\":{\"type_\":\"List[Message]\",\"description\":\"List[Message]\",\"compositions\":[\"Message\"]},\"description\":\"pop_all(): List[Message]\",\"aggregations\":[\"Message\"]},\"push\":{\"name\":\"push\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"push(msg: Message)\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"MessageQueue\",\"Message\\\\\",\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:model_config"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:dump"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:empty"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:load"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:pop"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:pop_all"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/schema.py:MessageQueue:push"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:MessageQueue", "target": "?:MessageQueue"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:MessageQueue", "target": "?:Message\\"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:MessageQueue", "target": "?:Message"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:MessageQueue", "target": "metagpt/roles/role.py:RoleContext:msg_buffer"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:MessageQueue", "target": "{\"lineno\":334,\"end_lineno\":403,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MessageQueue\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:MessageQueue", "target": "{\"name\":\"MessageQueue\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:dump", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:dump", "target": "{\"name\":\"dump\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"dump(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:empty", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:empty", "target": "{\"name\":\"empty\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"empty()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:load", "target": "{\"name\":\"load\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"'MessageQueue'\",\"description\":\"'MessageQueue'\",\"compositions\":[\"MessageQueue\"]},\"description\":\"load(data): 'MessageQueue'\",\"aggregations\":[\"MessageQueue\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:pop", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:pop", "target": "{\"name\":\"pop\",\"args\":[],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"pop(): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:pop_all", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:pop_all", "target": "{\"name\":\"pop_all\",\"args\":[],\"return_args\":{\"type_\":\"List[Message]\",\"description\":\"List[Message]\",\"compositions\":[\"Message\"]},\"description\":\"pop_all(): List[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:MessageQueue:push", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:MessageQueue:push", "target": "{\"name\":\"push\",\"args\":[{\"name\":\"msg\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"msg: Message\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"push(msg: Message)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:MessageType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:MessageType", "target": "{\"name\":\"MessageType\",\"package\":\"metagpt/roles/assistant.py:MessageType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/assistant.py:MessageType", "target": "metagpt/roles/assistant.py:MessageType:name"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:MessageType", "target": "{\"lineno\":32,\"end_lineno\":34,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MessageType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/assistant.py:MessageType", "target": "{\"name\":\"MessageType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:MessageType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/assistant.py:MessageType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/metagpt_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/metagpt_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/metagpt_api.py", "target": "metagpt/provider/metagpt_api.py:MetaGPTLLM"}, {"predicate": "is", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "{\"name\":\"MetaGPTLLM\",\"package\":\"metagpt/provider/metagpt_api.py:MetaGPTLLM\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "{\"lineno\":14,\"end_lineno\":15,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MetaGPTLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/metagpt_api.py:MetaGPTLLM", "target": "{\"name\":\"MetaGPTLLM\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "{\"name\":\"MetaGPTText2Image\",\"package\":\"metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image\",\"attributes\":{\"model_url\":{\"name\":\"model_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_url\",\"compositions\":[]}},\"methods\":{\"text_2_image\":{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:model_url"}, {"predicate": "has_class_method", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image"}, {"predicate": "has_class_method", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "{\"lineno\":19,\"end_lineno\":81,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MetaGPTText2Image\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image", "target": "{\"name\":\"MetaGPTText2Image\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:model_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:model_url", "target": "{\"name\":\"model_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_url\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:text_2_image", "target": "{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/strategy/tot_schema.py", "target": "metagpt/strategy/tot_schema.py:MethodSelect"}, {"predicate": "has_class", "source": "metagpt/strategy/tot_schema.py", "target": "metagpt/strategy/tot_schema.py:Strategy"}, {"predicate": "has_class", "source": "metagpt/strategy/tot_schema.py", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "{\"name\":\"MethodSelect\",\"package\":\"metagpt/strategy/tot_schema.py:MethodSelect\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "metagpt/strategy/tot_schema.py:MethodSelect:name"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"MethodSelect\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot_schema.py:MethodSelect", "target": "{\"name\":\"MethodSelect\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:MethodSelect:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:MethodSelect:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/moderation.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/moderation.py", "target": "metagpt/tools/moderation.py:Moderation"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation", "target": "{\"name\":\"Moderation\",\"package\":\"metagpt/tools/moderation.py:Moderation\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"amoderation\":{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]},\"amoderation_with_categories\":{\"name\":\"amoderation_with_categories\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation_with_categories(content: Union[str, list[str]])\",\"aggregations\":[]},\"handle_moderation_results\":{\"name\":\"handle_moderation_results\",\"args\":[{\"name\":\"results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"results\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"handle_moderation_results(results)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:llm"}, {"predicate": "has_class_method", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:amoderation"}, {"predicate": "has_class_method", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:amoderation_with_categories"}, {"predicate": "has_class_method", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:handle_moderation_results"}, {"predicate": "has_class_method", "source": "metagpt/tools/moderation.py:Moderation", "target": "metagpt/tools/moderation.py:Moderation:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:Moderation", "target": "{\"lineno\":13,\"end_lineno\":40,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Moderation\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/moderation.py:Moderation", "target": "{\"name\":\"Moderation\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:amoderation", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation:amoderation", "target": "{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:amoderation_with_categories", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation:amoderation_with_categories", "target": "{\"name\":\"amoderation_with_categories\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation_with_categories(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:handle_moderation_results", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/moderation.py:Moderation:handle_moderation_results", "target": "{\"name\":\"handle_moderation_results\",\"args\":[{\"name\":\"results\",\"type_\":\"\",\"default_\":\"\",\"description\":\"results\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"handle_moderation_results(results)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:NoMoneyException", "target": "{\"name\":\"NoMoneyException\",\"package\":\"metagpt/utils/common.py:NoMoneyException\",\"attributes\":{\"amount\":{\"name\":\"amount\",\"type_\":\"\",\"default_\":\"\",\"description\":\"amount\",\"compositions\":[]},\"message\":{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/common.py:NoMoneyException", "target": "metagpt/utils/common.py:NoMoneyException:amount"}, {"predicate": "has_class_property", "source": "metagpt/utils/common.py:NoMoneyException", "target": "metagpt/utils/common.py:NoMoneyException:message"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:NoMoneyException", "target": "metagpt/utils/common.py:NoMoneyException:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:NoMoneyException", "target": "metagpt/utils/common.py:NoMoneyException:__str__"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:NoMoneyException", "target": "{\"lineno\":307,\"end_lineno\":316,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"NoMoneyException\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/common.py:NoMoneyException", "target": "{\"name\":\"NoMoneyException\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"amount\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/utils/common.py:NoMoneyException", "target": "{\"description\":\"The source code defines a custom exception class called NoMoneyException, which is raised when an operation cannot be completed due to insufficient funds. The exception includes the amount required and a message indicating the insufficient funds.\",\"use_cases\":[],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/utils/common.py:NoMoneyException", "target": "\nsequenceDiagram\n participant User\n participant SourceCode\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException:amount", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:NoMoneyException:amount", "target": "{\"name\":\"amount\",\"type_\":\"\",\"default_\":\"\",\"description\":\"amount\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException:message", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:NoMoneyException:message", "target": "{\"name\":\"message\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"message : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "{\"name\":\"OCRResults\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:OCRResults\",\"attributes\":{\"ocr_result\":{\"name\":\"ocr_result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ocr_result : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "metagpt/roles/invoice_ocr_assistant.py:OCRResults:ocr_result"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "{\"lineno\":27,\"end_lineno\":28,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OCRResults\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults", "target": "{\"name\":\"OCRResults\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"ocr_result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults:ocr_result", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:OCRResults:ocr_result", "target": "{\"name\":\"ocr_result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ocr_result : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/ollama_api.py", "target": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "{\"name\":\"OllamaLLM\",\"package\":\"metagpt/provider/ollama_api.py:OllamaLLM\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"http_method\":{\"name\":\"http_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"http_method : str\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]},\"suffix_url\":{\"name\":\"suffix_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"suffix_url : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: dict): str\",\"aggregations\":[]},\"get_usage\":{\"name\":\"get_usage\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(resp: dict): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:client"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:http_method"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:suffix_url"}, {"predicate": "has_class_property", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:use_system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:get_choice_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:get_usage"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:__init_ollama"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_const_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_update_costs"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_decode_and_load"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion_stream"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "{\"lineno\":27,\"end_lineno\":126,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OllamaLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/ollama_api.py:OllamaLLM", "target": "{\"name\":\"OllamaLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"http_method\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"suffix_url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:client", "target": "{\"name\":\"client\",\"type_\":\"\",\"default_\":\"\",\"description\":\"client\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:http_method", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:http_method", "target": "{\"name\":\"http_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"http_method : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:model", "target": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:suffix_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:suffix_url", "target": "{\"name\":\"suffix_url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"suffix_url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:use_system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:use_system_prompt", "target": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(resp: dict): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:get_usage", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/ollama_api.py:OllamaLLM:get_usage", "target": "{\"name\":\"get_usage\",\"args\":[{\"name\":\"resp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"resp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_usage(resp: dict): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/openai_api.py", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_function", "source": "metagpt/provider/openai_api.py", "target": "metagpt/provider/openai_api.py:log_and_reraise"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "{\"name\":\"OpenAILLM\",\"package\":\"metagpt/provider/openai_api.py:OpenAILLM\",\"attributes\":{\"aclient\":{\"name\":\"aclient\",\"type_\":\"AsyncOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncOpenAI\",\"compositions\":[\"AsyncOpenAI\"]},\"auto_max_tokens\":{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]},\"model\":{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}},\"methods\":{\"aask_code\":{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]]): dict\",\"aggregations\":[\"Message\"]},\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ChatCompletion\",\"description\":\"ChatCompletion\",\"compositions\":[\"ChatCompletion\"]},\"description\":\"acompletion(messages: list[dict], timeout): ChatCompletion\",\"aggregations\":[\"ChatCompletion\"]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"amoderation\":{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]},\"aspeech_to_text\":{\"name\":\"aspeech_to_text\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"aspeech_to_text()\",\"aggregations\":[]},\"atext_to_speech\":{\"name\":\"atext_to_speech\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"atext_to_speech()\",\"aggregations\":[]},\"get_choice_function_arguments\":{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: ChatCompletion): dict\",\"aggregations\":[\"ChatCompletion\"]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: ChatCompletion): str\",\"aggregations\":[\"ChatCompletion\"]},\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[\"AsyncOpenAI\",\"CostManager\"],\"aggregations\":[\"Message\",\"ChatCompletion\",\"Costs\"]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:aclient"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:auto_max_tokens"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:model"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:aask_code"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:amoderation"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:aspeech_to_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:atext_to_speech"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_function_arguments"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:get_costs"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:AsyncOpenAI"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:Message"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:ChatCompletion"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:Costs"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "is_composite_of", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_init_model"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_init_client"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_make_client_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_get_proxy_params"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_stream"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_cons_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_func_configs"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_function"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_process_message"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_calc_usage"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_update_costs"}, {"predicate": "has_class_method", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "metagpt/provider/openai_api.py:OpenAILLM:_get_max_tokens"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "{\"lineno\":52,\"end_lineno\":245,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAILLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "{\"name\":\"OpenAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aclient\",\"visibility\":\"+\",\"value_type\":\"AsyncOpenAI\",\"default_value\":\"\"},{\"name\":\"auto_max_tokens\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"Optional[CostManager]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/provider/openai_api.py:OpenAILLM", "target": "?:CostManager"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:aclient", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:aclient", "target": "{\"name\":\"aclient\",\"type_\":\"AsyncOpenAI\",\"default_\":\"\",\"description\":\"aclient : AsyncOpenAI\",\"compositions\":[\"AsyncOpenAI\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:auto_max_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:auto_max_tokens", "target": "{\"name\":\"auto_max_tokens\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"auto_max_tokens : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"Optional[CostManager]\",\"default_\":\"\",\"description\":\"cost_manager : Optional[CostManager]\",\"compositions\":[\"CostManager\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:model", "target": "{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:aask_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:aask_code", "target": "{\"name\":\"aask_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"Union[str,Message,list[dict]]\",\"default_\":\"\",\"description\":\"messages: Union[str, Message, list[dict]]\",\"compositions\":[\"Message\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"aask_code(messages: Union[str, Message, list[dict]]): dict\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ChatCompletion\",\"description\":\"ChatCompletion\",\"compositions\":[\"ChatCompletion\"]},\"description\":\"acompletion(messages: list[dict], timeout): ChatCompletion\",\"aggregations\":[\"ChatCompletion\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:amoderation", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:amoderation", "target": "{\"name\":\"amoderation\",\"args\":[{\"name\":\"content\",\"type_\":\"Union[str,list[str]]\",\"default_\":\"\",\"description\":\"content: Union[str, list[str]]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"amoderation(content: Union[str, list[str]])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:aspeech_to_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:aspeech_to_text", "target": "{\"name\":\"aspeech_to_text\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"aspeech_to_text()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:atext_to_speech", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:atext_to_speech", "target": "{\"name\":\"atext_to_speech\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"atext_to_speech()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_function_arguments", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_function_arguments", "target": "{\"name\":\"get_choice_function_arguments\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_choice_function_arguments(rsp: ChatCompletion): dict\",\"aggregations\":[\"ChatCompletion\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"ChatCompletion\",\"default_\":\"\",\"description\":\"rsp: ChatCompletion\",\"compositions\":[\"ChatCompletion\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: ChatCompletion): str\",\"aggregations\":[\"ChatCompletion\"]}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/openai_api.py:OpenAILLM:get_costs", "target": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "{\"name\":\"OpenAIResponse\",\"package\":\"metagpt/provider/general_api_base.py:OpenAIResponse\",\"attributes\":{\"data\":{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},\"operation_location\":{\"name\":\"operation_location\",\"type_\":\"\",\"default_\":\"\",\"description\":\"operation_location\",\"compositions\":[]},\"organization\":{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization\",\"compositions\":[]},\"request_id\":{\"name\":\"request_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"request_id\",\"compositions\":[]},\"response_ms\":{\"name\":\"response_ms\",\"type_\":\"\",\"default_\":\"\",\"description\":\"response_ms\",\"compositions\":[]},\"retry_after\":{\"name\":\"retry_after\",\"type_\":\"\",\"default_\":\"\",\"description\":\"retry_after\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:data"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:organization"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after"}, {"predicate": "has_class_method", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "metagpt/provider/general_api_base.py:OpenAIResponse:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "{\"lineno\":123,\"end_lineno\":150,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIResponse\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/general_api_base.py:OpenAIResponse", "target": "{\"name\":\"OpenAIResponse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"operation_location\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"organization\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"request_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"response_ms\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"retry_after\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:data", "target": "{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location", "target": "{\"name\":\"operation_location\",\"type_\":\"\",\"default_\":\"\",\"description\":\"operation_location\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:operation_location", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:organization", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:organization", "target": "{\"name\":\"organization\",\"type_\":\"\",\"default_\":\"\",\"description\":\"organization\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:organization", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id", "target": "{\"name\":\"request_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"request_id\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:request_id", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms", "target": "{\"name\":\"response_ms\",\"type_\":\"\",\"default_\":\"\",\"description\":\"response_ms\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:response_ms", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after", "target": "{\"name\":\"retry_after\",\"type_\":\"\",\"default_\":\"\",\"description\":\"retry_after\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:retry_after", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "{\"name\":\"OpenAIText2Embedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"proxy\":{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}},\"methods\":{\"text_2_embedding\":{\"name\":\"text_2_embedding\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_embedding(text, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:api_key"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:proxy"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:text_2_embedding"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "{\"lineno\":44,\"end_lineno\":71,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIText2Embedding\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding", "target": "{\"name\":\"OpenAIText2Embedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"proxy\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:proxy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:proxy", "target": "{\"name\":\"proxy\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"proxy : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:text_2_embedding", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:text_2_embedding", "target": "{\"name\":\"text_2_embedding\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_embedding(text, model)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/openai_text_to_image.py", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image"}, {"predicate": "has_function", "source": "metagpt/tools/openai_text_to_image.py", "target": "metagpt/tools/openai_text_to_image.py:oas3_openai_text_to_image"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "{\"name\":\"OpenAIText2Image\",\"package\":\"metagpt/tools/openai_text_to_image.py:OpenAIText2Image\",\"attributes\":{\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}},\"methods\":{\"get_image_data\":{\"name\":\"get_image_data\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_image_data(url)\",\"aggregations\":[]},\"text_2_image\":{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:get_image_data"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:text_2_image"}, {"predicate": "has_class_method", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "{\"lineno\":17,\"end_lineno\":53,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenAIText2Image\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image", "target": "{\"name\":\"OpenAIText2Image\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:get_image_data", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:get_image_data", "target": "{\"name\":\"get_image_data\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_image_data(url)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:text_2_image", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:text_2_image", "target": "{\"name\":\"text_2_image\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"size_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"size_type\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"text_2_image(text, size_type)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/open_llm_api.py", "target": "metagpt/provider/open_llm_api.py:OpenLLM"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "{\"name\":\"OpenLLM\",\"package\":\"metagpt/provider/open_llm_api.py:OpenLLM\",\"attributes\":{},\"methods\":{\"get_costs\":{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}},\"compositions\":[],\"aggregations\":[\"Costs\"]}"}, {"predicate": "has_class_method", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:get_costs"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "?:Costs"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/openai_api.py:OpenAILLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:_make_client_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:_calc_usage"}, {"predicate": "has_class_method", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "metagpt/provider/open_llm_api.py:OpenLLM:_update_costs"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "{\"lineno\":16,\"end_lineno\":47,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OpenLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/open_llm_api.py:OpenLLM", "target": "{\"name\":\"OpenLLM\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:get_costs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/open_llm_api.py:OpenLLM:get_costs", "target": "{\"name\":\"get_costs\",\"args\":[],\"return_args\":{\"type_\":\"Costs\",\"description\":\"Costs\",\"compositions\":[\"Costs\"]},\"description\":\"get_costs(): Costs\",\"aggregations\":[\"Costs\"]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser", "target": "{\"name\":\"OutputParser\",\"package\":\"metagpt/utils/common.py:OutputParser\",\"attributes\":{},\"methods\":{\"extract_content\":{\"name\":\"extract_content\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_content(text, tag)\",\"aggregations\":[]},\"extract_struct\":{\"name\":\"extract_struct\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"data_type\",\"type_\":\"Union[type(list),type(dict)]\",\"default_\":\"\",\"description\":\"data_type: Union[type(list), type(dict)]\",\"compositions\":[\"type\"]}],\"return_args\":{\"type_\":\"Union[list,dict]\",\"description\":\"Union[list, dict]\",\"compositions\":[]},\"description\":\"extract_struct(text: str, data_type: Union[type(list), type(dict)]): Union[list, dict]\",\"aggregations\":[\"type\"]},\"parse_blocks\":{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]},\"parse_code\":{\"name\":\"parse_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(text: str, lang: str): str\",\"aggregations\":[]},\"parse_data\":{\"name\":\"parse_data\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data(data)\",\"aggregations\":[]},\"parse_data_with_mapping\":{\"name\":\"parse_data_with_mapping\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mapping\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data_with_mapping(data, mapping)\",\"aggregations\":[]},\"parse_file_list\":{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(text: str): list[str]\",\"aggregations\":[]},\"parse_python_code\":{\"name\":\"parse_python_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_python_code(text: str): str\",\"aggregations\":[]},\"parse_str\":{\"name\":\"parse_str\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(text: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"type\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:extract_content"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:extract_struct"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_blocks"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_code"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_data"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_data_with_mapping"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_file_list"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_python_code"}, {"predicate": "has_class_method", "source": "metagpt/utils/common.py:OutputParser", "target": "metagpt/utils/common.py:OutputParser:parse_str"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/common.py:OutputParser", "target": "?:type"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:OutputParser", "target": "{\"lineno\":57,\"end_lineno\":231,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"OutputParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/common.py:OutputParser", "target": "{\"name\":\"OutputParser\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:extract_content", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:extract_content", "target": "{\"name\":\"extract_content\",\"args\":[{\"name\":\"text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"text\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tag\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"extract_content(text, tag)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:extract_struct", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:extract_struct", "target": "{\"name\":\"extract_struct\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"data_type\",\"type_\":\"Union[type(list),type(dict)]\",\"default_\":\"\",\"description\":\"data_type: Union[type(list), type(dict)]\",\"compositions\":[\"type\"]}],\"return_args\":{\"type_\":\"Union[list,dict]\",\"description\":\"Union[list, dict]\",\"compositions\":[]},\"description\":\"extract_struct(text: str, data_type: Union[type(list), type(dict)]): Union[list, dict]\",\"aggregations\":[\"type\"]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_blocks", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_blocks", "target": "{\"name\":\"parse_blocks\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_blocks(text: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_code", "target": "{\"name\":\"parse_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"lang: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_code(text: str, lang: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_data", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_data", "target": "{\"name\":\"parse_data\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data(data)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_data_with_mapping", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_data_with_mapping", "target": "{\"name\":\"parse_data_with_mapping\",\"args\":[{\"name\":\"data\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data\",\"compositions\":[]},{\"name\":\"mapping\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mapping\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_data_with_mapping(data, mapping)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_file_list", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_file_list", "target": "{\"name\":\"parse_file_list\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"parse_file_list(text: str): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_python_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_python_code", "target": "{\"name\":\"parse_python_code\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"parse_python_code(text: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/common.py:OutputParser:parse_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/common.py:OutputParser:parse_str", "target": "{\"name\":\"parse_str\",\"args\":[{\"name\":\"text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"text: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"parse_str(text: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "{\"name\":\"Parameter\",\"package\":\"metagpt/learn/skill_loader.py:Parameter\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]},\"type\":{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "metagpt/learn/skill_loader.py:Parameter:description"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "metagpt/learn/skill_loader.py:Parameter:type"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "{\"lineno\":29,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Parameter\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Parameter", "target": "{\"name\":\"Parameter\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Parameter:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Parameter:description", "target": "{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Parameter:type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Parameter:type", "target": "{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper"}, {"predicate": "has_function", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "metagpt/tools/web_browser_engine_playwright.py:_get_install_lock"}, {"predicate": "has_function", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "metagpt/tools/web_browser_engine_playwright.py:_install_browsers"}, {"predicate": "has_function", "source": "metagpt/tools/web_browser_engine_playwright.py", "target": "metagpt/tools/web_browser_engine_playwright.py:_log_stream"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "{\"name\":\"PlaywrightWrapper\",\"package\":\"metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit']\\\\|None\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit'] \\\\| None\",\"compositions\":[\"Literal\\\\\"]},\"launch_kwargs\":{\"name\":\"launch_kwargs\",\"type_\":\"dict\\\\|None\",\"default_\":\"\",\"description\":\"launch_kwargs : dict \\\\| None\",\"compositions\":[\"dict\\\\\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}},\"compositions\":[\"Literal\\\\\",\"dict\\\\\"],\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:browser_type"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:launch_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:run"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "?:Literal\\"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "?:dict\\"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "?:WebPage\\"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "?:WebPage"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_scrape"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_run_precheck"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "{\"lineno\":18,\"end_lineno\":95,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PlaywrightWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper", "target": "{\"name\":\"PlaywrightWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chromium','firefox','webkit']\\\\|None\",\"default_value\":\"\"},{\"name\":\"launch_kwargs\",\"visibility\":\"+\",\"value_type\":\"dict\\\\|None\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:browser_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:browser_type", "target": "{\"name\":\"browser_type\",\"type_\":\"Literal['chromium','firefox','webkit']\\\\|None\",\"default_\":\"\",\"description\":\"browser_type : Literal['chromium', 'firefox', 'webkit'] \\\\| None\",\"compositions\":[\"Literal\\\\\"]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:launch_kwargs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:launch_kwargs", "target": "{\"name\":\"launch_kwargs\",\"type_\":\"dict\\\\|None\",\"default_\":\"\",\"description\":\"launch_kwargs : dict \\\\| None\",\"compositions\":[\"dict\\\\\"]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/prepare_documents.py", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "{\"name\":\"PrepareDocuments\",\"package\":\"metagpt/actions/prepare_documents.py:PrepareDocuments\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:config"}, {"predicate": "has_class_property", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "metagpt/actions/prepare_documents.py:PrepareDocuments:_init_repo"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "{\"lineno\":21,\"end_lineno\":52,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PrepareDocuments\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments", "target": "{\"name\":\"PrepareDocuments\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:config", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/prepare_interview.py", "target": "metagpt/actions/prepare_interview.py:PrepareInterview"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "{\"name\":\"PrepareInterview\",\"package\":\"metagpt/actions/prepare_interview.py:PrepareInterview\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "metagpt/actions/prepare_interview.py:PrepareInterview:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "metagpt/actions/prepare_interview.py:PrepareInterview:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "{\"lineno\":21,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PrepareInterview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/prepare_interview.py:PrepareInterview", "target": "{\"name\":\"PrepareInterview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py:PrepareInterview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_interview.py:PrepareInterview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py:PrepareInterview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/prepare_interview.py:PrepareInterview:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/product_manager.py", "target": "metagpt/roles/product_manager.py:ProductManager"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "{\"name\":\"ProductManager\",\"package\":\"metagpt/roles/product_manager.py:ProductManager\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"todo_action\":{\"name\":\"todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"todo_action : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:todo_action"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "metagpt/roles/product_manager.py:ProductManager:_observe"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "{\"lineno\":16,\"end_lineno\":51,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProductManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "{\"name\":\"ProductManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"todo_action\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "{\"description\":\"The source code represents a Product Manager role responsible for product development and management. It includes attributes such as name, profile, goal, and constraints. The role has methods to decide what to do and observe the environment.\",\"use_cases\":[{\"description\":\"Decide what to do\",\"inputs\":[],\"outputs\":[],\"actors\":[\"Product Manager\"],\"steps\":[\"Check if the git repository exists and the configuration for git reinitialization is not set\",\"Set the state to 1 if the conditions are met\",\"If the conditions are not met, set the state to 0, set the git reinitialization configuration to false, and update the todo action to WritePRD\",\"Return a boolean indicating if there are any pending actions\"],\"reason\":\"When the system needs to decide the next action to take based on the current state and environment\"},{\"description\":\"Observe the environment\",\"inputs\":[],\"outputs\":[],\"actors\":[\"Product Manager\"],\"steps\":[\"Call the observe method of the superclass with ignore_memory set to True\"],\"reason\":\"When the system needs to observe the environment and update its internal state\"}],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/roles/product_manager.py:ProductManager", "target": "\nsequenceDiagram\n participant ProductManager\n\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:todo_action", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/product_manager.py:ProductManager:todo_action", "target": "{\"name\":\"todo_action\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"todo_action : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/project_manager.py", "target": "metagpt/roles/project_manager.py:ProjectManager"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "{\"name\":\"ProjectManager\",\"package\":\"metagpt/roles/project_manager.py:ProjectManager\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:profile"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "metagpt/roles/project_manager.py:ProjectManager:__init__"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProjectManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "{\"name\":\"ProjectManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "{\"description\":\"The source code defines a Project Manager role with attributes such as name, profile, goal, and constraints. It also sets actions and watches for the Project Manager role.\",\"use_cases\":[{\"description\":\"Write Tasks\",\"inputs\":[\"task_list\",\"task_dependencies\"],\"outputs\":[\"task_breakdown\"],\"actors\":[\"Project Manager\"],\"steps\":[\"Receive task list and task dependencies\",\"Analyze task dependencies\",\"Generate task breakdown\"],\"reason\":\"When the Project Manager needs to break down tasks according to PRD/technical design and analyze task dependencies.\"},{\"description\":\"Write Design\",\"inputs\":[\"user_requirement\",\"technical_design\"],\"outputs\":[\"task_list\"],\"actors\":[\"Project Manager\"],\"steps\":[\"Receive user requirement and technical design\",\"Generate a task list\"],\"reason\":\"When the Project Manager needs to generate a task list based on user requirement and technical design.\"}],\"relationship\":[\"Write Tasks is required by Project Manager to break down tasks according to PRD/technical design and analyze task dependencies.\",\"Write Design is required by Project Manager to generate a task list based on user requirement and technical design.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/roles/project_manager.py:ProjectManager", "target": "\nsequenceDiagram\n participant ProjectManager\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n WriteDesign-->>ProjectManager: task_list\n"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/project_manager.py:ProjectManager:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "{\"name\":\"ProjectRepo\",\"package\":\"metagpt/utils/project_repo.py:ProjectRepo\",\"attributes\":{\"docs\":{\"name\":\"docs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"docs\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]},\"requirement\":{\"name\":\"requirement\",\"type_\":\"\",\"default_\":\"\",\"description\":\"requirement\",\"compositions\":[]},\"resources\":{\"name\":\"resources\",\"type_\":\"\",\"default_\":\"\",\"description\":\"resources\",\"compositions\":[]},\"src_relative_path\":{\"name\":\"src_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_relative_path\",\"compositions\":[]},\"srcs\":{\"name\":\"srcs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"srcs\",\"compositions\":[]},\"test_outputs\":{\"name\":\"test_outputs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"test_outputs\",\"compositions\":[]},\"tests\":{\"name\":\"tests\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tests\",\"compositions\":[]},\"workdir\":{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}},\"methods\":{\"code_files_exists\":{\"name\":\"code_files_exists\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"code_files_exists(): bool\",\"aggregations\":[]},\"with_src_path\":{\"name\":\"with_src_path\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"ProjectRepo\",\"description\":\"ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},\"description\":\"with_src_path(path: str \\\\| Path): ProjectRepo\",\"aggregations\":[\"str\\\\\",\"ProjectRepo\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"ProjectRepo\",\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:docs"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:git_repo"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:requirement"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:resources"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:srcs"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:tests"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:workdir"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:code_files_exists"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:with_src_path"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "?:ProjectRepo"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/file_repository.py:FileRepository"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/context.py:Context"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/context.py:Context:repo"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "metagpt/utils/project_repo.py:ProjectRepo:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "{\"lineno\":90,\"end_lineno\":142,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ProjectRepo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "{\"name\":\"ProjectRepo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"requirement\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"resources\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"src_relative_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"srcs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"test_outputs\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"tests\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"workdir\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "{\"description\":\"The source code defines a class 'ProjectRepo' which is a file repository for a project. It contains methods to interact with the project's files and resources.\",\"use_cases\":[{\"description\":\"Retrieve project requirements\",\"inputs\":[],\"outputs\":[\"requirement\"],\"actors\":[\"ProjectRepo\"],\"steps\":[\"The 'ProjectRepo' class retrieves the project requirements from the 'docs' attribute using the 'requirement' property.\"],\"reason\":\"When the system needs to access the project requirements.\"},{\"description\":\"Check if code files exist\",\"inputs\":[],\"outputs\":[\"code_files_exist\"],\"actors\":[\"ProjectRepo\"],\"steps\":[\"The 'ProjectRepo' class checks if the code files exist by accessing the 'srcs' attribute and its 'all_files' property.\"],\"reason\":\"When the system needs to verify the existence of code files.\"},{\"description\":\"Set source path for the project\",\"inputs\":[\"path\"],\"outputs\":[\"ProjectRepo\"],\"actors\":[\"ProjectRepo\"],\"steps\":[\"The 'ProjectRepo' class sets the source path for the project by using the 'with_src_path' method with the specified 'path'.\"],\"reason\":\"When the system needs to update the source path for the project.\"}],\"relationship\":[\"The 'Retrieve project requirements' use case is related to the 'Check if code files exist' use case as both involve accessing project files and resources.\",\"The 'Set source path for the project' use case is related to the 'Check if code files exist' use case as setting the source path may impact the existence of code files.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/utils/project_repo.py:ProjectRepo", "target": "\nsequenceDiagram\n participant ProjectRepo\n participant str\n participant Path\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:docs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:docs", "target": "{\"name\":\"docs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"docs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:git_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:git_repo", "target": "{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:git_repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:requirement", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:requirement", "target": "{\"name\":\"requirement\",\"type_\":\"\",\"default_\":\"\",\"description\":\"requirement\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:requirement", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:resources", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:resources", "target": "{\"name\":\"resources\",\"type_\":\"\",\"default_\":\"\",\"description\":\"resources\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path", "target": "{\"name\":\"src_relative_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_relative_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:src_relative_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:srcs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:srcs", "target": "{\"name\":\"srcs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"srcs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:srcs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:test_outputs", "target": "{\"name\":\"test_outputs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"test_outputs\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:tests", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:tests", "target": "{\"name\":\"tests\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tests\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:workdir", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:workdir", "target": "{\"name\":\"workdir\",\"type_\":\"\",\"default_\":\"\",\"description\":\"workdir\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:workdir", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:code_files_exists", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:code_files_exists", "target": "{\"name\":\"code_files_exists\",\"args\":[],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"code_files_exists(): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:with_src_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ProjectRepo:with_src_path", "target": "{\"name\":\"with_src_path\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"ProjectRepo\",\"description\":\"ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},\"description\":\"with_src_path(path: str \\\\| Path): ProjectRepo\",\"aggregations\":[\"str\\\\\",\"ProjectRepo\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/prompt.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/prompt.py", "target": "metagpt/roles/prompt.py:PromptString"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:PromptString", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/prompt.py:PromptString", "target": "{\"name\":\"PromptString\",\"package\":\"metagpt/roles/prompt.py:PromptString\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/prompt.py:PromptString", "target": "metagpt/roles/prompt.py:PromptString:name"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:PromptString", "target": "{\"lineno\":27,\"end_lineno\":46,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"PromptString\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/prompt.py:PromptString", "target": "{\"name\":\"PromptString\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:PromptString:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/prompt.py:PromptString:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/qa_engineer.py", "target": "metagpt/roles/qa_engineer.py:QaEngineer"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "{\"name\":\"QaEngineer\",\"package\":\"metagpt/roles/qa_engineer.py:QaEngineer\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"test_round\":{\"name\":\"test_round\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round : int\",\"compositions\":[]},\"test_round_allowed\":{\"name\":\"test_round_allowed\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round_allowed : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:test_round"}, {"predicate": "has_class_property", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:test_round_allowed"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_write_test"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_run_code"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_debug_error"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_act"}, {"predicate": "has_class_method", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "metagpt/roles/qa_engineer.py:QaEngineer:_observe"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "{\"lineno\":27,\"end_lineno\":181,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QaEngineer\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/qa_engineer.py:QaEngineer", "target": "{\"name\":\"QaEngineer\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"test_round\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"test_round_allowed\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:test_round", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:test_round", "target": "{\"name\":\"test_round\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:test_round_allowed", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/qa_engineer.py:QaEngineer:test_round_allowed", "target": "{\"name\":\"test_round_allowed\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"test_round_allowed : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/document_store/qdrant_store.py", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection"}, {"predicate": "has_class", "source": "metagpt/document_store/qdrant_store.py", "target": "metagpt/document_store/qdrant_store.py:QdrantStore"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "{\"name\":\"QdrantConnection\",\"package\":\"metagpt/document_store/qdrant_store.py:QdrantConnection\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"host : Optional[str]\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"memory : bool\",\"compositions\":[]},\"port\":{\"name\":\"port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"port : Optional[int]\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"url : Optional[str]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:api_key"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:host"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:memory"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:port"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "metagpt/document_store/qdrant_store.py:QdrantConnection:url"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "{\"lineno\":11,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QdrantConnection\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection", "target": "{\"name\":\"QdrantConnection\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"port\",\"visibility\":\"+\",\"value_type\":\"Optional[int]\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"api_key : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:host", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:host", "target": "{\"name\":\"host\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"host : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:memory", "target": "{\"name\":\"memory\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"memory : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:port", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:port", "target": "{\"name\":\"port\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"port : Optional[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantConnection:url", "target": "{\"name\":\"url\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"url : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "{\"name\":\"QdrantStore\",\"package\":\"metagpt/document_store/qdrant_store.py:QdrantStore\",\"attributes\":{\"client\":{\"name\":\"client\",\"type_\":\"QdrantClient\",\"default_\":\"\",\"description\":\"client : QdrantClient\",\"compositions\":[\"QdrantClient\"]}},\"methods\":{\"add\":{\"name\":\"add\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"points\",\"type_\":\"List[PointStruct]\",\"default_\":\"\",\"description\":\"points: List[PointStruct]\",\"compositions\":[\"PointStruct\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(collection_name: str, points: List[PointStruct])\",\"aggregations\":[\"PointStruct\"]},\"create_collection\":{\"name\":\"create_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"vectors_config\",\"type_\":\"VectorParams\",\"default_\":\"\",\"description\":\"vectors_config: VectorParams\",\"compositions\":[\"VectorParams\"]},{\"name\":\"force_recreate\",\"type_\":\"\",\"default_\":\"\",\"description\":\"force_recreate\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_collection(collection_name: str, vectors_config: VectorParams, force_recreate)\",\"aggregations\":[\"VectorParams\"]},\"delete_collection\":{\"name\":\"delete_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_collection(collection_name: str, timeout)\",\"aggregations\":[]},\"has_collection\":{\"name\":\"has_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"has_collection(collection_name: str)\",\"aggregations\":[]},\"search\":{\"name\":\"search\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"query\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"query: List[float]\",\"compositions\":[]},{\"name\":\"query_filter\",\"type_\":\"Filter\",\"default_\":\"\",\"description\":\"query_filter: Filter\",\"compositions\":[\"Filter\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"return_vector\",\"type_\":\"\",\"default_\":\"\",\"description\":\"return_vector\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(collection_name: str, query: List[float], query_filter: Filter, k, return_vector)\",\"aggregations\":[\"Filter\"]},\"write\":{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}},\"compositions\":[\"QdrantClient\"],\"aggregations\":[\"PointStruct\",\"VectorParams\",\"Filter\"]}"}, {"predicate": "has_class_property", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:client"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:add"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:create_collection"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:delete_collection"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:has_collection"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:search"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:write"}, {"predicate": "isCompositeOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "?:QdrantClient"}, {"predicate": "isAggregateOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "?:PointStruct"}, {"predicate": "isAggregateOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "?:VectorParams"}, {"predicate": "isAggregateOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "?:Filter"}, {"predicate": "isGeneralizeOf", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_class_method", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "metagpt/document_store/qdrant_store.py:QdrantStore:__init__"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "{\"lineno\":28,\"end_lineno\":124,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"QdrantStore\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document_store/qdrant_store.py:QdrantStore", "target": "{\"name\":\"QdrantStore\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"client\",\"visibility\":\"+\",\"value_type\":\"QdrantClient\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:client", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:client", "target": "{\"name\":\"client\",\"type_\":\"QdrantClient\",\"default_\":\"\",\"description\":\"client : QdrantClient\",\"compositions\":[\"QdrantClient\"]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:add", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:add", "target": "{\"name\":\"add\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"points\",\"type_\":\"List[PointStruct]\",\"default_\":\"\",\"description\":\"points: List[PointStruct]\",\"compositions\":[\"PointStruct\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add(collection_name: str, points: List[PointStruct])\",\"aggregations\":[\"PointStruct\"]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:create_collection", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:create_collection", "target": "{\"name\":\"create_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"vectors_config\",\"type_\":\"VectorParams\",\"default_\":\"\",\"description\":\"vectors_config: VectorParams\",\"compositions\":[\"VectorParams\"]},{\"name\":\"force_recreate\",\"type_\":\"\",\"default_\":\"\",\"description\":\"force_recreate\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_collection(collection_name: str, vectors_config: VectorParams, force_recreate)\",\"aggregations\":[\"VectorParams\"]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:delete_collection", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:delete_collection", "target": "{\"name\":\"delete_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"delete_collection(collection_name: str, timeout)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:has_collection", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:has_collection", "target": "{\"name\":\"has_collection\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"has_collection(collection_name: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:search", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:search", "target": "{\"name\":\"search\",\"args\":[{\"name\":\"collection_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"collection_name: str\",\"compositions\":[]},{\"name\":\"query\",\"type_\":\"List[float]\",\"default_\":\"\",\"description\":\"query: List[float]\",\"compositions\":[]},{\"name\":\"query_filter\",\"type_\":\"Filter\",\"default_\":\"\",\"description\":\"query_filter: Filter\",\"compositions\":[\"Filter\"]},{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]},{\"name\":\"return_vector\",\"type_\":\"\",\"default_\":\"\",\"description\":\"return_vector\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"search(collection_name: str, query: List[float], query_filter: Filter, k, return_vector)\",\"aggregations\":[\"Filter\"]}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:write", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:write", "target": "{\"name\":\"write\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/rebuild_class_view.py", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "{\"name\":\"RebuildClassView\",\"package\":\"metagpt/actions/rebuild_class_view.py:RebuildClassView\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}},\"compositions\":[\"GraphRepository\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:graph_db"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/utils/graph_repository.py:GraphRepository"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class_views"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_relationship"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_diff_path"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_align_root"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "{\"lineno\":32,\"end_lineno\":156,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RebuildClassView\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "{\"name\":\"RebuildClassView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"Optional[GraphRepository]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView", "target": "?:GraphRepository"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:graph_db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:graph_db", "target": "{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView"}, {"predicate": "has_class", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase"}, {"predicate": "has_class", "source": "metagpt/actions/rebuild_sequence_view.py", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "{\"name\":\"RebuildSequenceView\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}},\"methods\":{\"parse_participant\":{\"name\":\"parse_participant\",\"args\":[{\"name\":\"mermaid_sequence_diagram\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_sequence_diagram: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_participant(mermaid_sequence_diagram: str): List[str]\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}},\"compositions\":[\"GraphRepository\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:graph_db"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:parse_participant"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/utils/graph_repository.py:GraphRepository"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_main_sequence_view"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_sequence_view"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_main_entry"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_use_case"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_sequence_view"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_participants"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_use_cases"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_detail"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_uml_class_view"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_source_code"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_full_filename"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_new_participant"}, {"predicate": "has_class_method", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_participant"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "{\"lineno\":53,\"end_lineno\":397,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RebuildSequenceView\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "{\"name\":\"RebuildSequenceView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"Optional[GraphRepository]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView", "target": "?:GraphRepository"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:graph_db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:graph_db", "target": "{\"name\":\"graph_db\",\"type_\":\"Optional[GraphRepository]\",\"default_\":\"\",\"description\":\"graph_db : Optional[GraphRepository]\",\"compositions\":[\"GraphRepository\"]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:parse_participant", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:parse_participant", "target": "{\"name\":\"parse_participant\",\"args\":[{\"name\":\"mermaid_sequence_diagram\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mermaid_sequence_diagram: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_participant(mermaid_sequence_diagram: str): List[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"\",\"default_\":\"\",\"description\":\"format\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages, format)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/redis.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/redis.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/redis.py", "target": "metagpt/utils/redis.py:Redis"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis", "target": "{\"name\":\"Redis\",\"package\":\"metagpt/utils/redis.py:Redis\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"config : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}},\"methods\":{\"close\":{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"close()\",\"aggregations\":[]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\\\\|None\",\"description\":\"bytes \\\\| None\",\"compositions\":[\"bytes\\\\\"]},\"description\":\"get(key: str): bytes \\\\| None\",\"aggregations\":[\"bytes\\\\\"]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]},{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key: str, data: str, timeout_sec: int)\",\"aggregations\":[]}},\"compositions\":[\"RedisConfig\"],\"aggregations\":[\"bytes\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:config"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:close"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:get"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:set"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/redis.py:Redis", "target": "?:bytes\\"}, {"predicate": "is_composite_of", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/configs/redis_config.py:RedisConfig"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:__init__"}, {"predicate": "has_class_method", "source": "metagpt/utils/redis.py:Redis", "target": "metagpt/utils/redis.py:Redis:_connect"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:Redis", "target": "{\"lineno\":19,\"end_lineno\":63,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Redis\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/redis.py:Redis", "target": "{\"name\":\"Redis\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"Optional[RedisConfig]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/redis.py:Redis", "target": "?:RedisConfig"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis:config", "target": "{\"name\":\"config\",\"type_\":\"Optional[RedisConfig]\",\"default_\":\"\",\"description\":\"config : Optional[RedisConfig]\",\"compositions\":[\"RedisConfig\"]}"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:close", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis:close", "target": "{\"name\":\"close\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"close()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\\\\|None\",\"description\":\"bytes \\\\| None\",\"compositions\":[\"bytes\\\\\"]},\"description\":\"get(key: str): bytes \\\\| None\",\"aggregations\":[\"bytes\\\\\"]}"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:set", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/redis.py:Redis:set", "target": "{\"name\":\"set\",\"args\":[{\"name\":\"key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"key: str\",\"compositions\":[]},{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"timeout_sec\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout_sec: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(key: str, data: str, timeout_sec: int)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/redis_config.py", "target": "metagpt/configs/redis_config.py:RedisConfig"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "{\"name\":\"RedisConfig\",\"package\":\"metagpt/configs/redis_config.py:RedisConfig\",\"attributes\":{\"db\":{\"name\":\"db\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"db : str\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"host : str\",\"compositions\":[]},\"password\":{\"name\":\"password\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"password : str\",\"compositions\":[]},\"port\":{\"name\":\"port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"port : int\",\"compositions\":[]},\"username\":{\"name\":\"username\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"username : str\",\"compositions\":[]}},\"methods\":{\"to_kwargs\":{\"name\":\"to_kwargs\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_kwargs()\",\"aggregations\":[]},\"to_url\":{\"name\":\"to_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:db"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:host"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:password"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:port"}, {"predicate": "has_class_property", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:username"}, {"predicate": "has_class_method", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:to_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/configs/redis_config.py:RedisConfig:to_url"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault"}, {"predicate": "has_page_info", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "{\"lineno\":11,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RedisConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/redis_config.py:RedisConfig", "target": "{\"name\":\"RedisConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"db\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"password\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"port\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"username\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:db", "target": "{\"name\":\"db\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"db : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:host", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:host", "target": "{\"name\":\"host\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"host : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:password", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:password", "target": "{\"name\":\"password\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"password : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:port", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:port", "target": "{\"name\":\"port\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"port : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:username", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:username", "target": "{\"name\":\"username\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"username : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:to_kwargs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:to_kwargs", "target": "{\"name\":\"to_kwargs\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_kwargs()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/redis_config.py:RedisConfig:to_url", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/redis_config.py:RedisConfig:to_url", "target": "{\"name\":\"to_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_url()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:RepairType"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_case_sensitivity"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_special_character_missing"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_required_key_pair_missing"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_json_format"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:_repair_llm_raw_output"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_llm_raw_output"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:repair_invalid_json"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:run_after_exp_and_passon_next_retry"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:retry_parse_json_text"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:extract_content_from_output"}, {"predicate": "has_function", "source": "metagpt/utils/repair_llm_raw_output.py", "target": "metagpt/utils/repair_llm_raw_output.py:extract_state_value_from_output"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "{\"name\":\"RepairType\",\"package\":\"metagpt/utils/repair_llm_raw_output.py:RepairType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "metagpt/utils/repair_llm_raw_output.py:RepairType:name"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "{\"lineno\":17,\"end_lineno\":21,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepairType\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType", "target": "{\"name\":\"RepairType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/repair_llm_raw_output.py:RepairType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "{\"name\":\"ReplyData\",\"package\":\"metagpt/roles/invoice_ocr_assistant.py:ReplyData\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "metagpt/roles/invoice_ocr_assistant.py:ReplyData:content"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "{\"lineno\":35,\"end_lineno\":36,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReplyData\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData", "target": "{\"name\":\"ReplyData\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/invoice_ocr_assistant.py:ReplyData:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "{\"name\":\"ReplyQuestion\",\"package\":\"metagpt/actions/invoice_ocr.py:ReplyQuestion\",\"attributes\":{\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"ocr_result\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_result: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, ocr_result: list): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "metagpt/actions/invoice_ocr.py:ReplyQuestion:language"}, {"predicate": "has_class_method", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "metagpt/actions/invoice_ocr.py:ReplyQuestion:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "{\"lineno\":166,\"end_lineno\":189,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReplyQuestion\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion", "target": "{\"name\":\"ReplyQuestion\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/invoice_ocr.py:ReplyQuestion:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"ocr_result\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"ocr_result: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, ocr_result: list): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo", "target": "{\"name\":\"Repo\",\"package\":\"metagpt/document.py:Repo\",\"attributes\":{\"assets\":{\"name\":\"assets\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"assets : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"codes\":{\"name\":\"codes\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"codes : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"docs\":{\"name\":\"docs\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"docs : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}},\"methods\":{\"eda\":{\"name\":\"eda\",\"args\":[],\"return_args\":{\"type_\":\"RepoMetadata\",\"description\":\"RepoMetadata\",\"compositions\":[\"RepoMetadata\"]},\"description\":\"eda(): RepoMetadata\",\"aggregations\":[\"RepoMetadata\"]},\"from_path\":{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]},\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[Document]\",\"description\":\"Optional[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get(filename: str): Optional[Document]\",\"aggregations\":[\"Document\"]},\"get_text_documents\":{\"name\":\"get_text_documents\",\"args\":[],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_text_documents(): list[Document]\",\"aggregations\":[\"Document\"]},\"set\":{\"name\":\"set\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(filename: str, content: str)\",\"aggregations\":[]},\"to_path\":{\"name\":\"to_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path()\",\"aggregations\":[]}},\"compositions\":[\"Document\",\"Path\"],\"aggregations\":[\"RepoMetadata\"]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:assets"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:codes"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:docs"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:name"}, {"predicate": "has_class_property", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:eda"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:from_path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:get"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:get_text_documents"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:set"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:to_path"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:Repo", "target": "?:Document"}, {"predicate": "isCompositeOf", "source": "metagpt/document.py:Repo", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/document.py:Repo", "target": "?:RepoMetadata"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:_path"}, {"predicate": "has_class_method", "source": "metagpt/document.py:Repo", "target": "metagpt/document.py:Repo:_set"}, {"predicate": "has_page_info", "source": "metagpt/document.py:Repo", "target": "{\"lineno\":171,\"end_lineno\":235,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Repo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:Repo", "target": "{\"name\":\"Repo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"assets\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"codes\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"docs\",\"visibility\":\"+\",\"value_type\":\"dict[Path,Document]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:assets", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:assets", "target": "{\"name\":\"assets\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"assets : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:codes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:codes", "target": "{\"name\":\"codes\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"codes : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:docs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:docs", "target": "{\"name\":\"docs\",\"type_\":\"dict[Path,Document]\",\"default_\":\"\",\"description\":\"docs : dict[Path, Document]\",\"compositions\":[\"Document\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:path", "target": "{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:eda", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:eda", "target": "{\"name\":\"eda\",\"args\":[],\"return_args\":{\"type_\":\"RepoMetadata\",\"description\":\"RepoMetadata\",\"compositions\":[\"RepoMetadata\"]},\"description\":\"eda(): RepoMetadata\",\"aggregations\":[\"RepoMetadata\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:from_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:from_path", "target": "{\"name\":\"from_path\",\"args\":[{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"from_path(path: Path)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Optional[Document]\",\"description\":\"Optional[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get(filename: str): Optional[Document]\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:get_text_documents", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:get_text_documents", "target": "{\"name\":\"get_text_documents\",\"args\":[],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_text_documents(): list[Document]\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:set", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:set", "target": "{\"name\":\"set\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set(filename: str, content: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:Repo:to_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/document.py:Repo:to_path", "target": "{\"name\":\"to_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"to_path()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "{\"name\":\"RepoFileInfo\",\"package\":\"metagpt/repo_parser.py:RepoFileInfo\",\"attributes\":{\"classes\":{\"name\":\"classes\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"classes : List\",\"compositions\":[]},\"file\":{\"name\":\"file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file : str\",\"compositions\":[]},\"functions\":{\"name\":\"functions\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"functions : List\",\"compositions\":[]},\"globals\":{\"name\":\"globals\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"globals : List\",\"compositions\":[]},\"page_info\":{\"name\":\"page_info\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"page_info : List\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:classes"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:file"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:functions"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:globals"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "metagpt/repo_parser.py:RepoFileInfo:page_info"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoFileInfo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:RepoFileInfo", "target": "{\"name\":\"RepoFileInfo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"classes\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"functions\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"globals\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"},{\"name\":\"page_info\",\"visibility\":\"+\",\"value_type\":\"List\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:classes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:classes", "target": "{\"name\":\"classes\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"classes : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:file", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:file", "target": "{\"name\":\"file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:functions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:functions", "target": "{\"name\":\"functions\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"functions : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:globals", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:globals", "target": "{\"name\":\"globals\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"globals : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoFileInfo:page_info", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoFileInfo:page_info", "target": "{\"name\":\"page_info\",\"type_\":\"List\",\"default_\":\"\",\"description\":\"page_info : List\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata", "target": "{\"name\":\"RepoMetadata\",\"package\":\"metagpt/document.py:RepoMetadata\",\"attributes\":{\"n_chars\":{\"name\":\"n_chars\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_chars : int\",\"compositions\":[]},\"n_docs\":{\"name\":\"n_docs\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_docs : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"symbols\":{\"name\":\"symbols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"symbols : list\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/document.py:RepoMetadata", "target": "metagpt/document.py:RepoMetadata:n_chars"}, {"predicate": "has_class_property", "source": "metagpt/document.py:RepoMetadata", "target": "metagpt/document.py:RepoMetadata:n_docs"}, {"predicate": "has_class_property", "source": "metagpt/document.py:RepoMetadata", "target": "metagpt/document.py:RepoMetadata:name"}, {"predicate": "has_class_property", "source": "metagpt/document.py:RepoMetadata", "target": "metagpt/document.py:RepoMetadata:symbols"}, {"predicate": "has_page_info", "source": "metagpt/document.py:RepoMetadata", "target": "{\"lineno\":164,\"end_lineno\":168,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoMetadata\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/document.py:RepoMetadata", "target": "{\"name\":\"RepoMetadata\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"n_chars\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_docs\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"symbols\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata:n_chars", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata:n_chars", "target": "{\"name\":\"n_chars\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_chars : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata:n_docs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata:n_docs", "target": "{\"name\":\"n_docs\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_docs : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/document.py:RepoMetadata:symbols", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/document.py:RepoMetadata:symbols", "target": "{\"name\":\"symbols\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"symbols : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser", "target": "{\"name\":\"RepoParser\",\"package\":\"metagpt/repo_parser.py:RepoParser\",\"attributes\":{\"base_directory\":{\"name\":\"base_directory\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"base_directory : Path\",\"compositions\":[\"Path\"]}},\"methods\":{\"extract_class_and_function_info\":{\"name\":\"extract_class_and_function_info\",\"args\":[{\"name\":\"tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tree\",\"compositions\":[]},{\"name\":\"file_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"file_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"RepoFileInfo\",\"description\":\"RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"extract_class_and_function_info(tree, file_path): RepoFileInfo\",\"aggregations\":[\"RepoFileInfo\"]},\"generate_dataframe_structure\":{\"name\":\"generate_dataframe_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_dataframe_structure(output_path)\",\"aggregations\":[]},\"generate_json_structure\":{\"name\":\"generate_json_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_json_structure(output_path)\",\"aggregations\":[]},\"generate_structure\":{\"name\":\"generate_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"generate_structure(output_path, mode): Path\",\"aggregations\":[\"Path\"]},\"generate_symbols\":{\"name\":\"generate_symbols\",\"args\":[],\"return_args\":{\"type_\":\"List[RepoFileInfo]\",\"description\":\"List[RepoFileInfo]\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"generate_symbols(): List[RepoFileInfo]\",\"aggregations\":[\"RepoFileInfo\"]},\"node_to_str\":{\"name\":\"node_to_str\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeBlockInfo\\\\|None\",\"description\":\"CodeBlockInfo \\\\| None\",\"compositions\":[\"CodeBlockInfo\\\\\"]},\"description\":\"node_to_str(node): CodeBlockInfo \\\\| None\",\"aggregations\":[\"CodeBlockInfo\\\\\"]},\"rebuild_class_views\":{\"name\":\"rebuild_class_views\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_class_views(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[\"Path\"],\"aggregations\":[\"RepoFileInfo\",\"CodeBlockInfo\\\\\",\"str\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:base_directory"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:extract_class_and_function_info"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:generate_dataframe_structure"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:generate_json_structure"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:generate_structure"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:generate_symbols"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:node_to_str"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:rebuild_class_views"}, {"predicate": "isCompositeOf", "source": "metagpt/repo_parser.py:RepoParser", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:RepoParser", "target": "?:RepoFileInfo"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:RepoParser", "target": "?:CodeBlockInfo\\"}, {"predicate": "isAggregateOf", "source": "metagpt/repo_parser.py:RepoParser", "target": "?:str\\"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_file"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_expr"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_name"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_if"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_if_compare"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_variable"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_assign"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_classes"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_parse_class_relationships"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_split_class_line"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_split_relationship_line"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_get_label"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_create_path_mapping"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_repair_namespaces"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_repair_ns"}, {"predicate": "has_class_method", "source": "metagpt/repo_parser.py:RepoParser", "target": "metagpt/repo_parser.py:RepoParser:_find_root"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:RepoParser", "target": "{\"lineno\":267,\"end_lineno\":634,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RepoParser\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/repo_parser.py:RepoParser", "target": "{\"name\":\"RepoParser\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"base_directory\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:base_directory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:base_directory", "target": "{\"name\":\"base_directory\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"base_directory : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:extract_class_and_function_info", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:extract_class_and_function_info", "target": "{\"name\":\"extract_class_and_function_info\",\"args\":[{\"name\":\"tree\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tree\",\"compositions\":[]},{\"name\":\"file_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"file_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"RepoFileInfo\",\"description\":\"RepoFileInfo\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"extract_class_and_function_info(tree, file_path): RepoFileInfo\",\"aggregations\":[\"RepoFileInfo\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:generate_dataframe_structure", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:generate_dataframe_structure", "target": "{\"name\":\"generate_dataframe_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_dataframe_structure(output_path)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:generate_json_structure", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:generate_json_structure", "target": "{\"name\":\"generate_json_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"generate_json_structure(output_path)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:generate_structure", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:generate_structure", "target": "{\"name\":\"generate_structure\",\"args\":[{\"name\":\"output_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"output_path\",\"compositions\":[]},{\"name\":\"mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"mode\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Path\",\"description\":\"Path\",\"compositions\":[\"Path\"]},\"description\":\"generate_structure(output_path, mode): Path\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:generate_symbols", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:generate_symbols", "target": "{\"name\":\"generate_symbols\",\"args\":[],\"return_args\":{\"type_\":\"List[RepoFileInfo]\",\"description\":\"List[RepoFileInfo]\",\"compositions\":[\"RepoFileInfo\"]},\"description\":\"generate_symbols(): List[RepoFileInfo]\",\"aggregations\":[\"RepoFileInfo\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:node_to_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:node_to_str", "target": "{\"name\":\"node_to_str\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"CodeBlockInfo\\\\|None\",\"description\":\"CodeBlockInfo \\\\| None\",\"compositions\":[\"CodeBlockInfo\\\\\"]},\"description\":\"node_to_str(node): CodeBlockInfo \\\\| None\",\"aggregations\":[\"CodeBlockInfo\\\\\"]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:rebuild_class_views", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/repo_parser.py:RepoParser:rebuild_class_views", "target": "{\"name\":\"rebuild_class_views\",\"args\":[{\"name\":\"path\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"path: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"rebuild_class_views(path: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/researcher.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/researcher.py", "target": "metagpt/roles/researcher.py:Report"}, {"predicate": "has_class", "source": "metagpt/roles/researcher.py", "target": "metagpt/roles/researcher.py:Researcher"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report", "target": "{\"name\":\"Report\",\"package\":\"metagpt/roles/researcher.py:Report\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"links\":{\"name\":\"links\",\"type_\":\"Optional[dict[str,list[str]]]\",\"default_\":\"\",\"description\":\"links : Optional[dict[str, list[str]]]\",\"compositions\":[]},\"summaries\":{\"name\":\"summaries\",\"type_\":\"Optional[list[tuple[str,str]]]\",\"default_\":\"\",\"description\":\"summaries : Optional[list[tuple[str, str]]]\",\"compositions\":[\"tuple\"]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"tuple\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Report", "target": "metagpt/roles/researcher.py:Report:content"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Report", "target": "metagpt/roles/researcher.py:Report:links"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Report", "target": "metagpt/roles/researcher.py:Report:summaries"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Report", "target": "metagpt/roles/researcher.py:Report:topic"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/researcher.py:Report", "target": "?:tuple"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:Report", "target": "{\"lineno\":21,\"end_lineno\":25,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Report\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/researcher.py:Report", "target": "{\"name\":\"Report\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"links\",\"visibility\":\"+\",\"value_type\":\"Optional[dict[str,list[str]]]\",\"default_value\":\"\"},{\"name\":\"summaries\",\"visibility\":\"+\",\"value_type\":\"Optional[list[tuple[str,str]]]\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report:links", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report:links", "target": "{\"name\":\"links\",\"type_\":\"Optional[dict[str,list[str]]]\",\"default_\":\"\",\"description\":\"links : Optional[dict[str, list[str]]]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report:summaries", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report:summaries", "target": "{\"name\":\"summaries\",\"type_\":\"Optional[list[tuple[str,str]]]\",\"default_\":\"\",\"description\":\"summaries : Optional[list[tuple[str, str]]]\",\"compositions\":[\"tuple\"]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Report:topic", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Report:topic", "target": "{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher", "target": "{\"name\":\"Researcher\",\"package\":\"metagpt/roles/researcher.py:Researcher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]},\"research_system_text\":{\"name\":\"research_system_text\",\"args\":[{\"name\":\"topic\",\"type_\":\"\",\"default_\":\"\",\"description\":\"topic\",\"compositions\":[]},{\"name\":\"current_task\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"current_task: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"research_system_text(topic, current_task: Action): str\",\"aggregations\":[\"Action\"]},\"write_report\":{\"name\":\"write_report\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_report(topic: str, content: str)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Message\",\"Action\"]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:language"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:profile"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:react"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:research_system_text"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:write_report"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/researcher.py:Researcher", "target": "?:Message"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/researcher.py:Researcher", "target": "?:Action"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/researcher.py:Researcher", "target": "metagpt/roles/researcher.py:Researcher:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:Researcher", "target": "{\"lineno\":28,\"end_lineno\":116,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Researcher\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/researcher.py:Researcher", "target": "{\"name\":\"Researcher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:react", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:react", "target": "{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:research_system_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:research_system_text", "target": "{\"name\":\"research_system_text\",\"args\":[{\"name\":\"topic\",\"type_\":\"\",\"default_\":\"\",\"description\":\"topic\",\"compositions\":[]},{\"name\":\"current_task\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"current_task: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"research_system_text(topic, current_task: Action): str\",\"aggregations\":[\"Action\"]}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:write_report", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/researcher.py:Researcher:write_report", "target": "{\"name\":\"write_report\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]},{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_report(topic: str, content: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "{\"name\":\"ResourceFileRepositories\",\"package\":\"metagpt/utils/project_repo.py:ResourceFileRepositories\",\"attributes\":{\"api_spec_and_task\":{\"name\":\"api_spec_and_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_spec_and_task\",\"compositions\":[]},\"code_plan_and_change\":{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]},\"code_summary\":{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]},\"competitive_analysis\":{\"name\":\"competitive_analysis\",\"type_\":\"\",\"default_\":\"\",\"description\":\"competitive_analysis\",\"compositions\":[]},\"data_api_design\":{\"name\":\"data_api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data_api_design\",\"compositions\":[]},\"graph_repo\":{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]},\"sd_output\":{\"name\":\"sd_output\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_output\",\"compositions\":[]},\"seq_flow\":{\"name\":\"seq_flow\",\"type_\":\"\",\"default_\":\"\",\"description\":\"seq_flow\",\"compositions\":[]},\"system_design\":{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:api_spec_and_task"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_plan_and_change"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_summary"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:competitive_analysis"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:data_api_design"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:graph_repo"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:prd"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:sd_output"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:seq_flow"}, {"predicate": "has_class_property", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:system_design"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/file_repository.py:FileRepository"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ProjectRepo:resources"}, {"predicate": "has_class_method", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "{\"lineno\":63,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ResourceFileRepositories\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "{\"name\":\"ResourceFileRepositories\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_spec_and_task\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_plan_and_change\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"code_summary\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"competitive_analysis\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"data_api_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"graph_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"sd_output\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"seq_flow\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"system_design\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "{\"description\":\"The source code defines a class ResourceFileRepositories that extends FileRepository and initializes multiple file repositories for different types of resources.\",\"use_cases\":[{\"description\":\"Create Resource File Repositories\",\"inputs\":[\"git_repo\"],\"outputs\":[\"competitive_analysis\",\"data_api_design\",\"seq_flow\",\"system_design\",\"prd\",\"api_spec_and_task\",\"code_summary\",\"sd_output\",\"code_plan_and_change\",\"graph_repo\"],\"actors\":[\"System\"],\"steps\":[\"Initialize a new instance of ResourceFileRepositories with a git repository\",\"Create file repositories for competitive analysis, data API design, sequence flow, system design, PRD, API spec and task, code summary, SD output, code plan and change, and graph repository\"],\"reason\":\"The system needs to manage and organize different types of resource files in a git repository\"}],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories", "target": "\nsequenceDiagram\n participant System\n System->>ResourceFileRepositories: git_repo\n activate ResourceFileRepositories\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=COMPETITIVE_ANALYSIS_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=DATA_API_DESIGN_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SEQ_FLOW_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SYSTEM_DESIGN_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=PRD_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=TASK_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_SUMMARIES_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SD_OUTPUT_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_PLAN_AND_CHANGE_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=VISUAL_GRAPH_REPO_FILE_REPO)\n deactivate ResourceFileRepositories\n"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:api_spec_and_task", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:api_spec_and_task", "target": "{\"name\":\"api_spec_and_task\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_spec_and_task\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_plan_and_change", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_plan_and_change", "target": "{\"name\":\"code_plan_and_change\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_plan_and_change\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:code_summary", "target": "{\"name\":\"code_summary\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_summary\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:competitive_analysis", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:competitive_analysis", "target": "{\"name\":\"competitive_analysis\",\"type_\":\"\",\"default_\":\"\",\"description\":\"competitive_analysis\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:data_api_design", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:data_api_design", "target": "{\"name\":\"data_api_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"data_api_design\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:graph_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:graph_repo", "target": "{\"name\":\"graph_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:prd", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:prd", "target": "{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:sd_output", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:sd_output", "target": "{\"name\":\"sd_output\",\"type_\":\"\",\"default_\":\"\",\"description\":\"sd_output\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:seq_flow", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:seq_flow", "target": "{\"name\":\"seq_flow\",\"type_\":\"\",\"default_\":\"\",\"description\":\"seq_flow\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:system_design", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:system_design", "target": "{\"name\":\"system_design\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_design\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "{\"name\":\"ResultEmbedding\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:ResultEmbedding\",\"attributes\":{\"data\":{\"name\":\"data\",\"type_\":\"List[Embedding]\",\"default_\":\"\",\"description\":\"data : List[Embedding]\",\"compositions\":[\"Embedding\"]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"object_\":{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]},\"usage\":{\"name\":\"usage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"usage\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Embedding\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:data"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:model"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:object_"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage"}, {"predicate": "is_composite_of", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "metagpt/tools/openai_text_to_embedding.py:Embedding"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "{\"lineno\":34,\"end_lineno\":41,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ResultEmbedding\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "{\"name\":\"ResultEmbedding\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"data\",\"visibility\":\"+\",\"value_type\":\"List[Embedding]\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"object_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"usage\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding", "target": "?:Embedding"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:data", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:data", "target": "{\"name\":\"data\",\"type_\":\"List[Embedding]\",\"default_\":\"\",\"description\":\"data : List[Embedding]\",\"compositions\":[\"Embedding\"]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:model", "target": "{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:object_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:object_", "target": "{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage", "target": "{\"name\":\"usage\",\"type_\":\"\",\"default_\":\"\",\"description\":\"usage\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Returns", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Returns", "target": "{\"name\":\"Returns\",\"package\":\"metagpt/learn/skill_loader.py:Returns\",\"attributes\":{\"format\":{\"name\":\"format\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"format : Optional[str]\",\"compositions\":[]},\"type\":{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Returns", "target": "metagpt/learn/skill_loader.py:Returns:format"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Returns", "target": "metagpt/learn/skill_loader.py:Returns:type"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Returns", "target": "metagpt/learn/skill_loader.py:Skill"}, {"predicate": "isCompositeOn", "source": "metagpt/learn/skill_loader.py:Returns", "target": "metagpt/learn/skill_loader.py:Skill:returns"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Returns", "target": "{\"lineno\":24,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Returns\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Returns", "target": "{\"name\":\"Returns\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"format\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Returns:format", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Returns:format", "target": "{\"name\":\"format\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"format : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Returns:type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Returns:type", "target": "{\"name\":\"type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "{\"name\":\"ReviewMode\",\"package\":\"metagpt/actions/action_node.py:ReviewMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "metagpt/actions/action_node.py:ReviewMode:name"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "{\"lineno\":26,\"end_lineno\":28,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviewMode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_node.py:ReviewMode", "target": "{\"name\":\"ReviewMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ReviewMode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ReviewMode:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "{\"name\":\"ReviseMode\",\"package\":\"metagpt/actions/action_node.py:ReviseMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "metagpt/actions/action_node.py:ReviseMode:name"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "{\"lineno\":31,\"end_lineno\":34,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ReviseMode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_node.py:ReviseMode", "target": "{\"name\":\"ReviseMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ReviseMode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ReviseMode:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/role.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/role.py", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class", "source": "metagpt/roles/role.py", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "has_class", "source": "metagpt/roles/role.py", "target": "metagpt/roles/role.py:RoleReactMode"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role", "target": "{\"name\":\"Role\",\"package\":\"metagpt/roles/role.py:Role\",\"attributes\":{\"action_description\":{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]},\"actions\":{\"name\":\"actions\",\"type_\":\"list[SerializeAsAny[Action]]\",\"default_\":\"\",\"description\":\"actions : list[SerializeAsAny[Action]]\",\"compositions\":[\"Action\",\"SerializeAsAny\"]},\"addresses\":{\"name\":\"addresses\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"addresses : set[str]\",\"compositions\":[]},\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"git_repo\":{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"is_human\":{\"name\":\"is_human\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_human : bool\",\"compositions\":[]},\"is_idle\":{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]},\"latest_observed_msg\":{\"name\":\"latest_observed_msg\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"latest_observed_msg : Optional[Message]\",\"compositions\":[\"Message\"]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"project_name\":{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]},\"project_path\":{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]},\"project_repo\":{\"name\":\"project_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_repo\",\"compositions\":[]},\"prompt_schema\":{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]},\"rc\":{\"name\":\"rc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"rc\",\"compositions\":[]},\"recovered\":{\"name\":\"recovered\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"recovered : bool\",\"compositions\":[]},\"role_id\":{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id : str\",\"compositions\":[]},\"src_workspace\":{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]},\"states\":{\"name\":\"states\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"states : list[str]\",\"compositions\":[]},\"todo\":{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}},\"methods\":{\"act\":{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"ActionOutput\",\"description\":\"ActionOutput\",\"compositions\":[\"ActionOutput\"]},\"description\":\"act(): ActionOutput\",\"aggregations\":[\"ActionOutput\"]},\"check_addresses\":{\"name\":\"check_addresses\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_addresses()\",\"aggregations\":[]},\"get_memories\":{\"name\":\"get_memories\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_memories(k): list[Message]\",\"aggregations\":[\"Message\"]},\"is_watch\":{\"name\":\"is_watch\",\"args\":[{\"name\":\"caused_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"caused_by: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_watch(caused_by: str)\",\"aggregations\":[]},\"publish_message\":{\"name\":\"publish_message\",\"args\":[{\"name\":\"msg\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(msg)\",\"aggregations\":[]},\"put_message\":{\"name\":\"put_message\",\"args\":[{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"put_message(message)\",\"aggregations\":[]},\"pydantic_rebuild_model\":{\"name\":\"pydantic_rebuild_model\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pydantic_rebuild_model()\",\"aggregations\":[]},\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"run(with_message): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]},\"set_action\":{\"name\":\"set_action\",\"args\":[{\"name\":\"action\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"action: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_action(action: Action)\",\"aggregations\":[\"Action\"]},\"set_actions\":{\"name\":\"set_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"list[Union[Action,Type[Action]]]\",\"default_\":\"\",\"description\":\"actions: list[Union[Action, Type[Action]]]\",\"compositions\":[\"Action\",\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_actions(actions: list[Union[Action, Type[Action]]])\",\"aggregations\":[\"Action\",\"Type\"]},\"set_addresses\":{\"name\":\"set_addresses\",\"args\":[{\"name\":\"addresses\",\"type_\":\"Set[str]\",\"default_\":\"\",\"description\":\"addresses: Set[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(addresses: Set[str])\",\"aggregations\":[]},\"set_env\":{\"name\":\"set_env\",\"args\":[{\"name\":\"env\",\"type_\":\"Environment\",\"default_\":\"\",\"description\":\"env: 'Environment'\",\"compositions\":[\"Environment\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_env(env: 'Environment')\",\"aggregations\":[\"Environment\"]},\"set_todo\":{\"name\":\"set_todo\",\"args\":[{\"name\":\"value\",\"type_\":\"Optional[Action]\",\"default_\":\"\",\"description\":\"value: Optional[Action]\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_todo(value: Optional[Action])\",\"aggregations\":[\"Action\"]},\"think\":{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"Action\",\"description\":\"Action\",\"compositions\":[\"Action\"]},\"description\":\"think(): Action\",\"aggregations\":[\"Action\"]}},\"compositions\":[\"Action\",\"SerializeAsAny\",\"Message\"],\"aggregations\":[\"ActionOutput\",\"Message\\\\\",\"Type\",\"Environment\"]}"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:action_description"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:actions"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:addresses"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:desc"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:git_repo"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:is_human"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:is_idle"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:latest_observed_msg"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:llm"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:model_config"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:profile"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:project_name"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:project_path"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:project_repo"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:prompt_schema"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:rc"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:recovered"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:role_id"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:src_workspace"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:states"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:todo"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:act"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:check_addresses"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:get_memories"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:is_watch"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:publish_message"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:put_message"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:pydantic_rebuild_model"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:react"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:run"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_action"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_actions"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_addresses"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_env"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:set_todo"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:think"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:Role", "target": "?:SerializeAsAny"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:Role", "target": "?:ActionOutput"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:Role", "target": "?:Message\\"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:Role", "target": "?:Type"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:Role", "target": "?:Environment"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/role.py:Role", "target": "metagpt/context_mixin.py:ContextMixin"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/role.py:Role", "target": "metagpt/schema.py:SerializationMixin"}, {"predicate": "is_composite_of", "source": "metagpt/roles/role.py:Role", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/roles/role.py:Role", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_reset"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_setting"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_check_actions"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_init_action"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_set_react_mode"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_watch"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_set_state"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_get_prefix"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_act"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_observe"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_react"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_act_by_order"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:Role", "target": "metagpt/roles/role.py:Role:_plan_and_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:Role", "target": "{\"lineno\":121,\"end_lineno\":556,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Role\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/role.py:Role", "target": "{\"name\":\"Role\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"action_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"actions\",\"visibility\":\"+\",\"value_type\":\"list[SerializeAsAny[Action]]\",\"default_value\":\"\"},{\"name\":\"addresses\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"},{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"git_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"is_human\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"is_idle\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"latest_observed_msg\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"project_repo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_schema\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rc\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"recovered\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"role_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"src_workspace\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"states\",\"visibility\":\"+\",\"value_type\":\"list[str]\",\"default_value\":\"\"},{\"name\":\"todo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:Role", "target": "?:Action"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:Role", "target": "?:Message"}, {"predicate": "has_class_use_case", "source": "metagpt/roles/role.py:Role", "target": "{\"description\":\"This source code defines a Role class that represents a role or agent in a system. The Role class contains methods for setting actions, thinking, acting, observing, and reacting to messages. It also includes properties for managing the role's state and environment.\",\"use_cases\":[{\"description\":\"Set action to do and update context\",\"inputs\":[\"value\"],\"outputs\":[],\"actors\":[\"Role\"],\"steps\":[\"Check if the value is not None\",\"If the value is not None, set the value as the action to do and update the context\"],\"reason\":\"This use case is executed when the system needs to set an action for the role to perform and update the context.\"},{\"description\":\"Add actions to the role\",\"inputs\":[\"actions\"],\"outputs\":[],\"actors\":[\"Role\"],\"steps\":[\"Reset the role's states and actions\",\"Iterate through the list of actions\",\"Initialize each action if it is not already initialized\",\"Set the long-term memory (llm) and prefix for each action\",\"Add the action to the role's list of actions\",\"Update the role's states with the action descriptions\"],\"reason\":\"This use case is executed when the system needs to add multiple actions to the role and update its states and long-term memory.\"},{\"description\":\"Set the strategy of the role reacting to observed messages\",\"inputs\":[\"react_mode\",\"max_react_loop\"],\"outputs\":[],\"actors\":[\"Role\"],\"steps\":[\"Check if the react_mode is valid\",\"Set the role's react mode and maximum react loop based on the inputs\"],\"reason\":\"This use case is executed when the system needs to set the strategy for the role's reaction to observed messages.\"},{\"description\":\"Watch actions of interest\",\"inputs\":[\"actions\"],\"outputs\":[],\"actors\":[\"Role\"],\"steps\":[\"Set the role to watch messages caused by the specified actions\"],\"reason\":\"This use case is executed when the system needs the role to watch specific actions of interest.\"},{\"description\":\"Observe, think, and act based on the results of the observation\",\"inputs\":[\"with_message\"],\"outputs\":[\"rsp\"],\"actors\":[\"Role\"],\"steps\":[\"If a message is provided, place the message into the role's private message buffer\",\"If there is no new information, suspend and wait\",\"Observe new messages and filter out messages of interest\",\"React to the observed messages and get the response message\",\"Reset the next action to be taken\",\"Publish the response message to the environment\"],\"reason\":\"This use case is executed when the role needs to observe, think, and act based on the results of the observation.\"}],\"relationship\":[\"The 'Set action to do and update context' use case is related to the 'Add actions to the role' use case as it involves updating the role's context and actions.\",\"The 'Set the strategy of the role reacting to observed messages' use case is related to the 'Observe, think, and act based on the results of the observation' use case as it determines the strategy for the role's reaction to observed messages.\",\"The 'Watch actions of interest' use case is related to the 'Observe, think, and act based on the results of the observation' use case as it involves watching specific actions of interest during the observation process.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/roles/role.py:Role", "target": "\nsequenceDiagram\n participant Role\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:action_description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:action_description", "target": "{\"name\":\"action_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"action_description\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:action_description", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:actions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:actions", "target": "{\"name\":\"actions\",\"type_\":\"list[SerializeAsAny[Action]]\",\"default_\":\"\",\"description\":\"actions : list[SerializeAsAny[Action]]\",\"compositions\":[\"Action\",\"SerializeAsAny\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:addresses", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:addresses", "target": "{\"name\":\"addresses\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"addresses : set[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:git_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:git_repo", "target": "{\"name\":\"git_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"git_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:git_repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:is_human", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:is_human", "target": "{\"name\":\"is_human\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"is_human : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:is_idle", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:is_idle", "target": "{\"name\":\"is_idle\",\"type_\":\"\",\"default_\":\"\",\"description\":\"is_idle\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:is_idle", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:latest_observed_msg", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:latest_observed_msg", "target": "{\"name\":\"latest_observed_msg\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"latest_observed_msg : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:project_path", "target": "{\"name\":\"project_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_repo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:project_repo", "target": "{\"name\":\"project_repo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"project_repo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:project_repo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:prompt_schema", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:prompt_schema", "target": "{\"name\":\"prompt_schema\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_schema\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:prompt_schema", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:rc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:rc", "target": "{\"name\":\"rc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"rc\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:recovered", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:recovered", "target": "{\"name\":\"recovered\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"recovered : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:role_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:role_id", "target": "{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:src_workspace", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:src_workspace", "target": "{\"name\":\"src_workspace\",\"type_\":\"\",\"default_\":\"\",\"description\":\"src_workspace\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:src_workspace", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:states", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:states", "target": "{\"name\":\"states\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"states : list[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:todo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:todo", "target": "{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:todo", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:act", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:act", "target": "{\"name\":\"act\",\"args\":[],\"return_args\":{\"type_\":\"ActionOutput\",\"description\":\"ActionOutput\",\"compositions\":[\"ActionOutput\"]},\"description\":\"act(): ActionOutput\",\"aggregations\":[\"ActionOutput\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:check_addresses", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:check_addresses", "target": "{\"name\":\"check_addresses\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_addresses()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:get_memories", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:get_memories", "target": "{\"name\":\"get_memories\",\"args\":[{\"name\":\"k\",\"type_\":\"\",\"default_\":\"\",\"description\":\"k\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Message]\",\"description\":\"list[Message]\",\"compositions\":[\"Message\"]},\"description\":\"get_memories(k): list[Message]\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:is_watch", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:is_watch", "target": "{\"name\":\"is_watch\",\"args\":[{\"name\":\"caused_by\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"caused_by: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"is_watch(caused_by: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:publish_message", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:publish_message", "target": "{\"name\":\"publish_message\",\"args\":[{\"name\":\"msg\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"publish_message(msg)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:put_message", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:put_message", "target": "{\"name\":\"put_message\",\"args\":[{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"put_message(message)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:pydantic_rebuild_model", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:pydantic_rebuild_model", "target": "{\"name\":\"pydantic_rebuild_model\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"pydantic_rebuild_model()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:react", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:react", "target": "{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\\\\|None\",\"description\":\"Message \\\\| None\",\"compositions\":[\"Message\\\\\"]},\"description\":\"run(with_message): Message \\\\| None\",\"aggregations\":[\"Message\\\\\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_action", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_action", "target": "{\"name\":\"set_action\",\"args\":[{\"name\":\"action\",\"type_\":\"Action\",\"default_\":\"\",\"description\":\"action: Action\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_action(action: Action)\",\"aggregations\":[\"Action\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_actions", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_actions", "target": "{\"name\":\"set_actions\",\"args\":[{\"name\":\"actions\",\"type_\":\"list[Union[Action,Type[Action]]]\",\"default_\":\"\",\"description\":\"actions: list[Union[Action, Type[Action]]]\",\"compositions\":[\"Action\",\"Type\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_actions(actions: list[Union[Action, Type[Action]]])\",\"aggregations\":[\"Action\",\"Type\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_addresses", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_addresses", "target": "{\"name\":\"set_addresses\",\"args\":[{\"name\":\"addresses\",\"type_\":\"Set[str]\",\"default_\":\"\",\"description\":\"addresses: Set[str]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_addresses(addresses: Set[str])\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_env", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_env", "target": "{\"name\":\"set_env\",\"args\":[{\"name\":\"env\",\"type_\":\"Environment\",\"default_\":\"\",\"description\":\"env: 'Environment'\",\"compositions\":[\"Environment\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_env(env: 'Environment')\",\"aggregations\":[\"Environment\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:set_todo", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:set_todo", "target": "{\"name\":\"set_todo\",\"args\":[{\"name\":\"value\",\"type_\":\"Optional[Action]\",\"default_\":\"\",\"description\":\"value: Optional[Action]\",\"compositions\":[\"Action\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_todo(value: Optional[Action])\",\"aggregations\":[\"Action\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:think", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:Role:think", "target": "{\"name\":\"think\",\"args\":[],\"return_args\":{\"type_\":\"Action\",\"description\":\"Action\",\"compositions\":[\"Action\"]},\"description\":\"think(): Action\",\"aggregations\":[\"Action\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext", "target": "{\"name\":\"RoleContext\",\"package\":\"metagpt/roles/role.py:RoleContext\",\"attributes\":{\"env\":{\"name\":\"env\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"env : str\",\"compositions\":[]},\"history\":{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]},\"important_memory\":{\"name\":\"important_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"important_memory\",\"compositions\":[]},\"max_react_loop\":{\"name\":\"max_react_loop\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_react_loop : int\",\"compositions\":[]},\"memory\":{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"msg_buffer\":{\"name\":\"msg_buffer\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg_buffer\",\"compositions\":[]},\"news\":{\"name\":\"news\",\"type_\":\"list[Type[Message]]\",\"default_\":\"\",\"description\":\"news : list[Type[Message]]\",\"compositions\":[\"Message\",\"Type\"]},\"react_mode\":{\"name\":\"react_mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"react_mode\",\"compositions\":[]},\"state\":{\"name\":\"state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"state : int\",\"compositions\":[]},\"todo\":{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]},\"watch\":{\"name\":\"watch\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"watch : set[str]\",\"compositions\":[]}},\"methods\":{\"check\":{\"name\":\"check\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check(role_id: str)\",\"aggregations\":[]}},\"compositions\":[\"Message\",\"Type\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:env"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:history"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:important_memory"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:max_react_loop"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:memory"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:model_config"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:msg_buffer"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:news"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:react_mode"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:state"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:todo"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:watch"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:RoleContext:check"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:RoleContext", "target": "?:Type"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:Role"}, {"predicate": "isCompositeOn", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/roles/role.py:Role:rc"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/memory/longterm_memory.py:LongTermMemory"}, {"predicate": "isAggregateOn", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/memory/longterm_memory.py:LongTermMemory:rc"}, {"predicate": "is_composite_of", "source": "metagpt/roles/role.py:RoleContext", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:RoleContext", "target": "{\"lineno\":83,\"end_lineno\":118,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/role.py:RoleContext", "target": "{\"name\":\"RoleContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"env\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"history\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"important_memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_react_loop\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"memory\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"msg_buffer\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"news\",\"visibility\":\"+\",\"value_type\":\"list[Type[Message]]\",\"default_value\":\"\"},{\"name\":\"react_mode\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"state\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"todo\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"watch\",\"visibility\":\"+\",\"value_type\":\"set[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:RoleContext", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:env", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:env", "target": "{\"name\":\"env\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"env : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:history", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:history", "target": "{\"name\":\"history\",\"type_\":\"\",\"default_\":\"\",\"description\":\"history\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:history", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:important_memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:important_memory", "target": "{\"name\":\"important_memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"important_memory\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:important_memory", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:max_react_loop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:max_react_loop", "target": "{\"name\":\"max_react_loop\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_react_loop : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:memory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:memory", "target": "{\"name\":\"memory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"memory\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:msg_buffer", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:msg_buffer", "target": "{\"name\":\"msg_buffer\",\"type_\":\"\",\"default_\":\"\",\"description\":\"msg_buffer\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:news", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:news", "target": "{\"name\":\"news\",\"type_\":\"list[Type[Message]]\",\"default_\":\"\",\"description\":\"news : list[Type[Message]]\",\"compositions\":[\"Message\",\"Type\"]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:react_mode", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:react_mode", "target": "{\"name\":\"react_mode\",\"type_\":\"\",\"default_\":\"\",\"description\":\"react_mode\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:state", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:state", "target": "{\"name\":\"state\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"state : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:todo", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:todo", "target": "{\"name\":\"todo\",\"type_\":\"\",\"default_\":\"\",\"description\":\"todo\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:watch", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:watch", "target": "{\"name\":\"watch\",\"type_\":\"set[str]\",\"default_\":\"\",\"description\":\"watch : set[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleContext:check", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleContext:check", "target": "{\"name\":\"check\",\"args\":[{\"name\":\"role_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role_id: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check(role_id: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleReactMode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleReactMode", "target": "{\"name\":\"RoleReactMode\",\"package\":\"metagpt/roles/role.py:RoleReactMode\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{\"values\":{\"name\":\"values\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"values()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/role.py:RoleReactMode", "target": "metagpt/roles/role.py:RoleReactMode:name"}, {"predicate": "has_class_method", "source": "metagpt/roles/role.py:RoleReactMode", "target": "metagpt/roles/role.py:RoleReactMode:values"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/role.py:RoleReactMode", "target": "metagpt/roles/role.py:RoleContext"}, {"predicate": "isCompositeOn", "source": "metagpt/roles/role.py:RoleReactMode", "target": "metagpt/roles/role.py:RoleContext:react_mode"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:RoleReactMode", "target": "{\"lineno\":73,\"end_lineno\":80,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RoleReactMode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/role.py:RoleReactMode", "target": "{\"name\":\"RoleReactMode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleReactMode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleReactMode:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/role.py:RoleReactMode:values", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/role.py:RoleReactMode:values", "target": "{\"name\":\"values\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"values()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/run_code.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/run_code.py", "target": "metagpt/actions/run_code.py:RunCode"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode", "target": "{\"name\":\"RunCode\",\"package\":\"metagpt/actions/run_code.py:RunCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"RunCodeResult\",\"description\":\"RunCodeResult\",\"compositions\":[\"RunCodeResult\"]},\"description\":\"run(): RunCodeResult\",\"aggregations\":[\"RunCodeResult\"]},\"run_script\":{\"name\":\"run_script\",\"args\":[{\"name\":\"working_directory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_directory\",\"compositions\":[]},{\"name\":\"additional_python_paths\",\"type_\":\"\",\"default_\":\"\",\"description\":\"additional_python_paths\",\"compositions\":[]},{\"name\":\"command\",\"type_\":\"\",\"default_\":\"\",\"description\":\"command\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_script(working_directory, additional_python_paths, command): Tuple[str, str]\",\"aggregations\":[]},\"run_text\":{\"name\":\"run_text\",\"args\":[{\"name\":\"code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_text(code): Tuple[str, str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"RunCodeResult\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:run_script"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:run_text"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/run_code.py:RunCode", "target": "?:RunCodeResult"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:_install_via_subprocess"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:_install_requirements"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:_install_pytest"}, {"predicate": "has_class_method", "source": "metagpt/actions/run_code.py:RunCode", "target": "metagpt/actions/run_code.py:RunCode:_install_dependencies"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:RunCode", "target": "{\"lineno\":78,\"end_lineno\":173,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/run_code.py:RunCode", "target": "{\"name\":\"RunCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"RunCodeResult\",\"description\":\"RunCodeResult\",\"compositions\":[\"RunCodeResult\"]},\"description\":\"run(): RunCodeResult\",\"aggregations\":[\"RunCodeResult\"]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:run_script", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:run_script", "target": "{\"name\":\"run_script\",\"args\":[{\"name\":\"working_directory\",\"type_\":\"\",\"default_\":\"\",\"description\":\"working_directory\",\"compositions\":[]},{\"name\":\"additional_python_paths\",\"type_\":\"\",\"default_\":\"\",\"description\":\"additional_python_paths\",\"compositions\":[]},{\"name\":\"command\",\"type_\":\"\",\"default_\":\"\",\"description\":\"command\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_script(working_directory, additional_python_paths, command): Tuple[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:run_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/run_code.py:RunCode:run_text", "target": "{\"name\":\"run_text\",\"args\":[{\"name\":\"code\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Tuple[str,str]\",\"description\":\"Tuple[str, str]\",\"compositions\":[]},\"description\":\"run_text(code): Tuple[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext", "target": "{\"name\":\"RunCodeContext\",\"package\":\"metagpt/schema.py:RunCodeContext\",\"attributes\":{\"additional_python_paths\":{\"name\":\"additional_python_paths\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"additional_python_paths : List[str]\",\"compositions\":[]},\"code\":{\"name\":\"code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"code : Optional[str]\",\"compositions\":[]},\"code_filename\":{\"name\":\"code_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code_filename : str\",\"compositions\":[]},\"command\":{\"name\":\"command\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"command : List[str]\",\"compositions\":[]},\"mode\":{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode : str\",\"compositions\":[]},\"output\":{\"name\":\"output\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output : Optional[str]\",\"compositions\":[]},\"output_filename\":{\"name\":\"output_filename\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output_filename : Optional[str]\",\"compositions\":[]},\"test_code\":{\"name\":\"test_code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"test_code : Optional[str]\",\"compositions\":[]},\"test_filename\":{\"name\":\"test_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"test_filename : str\",\"compositions\":[]},\"working_directory\":{\"name\":\"working_directory\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"working_directory : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:additional_python_paths"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:code"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:code_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:command"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:mode"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:output"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:output_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:test_code"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:test_filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:RunCodeContext:working_directory"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/actions/debug_error.py:DebugError"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/actions/debug_error.py:DebugError:i_context"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/actions/run_code.py:RunCode"}, {"predicate": "isCompositeOn", "source": "metagpt/schema.py:RunCodeContext", "target": "metagpt/actions/run_code.py:RunCode:i_context"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:RunCodeContext", "target": "{\"lineno\":431,\"end_lineno\":441,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCodeContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:RunCodeContext", "target": "{\"name\":\"RunCodeContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"additional_python_paths\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"code\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"code_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"command\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"mode\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"output\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"output_filename\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"test_code\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"test_filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"working_directory\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/schema.py:RunCodeContext", "target": "{\"description\":\"The source code defines a class RunCodeContext which contains attributes related to running code such as mode, code, test code, command, working directory, additional python paths, output filename, and output.\",\"use_cases\":[{\"description\":\"Run code in script mode\",\"inputs\":[\"code\",\"working_directory\",\"additional_python_paths\"],\"outputs\":[\"output\"],\"actors\":[\"User\"],\"steps\":[\"User provides the code to be executed\",\"User specifies the working directory for code execution\",\"User may provide additional python paths if required\",\"System runs the provided code in script mode\",\"System generates an output after executing the code\"],\"reason\":\"When the user wants to execute a piece of code in script mode\"},{\"description\":\"Run code in test mode\",\"inputs\":[\"test_code\",\"working_directory\",\"additional_python_paths\"],\"outputs\":[\"output\"],\"actors\":[\"User\"],\"steps\":[\"User provides the test code to be executed\",\"User specifies the working directory for code execution\",\"User may provide additional python paths if required\",\"System runs the provided test code\",\"System generates an output after executing the test code\"],\"reason\":\"When the user wants to execute a piece of code in test mode\"}],\"relationship\":[\"The 'Run code in script mode' use case is related to the 'Run code in test mode' use case as both involve running code with different purposes.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/schema.py:RunCodeContext", "target": "\nsequenceDiagram\n participant User\n participant System\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:additional_python_paths", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:additional_python_paths", "target": "{\"name\":\"additional_python_paths\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"additional_python_paths : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:code", "target": "{\"name\":\"code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"code : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:code_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:code_filename", "target": "{\"name\":\"code_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:command", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:command", "target": "{\"name\":\"command\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"command : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:mode", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:mode", "target": "{\"name\":\"mode\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"mode : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:output", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:output", "target": "{\"name\":\"output\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:output_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:output_filename", "target": "{\"name\":\"output_filename\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"output_filename : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:test_code", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:test_code", "target": "{\"name\":\"test_code\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"test_code : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:test_filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:test_filename", "target": "{\"name\":\"test_filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"test_filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeContext:working_directory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeContext:working_directory", "target": "{\"name\":\"working_directory\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"working_directory : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeResult", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeResult", "target": "{\"name\":\"RunCodeResult\",\"package\":\"metagpt/schema.py:RunCodeResult\",\"attributes\":{\"stderr\":{\"name\":\"stderr\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stderr : str\",\"compositions\":[]},\"stdout\":{\"name\":\"stdout\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stdout : str\",\"compositions\":[]},\"summary\":{\"name\":\"summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"summary : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeResult", "target": "metagpt/schema.py:RunCodeResult:stderr"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeResult", "target": "metagpt/schema.py:RunCodeResult:stdout"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:RunCodeResult", "target": "metagpt/schema.py:RunCodeResult:summary"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:RunCodeResult", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:RunCodeResult", "target": "{\"lineno\":444,\"end_lineno\":447,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"RunCodeResult\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:RunCodeResult", "target": "{\"name\":\"RunCodeResult\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"stderr\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"stdout\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeResult:stderr", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeResult:stderr", "target": "{\"name\":\"stderr\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stderr : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeResult:stdout", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeResult:stdout", "target": "{\"name\":\"stdout\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"stdout : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:RunCodeResult:summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:RunCodeResult:summary", "target": "{\"name\":\"summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"summary : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/s3.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/s3.py", "target": "metagpt/utils/s3.py:S3"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3", "target": "{\"name\":\"S3\",\"package\":\"metagpt/utils/s3.py:S3\",\"attributes\":{\"auth_config\":{\"name\":\"auth_config\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"auth_config : dict\",\"compositions\":[]},\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"session\":{\"name\":\"session\",\"type_\":\"Session\",\"default_\":\"\",\"description\":\"session : Session\",\"compositions\":[\"Session\"]}},\"methods\":{\"cache\":{\"name\":\"cache\",\"args\":[{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"file_ext\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file_ext: str\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"cache(data: str, file_ext: str, format: str): str\",\"aggregations\":[]},\"download_file\":{\"name\":\"download_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"chunk_size\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"chunk_size: Optional[int]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"download_file(bucket: str, object_name: str, local_path: str, chunk_size: Optional[int]): None\",\"aggregations\":[]},\"get_object\":{\"name\":\"get_object\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"get_object(bucket: str, object_name: str): bytes\",\"aggregations\":[\"bytes\"]},\"get_object_url\":{\"name\":\"get_object_url\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_object_url(bucket: str, object_name: str): str\",\"aggregations\":[]},\"upload_file\":{\"name\":\"upload_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"upload_file(bucket: str, local_path: str, object_name: str): None\",\"aggregations\":[]}},\"compositions\":[\"Session\"],\"aggregations\":[\"bytes\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:auth_config"}, {"predicate": "has_class_property", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:config"}, {"predicate": "has_class_property", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:session"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:cache"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:download_file"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:get_object"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:get_object_url"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:upload_file"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/s3.py:S3", "target": "?:Session"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/s3.py:S3", "target": "?:bytes"}, {"predicate": "has_class_method", "source": "metagpt/utils/s3.py:S3", "target": "metagpt/utils/s3.py:S3:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:S3", "target": "{\"lineno\":16,\"end_lineno\":154,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"S3\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/s3.py:S3", "target": "{\"name\":\"S3\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"auth_config\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"session\",\"visibility\":\"+\",\"value_type\":\"Session\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:auth_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:auth_config", "target": "{\"name\":\"auth_config\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"auth_config : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:session", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:session", "target": "{\"name\":\"session\",\"type_\":\"Session\",\"default_\":\"\",\"description\":\"session : Session\",\"compositions\":[\"Session\"]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:cache", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:cache", "target": "{\"name\":\"cache\",\"args\":[{\"name\":\"data\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"data: str\",\"compositions\":[]},{\"name\":\"file_ext\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"file_ext: str\",\"compositions\":[]},{\"name\":\"format\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"format: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"cache(data: str, file_ext: str, format: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:download_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:download_file", "target": "{\"name\":\"download_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"chunk_size\",\"type_\":\"Optional[int]\",\"default_\":\"\",\"description\":\"chunk_size: Optional[int]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"download_file(bucket: str, object_name: str, local_path: str, chunk_size: Optional[int]): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:get_object", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:get_object", "target": "{\"name\":\"get_object\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bytes\",\"description\":\"bytes\",\"compositions\":[\"bytes\"]},\"description\":\"get_object(bucket: str, object_name: str): bytes\",\"aggregations\":[\"bytes\"]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:get_object_url", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:get_object_url", "target": "{\"name\":\"get_object_url\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_object_url(bucket: str, object_name: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:upload_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/s3.py:S3:upload_file", "target": "{\"name\":\"upload_file\",\"args\":[{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket: str\",\"compositions\":[]},{\"name\":\"local_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"local_path: str\",\"compositions\":[]},{\"name\":\"object_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"upload_file(bucket: str, local_path: str, object_name: str): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/s3_config.py", "target": "metagpt/configs/s3_config.py:S3Config"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config", "target": "{\"name\":\"S3Config\",\"package\":\"metagpt/configs/s3_config.py:S3Config\",\"attributes\":{\"access_key\":{\"name\":\"access_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"access_key : str\",\"compositions\":[]},\"bucket\":{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket : str\",\"compositions\":[]},\"endpoint\":{\"name\":\"endpoint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"endpoint : str\",\"compositions\":[]},\"secret_key\":{\"name\":\"secret_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"secret_key : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/configs/s3_config.py:S3Config:access_key"}, {"predicate": "has_class_property", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/configs/s3_config.py:S3Config:bucket"}, {"predicate": "has_class_property", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/configs/s3_config.py:S3Config:endpoint"}, {"predicate": "has_class_property", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/configs/s3_config.py:S3Config:secret_key"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault"}, {"predicate": "isAggregateOf", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/utils/s3.py:S3"}, {"predicate": "isAggregateOn", "source": "metagpt/configs/s3_config.py:S3Config", "target": "metagpt/utils/s3.py:S3:config"}, {"predicate": "has_page_info", "source": "metagpt/configs/s3_config.py:S3Config", "target": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"S3Config\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/s3_config.py:S3Config", "target": "{\"name\":\"S3Config\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"access_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"bucket\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"endpoint\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"secret_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config:access_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config:access_key", "target": "{\"name\":\"access_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"access_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config:bucket", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config:bucket", "target": "{\"name\":\"bucket\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"bucket : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config:endpoint", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config:endpoint", "target": "{\"name\":\"endpoint\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"endpoint : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/s3_config.py:S3Config:secret_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/s3_config.py:S3Config:secret_key", "target": "{\"name\":\"secret_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"secret_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:SPO", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:SPO", "target": "{\"name\":\"SPO\",\"package\":\"metagpt/utils/graph_repository.py:SPO\",\"attributes\":{\"object_\":{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]},\"predicate\":{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate : str\",\"compositions\":[]},\"subject\":{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:SPO", "target": "metagpt/utils/graph_repository.py:SPO:object_"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:SPO", "target": "metagpt/utils/graph_repository.py:SPO:predicate"}, {"predicate": "has_class_property", "source": "metagpt/utils/graph_repository.py:SPO", "target": "metagpt/utils/graph_repository.py:SPO:subject"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:SPO", "target": "{\"lineno\":46,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SPO\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/graph_repository.py:SPO", "target": "{\"name\":\"SPO\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"object_\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"predicate\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"subject\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:SPO:object_", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:SPO:object_", "target": "{\"name\":\"object_\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"object_ : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:SPO:predicate", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:SPO:predicate", "target": "{\"name\":\"predicate\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"predicate : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:SPO:subject", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/graph_repository.py:SPO:subject", "target": "{\"name\":\"subject\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"subject : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "{\"name\":\"SQVUseCase\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:SQVUseCase\",\"attributes\":{\"actors\":{\"name\":\"actors\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"actors : List[str]\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"inputs\":{\"name\":\"inputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"inputs : List[str]\",\"compositions\":[]},\"outputs\":{\"name\":\"outputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"outputs : List[str]\",\"compositions\":[]},\"reason\":{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]},\"steps\":{\"name\":\"steps\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"steps : List[str]\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:actors"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:description"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:inputs"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:outputs"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:reason"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:steps"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "{\"lineno\":38,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SQVUseCase\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase", "target": "{\"name\":\"SQVUseCase\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"actors\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inputs\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"outputs\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"reason\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"steps\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:actors", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:actors", "target": "{\"name\":\"actors\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"actors : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:inputs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:inputs", "target": "{\"name\":\"inputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"inputs : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:outputs", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:outputs", "target": "{\"name\":\"outputs\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"outputs : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:reason", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:reason", "target": "{\"name\":\"reason\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"reason : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:steps", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase:steps", "target": "{\"name\":\"steps\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"steps : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails", "target": "{\"name\":\"SQVUseCaseDetails\",\"package\":\"metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails\",\"attributes\":{\"description\":{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]},\"relationship\":{\"name\":\"relationship\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"relationship : List[str]\",\"compositions\":[]},\"use_cases\":{\"name\":\"use_cases\",\"type_\":\"List[SQVUseCase]\",\"default_\":\"\",\"description\":\"use_cases : List[SQVUseCase]\",\"compositions\":[\"SQVUseCase\"]}},\"methods\":{},\"compositions\":[\"SQVUseCase\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:description"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:relationship"}, {"predicate": "has_class_property", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:use_cases"}, {"predicate": "is_composite_of", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails", "target": "metagpt/actions/rebuild_sequence_view.py:SQVUseCase"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails", "target": "{\"lineno\":47,\"end_lineno\":50,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SQVUseCaseDetails\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails", "target": "{\"name\":\"SQVUseCaseDetails\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"relationship\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"use_cases\",\"visibility\":\"+\",\"value_type\":\"List[SQVUseCase]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails", "target": "?:SQVUseCase"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:description", "target": "{\"name\":\"description\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"description : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:relationship", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:relationship", "target": "{\"name\":\"relationship\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"relationship : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:use_cases", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/rebuild_sequence_view.py:SQVUseCaseDetails:use_cases", "target": "{\"name\":\"use_cases\",\"type_\":\"List[SQVUseCase]\",\"default_\":\"\",\"description\":\"use_cases : List[SQVUseCase]\",\"compositions\":[\"SQVUseCase\"]}"}, {"predicate": "is", "source": "metagpt/roles/sales.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/sales.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/sales.py", "target": "metagpt/roles/sales.py:Sales"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales", "target": "{\"name\":\"Sales\",\"package\":\"metagpt/roles/sales.py:Sales\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"store\":{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}},\"methods\":{},\"compositions\":[\"BaseStore\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:desc"}, {"predicate": "has_class_property", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:store"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/role.py:Role"}, {"predicate": "is_composite_of", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/document_store/base_store.py:BaseStore"}, {"predicate": "has_class_method", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/sales.py:Sales", "target": "metagpt/roles/sales.py:Sales:_set_store"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:Sales", "target": "{\"lineno\":19,\"end_lineno\":42,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Sales\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/sales.py:Sales", "target": "{\"name\":\"Sales\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"store\",\"visibility\":\"+\",\"value_type\":\"Optional[BaseStore]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sales.py:Sales", "target": "?:BaseStore"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:store", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sales.py:Sales:store", "target": "{\"name\":\"store\",\"type_\":\"Optional[BaseStore]\",\"default_\":\"\",\"description\":\"store : Optional[BaseStore]\",\"compositions\":[\"BaseStore\"]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/search_and_summarize.py", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "{\"name\":\"SearchAndSummarize\",\"package\":\"metagpt/actions/search_and_summarize.py:SearchAndSummarize\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content : Optional[str]\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"Optional[SearchEngineType]\",\"default_\":\"\",\"description\":\"engine : Optional[SearchEngineType]\",\"compositions\":[\"SearchEngineType\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"result\":{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]},\"search_func\":{\"name\":\"search_func\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_func : Optional[Any]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"context: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"system_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(context: list[Message], system_text): str\",\"aggregations\":[\"Message\"]},\"validate_engine_and_run_func\":{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}},\"compositions\":[\"SearchEngineType\",\"SearchEngine\"],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:content"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:engine"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:result"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine"}, {"predicate": "has_class_property", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_func"}, {"predicate": "has_class_method", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:validate_engine_and_run_func"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/tools:SearchEngineType"}, {"predicate": "is_composite_of", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "metagpt/tools/search_engine.py:SearchEngine"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "{\"lineno\":105,\"end_lineno\":150,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchAndSummarize\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "{\"name\":\"SearchAndSummarize\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngineType]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"result\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngine]\",\"default_value\":\"\"},{\"name\":\"search_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "?:SearchEngine"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize", "target": "?:SearchEngineType"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:content", "target": "{\"name\":\"content\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"content : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:engine", "target": "{\"name\":\"engine\",\"type_\":\"Optional[SearchEngineType]\",\"default_\":\"\",\"description\":\"engine : Optional[SearchEngineType]\",\"compositions\":[\"SearchEngineType\"]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:result", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:result", "target": "{\"name\":\"result\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"result : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine", "target": "{\"name\":\"search_engine\",\"type_\":\"Optional[SearchEngine]\",\"default_\":\"\",\"description\":\"search_engine : Optional[SearchEngine]\",\"compositions\":[\"SearchEngine\"]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_func", "target": "{\"name\":\"search_func\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_func : Optional[Any]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"list[Message]\",\"default_\":\"\",\"description\":\"context: list[Message]\",\"compositions\":[\"Message\"]},{\"name\":\"system_text\",\"type_\":\"\",\"default_\":\"\",\"description\":\"system_text\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(context: list[Message], system_text): str\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:validate_engine_and_run_func", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:validate_engine_and_run_func", "target": "{\"name\":\"validate_engine_and_run_func\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"validate_engine_and_run_func()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/search_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/search_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/search_config.py", "target": "metagpt/configs/search_config.py:SearchConfig"}, {"predicate": "is", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "{\"name\":\"SearchConfig\",\"package\":\"metagpt/configs/search_config.py:SearchConfig\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]},\"api_type\":{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]},\"cse_id\":{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/configs/search_config.py:SearchConfig:api_key"}, {"predicate": "has_class_property", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/configs/search_config.py:SearchConfig:api_type"}, {"predicate": "has_class_property", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/configs/search_config.py:SearchConfig:cse_id"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "{\"lineno\":12,\"end_lineno\":17,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/search_config.py:SearchConfig", "target": "{\"name\":\"SearchConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"api_type\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"cse_id\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/search_config.py:SearchConfig:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/search_config.py:SearchConfig:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"api_key : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/search_config.py:SearchConfig:api_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/search_config.py:SearchConfig:api_type", "target": "{\"name\":\"api_type\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_type\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/search_config.py:SearchConfig:cse_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/search_config.py:SearchConfig:cse_id", "target": "{\"name\":\"cse_id\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"cse_id : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine.py", "target": "metagpt/tools/search_engine.py:SearchEngine"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine.py", "target": "metagpt/tools/search_engine.py:SkSearchEngine"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "{\"name\":\"SearchEngine\",\"package\":\"metagpt/tools/search_engine.py:SearchEngine\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"Optional[SearchEngineType]\",\"default_\":\"\",\"description\":\"engine : Optional[SearchEngineType]\",\"compositions\":[\"SearchEngineType\"]},\"run_func\":{\"name\":\"run_func\",\"type_\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True]): str\",\"aggregations\":[]}},\"compositions\":[\"SearchEngineType\",\"Callable\",\"Coroutine\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:engine"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:run_func"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:run"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "?:Callable"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "?:Coroutine"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/actions/research.py:CollectLinks"}, {"predicate": "isCompositeOn", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/actions/research.py:CollectLinks:search_engine"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine"}, {"predicate": "isCompositeOn", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize"}, {"predicate": "isAggregateOn", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/actions/search_and_summarize.py:SearchAndSummarize:search_engine"}, {"predicate": "is_composite_of", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools:SearchEngineType"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "metagpt/tools/search_engine.py:SearchEngine:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "{\"lineno\":31,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchEngine\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "{\"name\":\"SearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"Optional[SearchEngineType]\",\"default_value\":\"\"},{\"name\":\"run_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine.py:SearchEngine", "target": "?:SearchEngineType"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:engine", "target": "{\"name\":\"engine\",\"type_\":\"Optional[SearchEngineType]\",\"default_\":\"\",\"description\":\"engine : Optional[SearchEngineType]\",\"compositions\":[\"SearchEngineType\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:run_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:run_func", "target": "{\"name\":\"run_func\",\"type_\":\"Optional[Callable[[str,int,bool],Coroutine[None,None,Union[str,list[str]]]]]\",\"default_\":\"\",\"description\":\"run_func : Optional[Callable[[str, int, bool], Coroutine[None, None, Union[str, list[str]]]]]\",\"compositions\":[\"Callable\",\"Coroutine\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SearchEngine:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"Literal[True]\",\"default_\":\"\",\"description\":\"as_string: Literal[True]\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: Literal[True]): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools", "target": ""}, {"predicate": "has_class", "source": "metagpt/tools", "target": "metagpt/tools:SearchEngineType"}, {"predicate": "has_class", "source": "metagpt/tools", "target": "metagpt/tools:WebBrowserEngineType"}, {"predicate": "is", "source": "metagpt/tools:SearchEngineType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools:SearchEngineType", "target": "{\"name\":\"SearchEngineType\",\"package\":\"metagpt/tools:SearchEngineType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/tools:SearchEngineType:name"}, {"predicate": "isCompositeOf", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/configs/search_config.py:SearchConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/configs/search_config.py:SearchConfig:api_type"}, {"predicate": "isCompositeOf", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/roles/searcher.py:Searcher"}, {"predicate": "isCompositeOn", "source": "metagpt/tools:SearchEngineType", "target": "metagpt/roles/searcher.py:Searcher:engine"}, {"predicate": "has_class_view", "source": "metagpt/tools:SearchEngineType", "target": "{\"name\":\"SearchEngineType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools:SearchEngineType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools:SearchEngineType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/searcher.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/searcher.py", "target": "metagpt/roles/searcher.py:Searcher"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher", "target": "{\"name\":\"Searcher\",\"package\":\"metagpt/roles/searcher.py:Searcher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"set_search_func\":{\"name\":\"set_search_func\",\"args\":[{\"name\":\"search_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_func\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_search_func(search_func)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:engine"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:profile"}, {"predicate": "has_class_method", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:set_search_func"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:_act_sp"}, {"predicate": "has_class_method", "source": "metagpt/roles/searcher.py:Searcher", "target": "metagpt/roles/searcher.py:Searcher:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:Searcher", "target": "{\"lineno\":22,\"end_lineno\":78,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Searcher\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/searcher.py:Searcher", "target": "{\"name\":\"Searcher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:engine", "target": "{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:set_search_func", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/searcher.py:Searcher:set_search_func", "target": "{\"name\":\"set_search_func\",\"args\":[{\"name\":\"search_func\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_func\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"set_search_func(search_func)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper"}, {"predicate": "has_class", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient"}, {"predicate": "has_function", "source": "metagpt/tools/web_browser_engine_selenium.py", "target": "metagpt/tools/web_browser_engine_selenium.py:_gen_get_driver_func"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "{\"name\":\"SeleniumWrapper\",\"package\":\"metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper\",\"attributes\":{\"browser_type\":{\"name\":\"browser_type\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]},\"executable_path\":{\"name\":\"executable_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executable_path\",\"compositions\":[]},\"executor\":{\"name\":\"executor\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executor : NoneType\",\"compositions\":[]},\"launch_args\":{\"name\":\"launch_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"launch_args\",\"compositions\":[]},\"loop\":{\"name\":\"loop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"loop : NoneType\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}},\"compositions\":[],\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:browser_type"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executable_path"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executor"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_args"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:loop"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:run"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "?:WebPage\\"}, {"predicate": "isAggregateOf", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "?:WebPage"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_run_precheck"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_scrape_website"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "{\"lineno\":22,\"end_lineno\":83,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SeleniumWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper", "target": "{\"name\":\"SeleniumWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browser_type\",\"visibility\":\"+\",\"value_type\":\"Literal['chrome','firefox','edge','ie']\",\"default_value\":\"\"},{\"name\":\"executable_path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"executor\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"launch_args\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"loop\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:browser_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:browser_type", "target": "{\"name\":\"browser_type\",\"type_\":\"Literal['chrome','firefox','edge','ie']\",\"default_\":\"\",\"description\":\"browser_type : Literal['chrome', 'firefox', 'edge', 'ie']\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executable_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executable_path", "target": "{\"name\":\"executable_path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executable_path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executor", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:executor", "target": "{\"name\":\"executor\",\"type_\":\"\",\"default_\":\"\",\"description\":\"executor : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:launch_args", "target": "{\"name\":\"launch_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"launch_args\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:loop", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:loop", "target": "{\"name\":\"loop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"loop : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\\\\|list[WebPage]\",\"description\":\"WebPage \\\\| list[WebPage]\",\"compositions\":[\"WebPage\",\"WebPage\\\\\"]},\"description\":\"run(url: str): WebPage \\\\| list[WebPage]\",\"aggregations\":[\"WebPage\\\\\",\"WebPage\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:SerializationMixin", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SerializationMixin", "target": "{\"name\":\"SerializationMixin\",\"package\":\"metagpt/schema.py:SerializationMixin\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:SerializationMixin", "target": "metagpt/schema.py:SerializationMixin:__serialize_with_class_type__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:SerializationMixin", "target": "metagpt/schema.py:SerializationMixin:__convert_to_real_type__"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:SerializationMixin", "target": "metagpt/schema.py:SerializationMixin:__init_subclass__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:SerializationMixin", "target": "{\"lineno\":60,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerializationMixin\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:SerializationMixin", "target": "{\"name\":\"SerializationMixin\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_serpapi.py", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "{\"name\":\"SerpAPIWrapper\",\"package\":\"metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper\",\"attributes\":{\"aiosession\":{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"params\":{\"name\":\"params\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"params : dict\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_engine : Optional[Any]\",\"compositions\":[]},\"serpapi_api_key\":{\"name\":\"serpapi_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"serpapi_api_key : Optional[str]\",\"compositions\":[]}},\"methods\":{\"check_serpapi_api_key\":{\"name\":\"check_serpapi_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_serpapi_api_key(val: str)\",\"aggregations\":[]},\"get_params\":{\"name\":\"get_params\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_params(query: str): Dict[str, str]\",\"aggregations\":[]},\"results\":{\"name\":\"results\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(query: str, max_results: int): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query, max_results: int, as_string: bool): str\",\"aggregations\":[]}},\"compositions\":[\"aiohttp.ClientSession\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:aiosession"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:model_config"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:params"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:search_engine"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:serpapi_api_key"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:check_serpapi_api_key"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:get_params"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:results"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:run"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "?:aiohttp.ClientSession"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:_process_response"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "{\"lineno\":16,\"end_lineno\":110,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerpAPIWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper", "target": "{\"name\":\"SerpAPIWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aiosession\",\"visibility\":\"+\",\"value_type\":\"Optional[aiohttp.ClientSession]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"params\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"},{\"name\":\"serpapi_api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:aiosession", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:aiosession", "target": "{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:params", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:params", "target": "{\"name\":\"params\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"params : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:search_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:search_engine", "target": "{\"name\":\"search_engine\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_engine : Optional[Any]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:serpapi_api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:serpapi_api_key", "target": "{\"name\":\"serpapi_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"serpapi_api_key : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:check_serpapi_api_key", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:check_serpapi_api_key", "target": "{\"name\":\"check_serpapi_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_serpapi_api_key(val: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:get_params", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:get_params", "target": "{\"name\":\"get_params\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_params(query: str): Dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:results", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:results", "target": "{\"name\":\"results\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(query: str, max_results: int): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"\",\"default_\":\"\",\"description\":\"query\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query, max_results: int, as_string: bool): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/search_engine_serper.py", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "{\"name\":\"SerperWrapper\",\"package\":\"metagpt/tools/search_engine_serper.py:SerperWrapper\",\"attributes\":{\"aiosession\":{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"payload\":{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]},\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_engine : Optional[Any]\",\"compositions\":[]},\"serper_api_key\":{\"name\":\"serper_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"serper_api_key : Optional[str]\",\"compositions\":[]}},\"methods\":{\"check_serper_api_key\":{\"name\":\"check_serper_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_serper_api_key(val: str)\",\"aggregations\":[]},\"get_headers\":{\"name\":\"get_headers\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_headers(): Dict[str, str]\",\"aggregations\":[]},\"get_payloads\":{\"name\":\"get_payloads\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_payloads(queries: list[str], max_results: int): Dict[str, str]\",\"aggregations\":[]},\"results\":{\"name\":\"results\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(queries: list[str], max_results: int): dict\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: bool): str\",\"aggregations\":[]}},\"compositions\":[\"aiohttp.ClientSession\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:aiosession"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:model_config"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:payload"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:search_engine"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:serper_api_key"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:check_serper_api_key"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_headers"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_payloads"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:results"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:run"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "?:aiohttp.ClientSession"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "metagpt/tools/search_engine_serper.py:SerperWrapper:_process_response"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "{\"lineno\":17,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SerperWrapper\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper", "target": "{\"name\":\"SerperWrapper\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aiosession\",\"visibility\":\"+\",\"value_type\":\"Optional[aiohttp.ClientSession]\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"payload\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"},{\"name\":\"serper_api_key\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:aiosession", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:aiosession", "target": "{\"name\":\"aiosession\",\"type_\":\"Optional[aiohttp.ClientSession]\",\"default_\":\"\",\"description\":\"aiosession : Optional[aiohttp.ClientSession]\",\"compositions\":[\"aiohttp.ClientSession\"]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:payload", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:payload", "target": "{\"name\":\"payload\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"payload : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:search_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:search_engine", "target": "{\"name\":\"search_engine\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"search_engine : Optional[Any]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:serper_api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:serper_api_key", "target": "{\"name\":\"serper_api_key\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"serper_api_key : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:check_serper_api_key", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:check_serper_api_key", "target": "{\"name\":\"check_serper_api_key\",\"args\":[{\"name\":\"val\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"val: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_serper_api_key(val: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_headers", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_headers", "target": "{\"name\":\"get_headers\",\"args\":[],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_headers(): Dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_payloads", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:get_payloads", "target": "{\"name\":\"get_payloads\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict[str,str]\",\"description\":\"Dict[str, str]\",\"compositions\":[]},\"description\":\"get_payloads(queries: list[str], max_results: int): Dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:results", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:results", "target": "{\"name\":\"results\",\"args\":[{\"name\":\"queries\",\"type_\":\"list[str]\",\"default_\":\"\",\"description\":\"queries: list[str]\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"results(queries: list[str], max_results: int): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]},{\"name\":\"max_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_results: int\",\"compositions\":[]},{\"name\":\"as_string\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"as_string: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str, max_results: int, as_string: bool): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:SimpleMessage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SimpleMessage", "target": "{\"name\":\"SimpleMessage\",\"package\":\"metagpt/schema.py:SimpleMessage\",\"attributes\":{\"content\":{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]},\"role\":{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:SimpleMessage", "target": "metagpt/schema.py:SimpleMessage:content"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:SimpleMessage", "target": "metagpt/schema.py:SimpleMessage:role"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:SimpleMessage", "target": "{\"lineno\":122,\"end_lineno\":124,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SimpleMessage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:SimpleMessage", "target": "{\"name\":\"SimpleMessage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"role\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:SimpleMessage:content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SimpleMessage:content", "target": "{\"name\":\"content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:SimpleMessage:role", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SimpleMessage:role", "target": "{\"name\":\"role\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"role : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/singleton.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/singleton.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/singleton.py", "target": "metagpt/utils/singleton.py:Singleton"}, {"predicate": "is", "source": "metagpt/utils/singleton.py:Singleton", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/singleton.py:Singleton", "target": "{\"name\":\"Singleton\",\"package\":\"metagpt/utils/singleton.py:Singleton\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/singleton.py:Singleton", "target": "metagpt/utils/singleton.py:Singleton:__call__"}, {"predicate": "has_page_info", "source": "metagpt/utils/singleton.py:Singleton", "target": "{\"lineno\":11,\"end_lineno\":22,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Singleton\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/singleton.py:Singleton", "target": "{\"name\":\"Singleton\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/sk_agent.py", "target": "metagpt/roles/sk_agent.py:SkAgent"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "{\"name\":\"SkAgent\",\"package\":\"metagpt/roles/sk_agent.py:SkAgent\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"import_semantic_skill_from_directory\":{\"name\":\"import_semantic_skill_from_directory\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_semantic_skill_from_directory : Callable\",\"compositions\":[\"Callable\"]},\"import_skill\":{\"name\":\"import_skill\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_skill : Callable\",\"compositions\":[\"Callable\"]},\"kernel\":{\"name\":\"kernel\",\"type_\":\"Kernel\",\"default_\":\"\",\"description\":\"kernel : Kernel\",\"compositions\":[\"Kernel\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"plan\":{\"name\":\"plan\",\"type_\":\"Plan\",\"default_\":\"\",\"description\":\"plan : Plan\",\"compositions\":[\"Plan\"]},\"planner\":{\"name\":\"planner\",\"type_\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_\":\"\",\"description\":\"planner : Optional[Union[BasicPlanner, SequentialPlanner, ActionPlanner]]\",\"compositions\":[\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"]},\"planner_cls\":{\"name\":\"planner_cls\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"planner_cls : Optional[Any]\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Callable\",\"Kernel\",\"Plan\",\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:import_semantic_skill_from_directory"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:import_skill"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:kernel"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:plan"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:planner"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:planner_cls"}, {"predicate": "has_class_property", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:profile"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:Callable"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:Kernel"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:Plan"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:ActionPlanner"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:BasicPlanner"}, {"predicate": "isCompositeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "?:SequentialPlanner"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "metagpt/roles/sk_agent.py:SkAgent:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "{\"lineno\":26,\"end_lineno\":87,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkAgent\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/sk_agent.py:SkAgent", "target": "{\"name\":\"SkAgent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"import_semantic_skill_from_directory\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"import_skill\",\"visibility\":\"+\",\"value_type\":\"Callable\",\"default_value\":\"\"},{\"name\":\"kernel\",\"visibility\":\"+\",\"value_type\":\"Kernel\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"plan\",\"visibility\":\"+\",\"value_type\":\"Plan\",\"default_value\":\"\"},{\"name\":\"planner\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_value\":\"\"},{\"name\":\"planner_cls\",\"visibility\":\"+\",\"value_type\":\"Optional[Any]\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:import_semantic_skill_from_directory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:import_semantic_skill_from_directory", "target": "{\"name\":\"import_semantic_skill_from_directory\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_semantic_skill_from_directory : Callable\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:import_skill", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:import_skill", "target": "{\"name\":\"import_skill\",\"type_\":\"Callable\",\"default_\":\"\",\"description\":\"import_skill : Callable\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:kernel", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:kernel", "target": "{\"name\":\"kernel\",\"type_\":\"Kernel\",\"default_\":\"\",\"description\":\"kernel : Kernel\",\"compositions\":[\"Kernel\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:plan", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:plan", "target": "{\"name\":\"plan\",\"type_\":\"Plan\",\"default_\":\"\",\"description\":\"plan : Plan\",\"compositions\":[\"Plan\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:planner", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:planner", "target": "{\"name\":\"planner\",\"type_\":\"Optional[Union[BasicPlanner,SequentialPlanner,ActionPlanner]]\",\"default_\":\"\",\"description\":\"planner : Optional[Union[BasicPlanner, SequentialPlanner, ActionPlanner]]\",\"compositions\":[\"ActionPlanner\",\"BasicPlanner\",\"SequentialPlanner\"]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:planner_cls", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:planner_cls", "target": "{\"name\":\"planner_cls\",\"type_\":\"Optional[Any]\",\"default_\":\"\",\"description\":\"planner_cls : Optional[Any]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/sk_agent.py:SkAgent:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "{\"name\":\"SkSearchEngine\",\"package\":\"metagpt/tools/search_engine.py:SkSearchEngine\",\"attributes\":{\"search_engine\":{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine:run"}, {"predicate": "has_class_method", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "metagpt/tools/search_engine.py:SkSearchEngine:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "{\"lineno\":16,\"end_lineno\":28,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkSearchEngine\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/search_engine.py:SkSearchEngine", "target": "{\"name\":\"SkSearchEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"search_engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SkSearchEngine:search_engine", "target": "{\"name\":\"search_engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"search_engine\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SkSearchEngine:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/search_engine.py:SkSearchEngine:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"query\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"query: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(query: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill", "target": "{\"name\":\"Skill\",\"package\":\"metagpt/learn/skill_loader.py:Skill\",\"attributes\":{\"arguments\":{\"name\":\"arguments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"arguments\",\"compositions\":[]},\"description\":{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]},\"examples\":{\"name\":\"examples\",\"type_\":\"List[Example]\",\"default_\":\"\",\"description\":\"examples : List[Example]\",\"compositions\":[\"Example\"]},\"id\":{\"name\":\"id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"id : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"parameters\":{\"name\":\"parameters\",\"type_\":\"Optional[Dict[str,Parameter]]\",\"default_\":\"\",\"description\":\"parameters : Optional[Dict[str, Parameter]]\",\"compositions\":[\"Parameter\"]},\"returns\":{\"name\":\"returns\",\"type_\":\"\",\"default_\":\"\",\"description\":\"returns\",\"compositions\":[]},\"x_prerequisite\":{\"name\":\"x_prerequisite\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"x_prerequisite : Dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[\"Example\",\"Parameter\"],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:arguments"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:description"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:examples"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:id"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:name"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:parameters"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:returns"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Skill:x_prerequisite"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction"}, {"predicate": "isCompositeOn", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/actions/skill_action.py:ArgumentsParingAction:skill"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/actions/skill_action.py:SkillAction"}, {"predicate": "isCompositeOn", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/actions/skill_action.py:SkillAction:skill"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Example"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:Skill", "target": "metagpt/learn/skill_loader.py:Parameter"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:Skill", "target": "{\"lineno\":34,\"end_lineno\":50,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Skill\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:Skill", "target": "{\"name\":\"Skill\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"arguments\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"description\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"examples\",\"visibility\":\"+\",\"value_type\":\"List[Example]\",\"default_value\":\"\"},{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"parameters\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict[str,Parameter]]\",\"default_value\":\"\"},{\"name\":\"returns\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"x_prerequisite\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Skill", "target": "?:Example"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:Skill", "target": "?:Parameter"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:arguments", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:arguments", "target": "{\"name\":\"arguments\",\"type_\":\"\",\"default_\":\"\",\"description\":\"arguments\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:arguments", "target": "class_method"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:description", "target": "{\"name\":\"description\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"description : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:examples", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:examples", "target": "{\"name\":\"examples\",\"type_\":\"List[Example]\",\"default_\":\"\",\"description\":\"examples : List[Example]\",\"compositions\":[\"Example\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:id", "target": "{\"name\":\"id\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"id : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:parameters", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:parameters", "target": "{\"name\":\"parameters\",\"type_\":\"Optional[Dict[str,Parameter]]\",\"default_\":\"\",\"description\":\"parameters : Optional[Dict[str, Parameter]]\",\"compositions\":[\"Parameter\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:returns", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:returns", "target": "{\"name\":\"returns\",\"type_\":\"\",\"default_\":\"\",\"description\":\"returns\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:Skill:x_prerequisite", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:Skill:x_prerequisite", "target": "{\"name\":\"x_prerequisite\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"x_prerequisite : Dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "{\"name\":\"SkillAction\",\"package\":\"metagpt/actions/skill_action.py:SkillAction\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"args : Dict\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]},\"skill\":{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}},\"methods\":{\"find_and_call_function\":{\"name\":\"find_and_call_function\",\"args\":[{\"name\":\"function_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"function_name\",\"compositions\":[]},{\"name\":\"args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"args\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"find_and_call_function(function_name, args): str\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:args"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:rsp"}, {"predicate": "has_class_property", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:skill"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:find_and_call_function"}, {"predicate": "has_class_method", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/skill_action.py:SkillAction:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "{\"lineno\":82,\"end_lineno\":112,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillAction\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "{\"name\":\"SkillAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"Dict\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"},{\"name\":\"skill\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/skill_action.py:SkillAction", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:args", "target": "{\"name\":\"args\",\"type_\":\"Dict\",\"default_\":\"\",\"description\":\"args : Dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:rsp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:rsp", "target": "{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:skill", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:skill", "target": "{\"name\":\"skill\",\"type_\":\"\",\"default_\":\"\",\"description\":\"skill\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:find_and_call_function", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:find_and_call_function", "target": "{\"name\":\"find_and_call_function\",\"args\":[{\"name\":\"function_name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"function_name\",\"compositions\":[]},{\"name\":\"args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"args\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"find_and_call_function(function_name, args): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/skill_action.py:SkillAction:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/skill_action.py:SkillAction:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/management/skill_manager.py", "target": "metagpt/management/skill_manager.py:SkillManager"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "{\"name\":\"SkillManager\",\"package\":\"metagpt/management/skill_manager.py:SkillManager\",\"attributes\":{},\"methods\":{\"add_skill\":{\"name\":\"add_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_skill(skill: Skill)\",\"aggregations\":[\"Skill\"]},\"del_skill\":{\"name\":\"del_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"del_skill(skill_name: str)\",\"aggregations\":[]},\"generate_skill_desc\":{\"name\":\"generate_skill_desc\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_skill_desc(skill: Skill): str\",\"aggregations\":[\"Skill\"]},\"get_skill\":{\"name\":\"get_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(skill_name: str): Skill\",\"aggregations\":[\"Skill\"]},\"retrieve_skill\":{\"name\":\"retrieve_skill\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Skill]\",\"description\":\"list[Skill]\",\"compositions\":[\"Skill\"]},\"description\":\"retrieve_skill(desc: str, n_results: int): list[Skill]\",\"aggregations\":[\"Skill\"]},\"retrieve_skill_scored\":{\"name\":\"retrieve_skill_scored\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"retrieve_skill_scored(desc: str, n_results: int): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Skill\"]}"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:add_skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:del_skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:generate_skill_desc"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:get_skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill_scored"}, {"predicate": "isAggregateOf", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "?:Skill"}, {"predicate": "has_class_method", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "metagpt/management/skill_manager.py:SkillManager:__init__"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "{\"lineno\":17,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/management/skill_manager.py:SkillManager", "target": "{\"name\":\"SkillManager\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:add_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:add_skill", "target": "{\"name\":\"add_skill\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"add_skill(skill: Skill)\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:del_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:del_skill", "target": "{\"name\":\"del_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"del_skill(skill_name: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:generate_skill_desc", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:generate_skill_desc", "target": "{\"name\":\"generate_skill_desc\",\"args\":[{\"name\":\"skill\",\"type_\":\"Skill\",\"default_\":\"\",\"description\":\"skill: Skill\",\"compositions\":[\"Skill\"]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"generate_skill_desc(skill: Skill): str\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:get_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:get_skill", "target": "{\"name\":\"get_skill\",\"args\":[{\"name\":\"skill_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skill_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(skill_name: str): Skill\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill", "target": "{\"name\":\"retrieve_skill\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[Skill]\",\"description\":\"list[Skill]\",\"compositions\":[\"Skill\"]},\"description\":\"retrieve_skill(desc: str, n_results: int): list[Skill]\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill_scored", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/management/skill_manager.py:SkillManager:retrieve_skill_scored", "target": "{\"name\":\"retrieve_skill_scored\",\"args\":[{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc: str\",\"compositions\":[]},{\"name\":\"n_results\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_results: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"retrieve_skill_scored(desc: str, n_results: int): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "{\"name\":\"SkillsDeclaration\",\"package\":\"metagpt/learn/skill_loader.py:SkillsDeclaration\",\"attributes\":{\"components\":{\"name\":\"components\",\"type_\":\"Optional[Components]\",\"default_\":\"\",\"description\":\"components : Optional[Components]\",\"compositions\":[\"Components\"]},\"entities\":{\"name\":\"entities\",\"type_\":\"Dict[str,Entity]\",\"default_\":\"\",\"description\":\"entities : Dict[str, Entity]\",\"compositions\":[\"Entity\"]},\"skillapi\":{\"name\":\"skillapi\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skillapi : str\",\"compositions\":[]}},\"methods\":{\"get_skill\":{\"name\":\"get_skill\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(name, entity_name: str): Skill\",\"aggregations\":[\"Skill\"]},\"get_skill_list\":{\"name\":\"get_skill_list\",\"args\":[{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"get_skill_list(entity_name: str, context: Context): Dict\",\"aggregations\":[\"Context\"]},\"load\":{\"name\":\"load\",\"args\":[{\"name\":\"skill_yaml_file_name\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"skill_yaml_file_name: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'SkillsDeclaration'\",\"description\":\"'SkillsDeclaration'\",\"compositions\":[\"SkillsDeclaration\"]},\"description\":\"load(skill_yaml_file_name: Path): 'SkillsDeclaration'\",\"aggregations\":[\"SkillsDeclaration\",\"Path\"]}},\"compositions\":[\"Components\",\"Entity\"],\"aggregations\":[\"Skill\",\"Context\",\"SkillsDeclaration\",\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:components"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:entities"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:skillapi"}, {"predicate": "has_class_method", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill"}, {"predicate": "has_class_method", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list"}, {"predicate": "has_class_method", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:load"}, {"predicate": "isAggregateOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Skill"}, {"predicate": "isAggregateOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Context"}, {"predicate": "isAggregateOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:SkillsDeclaration"}, {"predicate": "isAggregateOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Path"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:Components"}, {"predicate": "is_composite_of", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "metagpt/learn/skill_loader.py:Entity"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "{\"lineno\":62,\"end_lineno\":101,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SkillsDeclaration\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "{\"name\":\"SkillsDeclaration\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"components\",\"visibility\":\"+\",\"value_type\":\"Optional[Components]\",\"default_value\":\"\"},{\"name\":\"entities\",\"visibility\":\"+\",\"value_type\":\"Dict[str,Entity]\",\"default_value\":\"\"},{\"name\":\"skillapi\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Components"}, {"predicate": "isCompositeOf", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration", "target": "?:Entity"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:components", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:components", "target": "{\"name\":\"components\",\"type_\":\"Optional[Components]\",\"default_\":\"\",\"description\":\"components : Optional[Components]\",\"compositions\":[\"Components\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:entities", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:entities", "target": "{\"name\":\"entities\",\"type_\":\"Dict[str,Entity]\",\"default_\":\"\",\"description\":\"entities : Dict[str, Entity]\",\"compositions\":[\"Entity\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:skillapi", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:skillapi", "target": "{\"name\":\"skillapi\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"skillapi : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill", "target": "{\"name\":\"get_skill\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Skill\",\"description\":\"Skill\",\"compositions\":[\"Skill\"]},\"description\":\"get_skill(name, entity_name: str): Skill\",\"aggregations\":[\"Skill\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list", "target": "{\"name\":\"get_skill_list\",\"args\":[{\"name\":\"entity_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"entity_name: str\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"get_skill_list(entity_name: str, context: Context): Dict\",\"aggregations\":[\"Context\"]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:load", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:load", "target": "{\"name\":\"load\",\"args\":[{\"name\":\"skill_yaml_file_name\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"skill_yaml_file_name: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'SkillsDeclaration'\",\"description\":\"'SkillsDeclaration'\",\"compositions\":[\"SkillsDeclaration\"]},\"description\":\"load(skill_yaml_file_name: Path): 'SkillsDeclaration'\",\"aggregations\":[\"SkillsDeclaration\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "{\"name\":\"SparkLLM\",\"package\":\"metagpt/provider/spark_api.py:SparkLLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]},\"get_choice_text\":{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:config"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:get_choice_text"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "metagpt/provider/spark_api.py:SparkLLM:__init__"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "{\"lineno\":26,\"end_lineno\":43,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SparkLLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/spark_api.py:SparkLLM", "target": "{\"name\":\"SparkLLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"timeout: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:get_choice_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:SparkLLM:get_choice_text", "target": "{\"name\":\"get_choice_text\",\"args\":[{\"name\":\"rsp\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"rsp: dict\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_choice_text(rsp: dict): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "{\"name\":\"Strategy\",\"package\":\"metagpt/strategy/tot_schema.py:Strategy\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "metagpt/strategy/tot_schema.py:Strategy:name"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "metagpt/strategy/tot.py:TreeofThought:strategy"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "{\"lineno\":17,\"end_lineno\":20,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Strategy\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot_schema.py:Strategy", "target": "{\"name\":\"Strategy\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:Strategy:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:Strategy:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/subscription.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/subscription.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/subscription.py", "target": "metagpt/subscription.py:SubscriptionRunner"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "{\"name\":\"SubscriptionRunner\",\"package\":\"metagpt/subscription.py:SubscriptionRunner\",\"attributes\":{\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"tasks\":{\"name\":\"tasks\",\"type_\":\"dict[Role,asyncio.Task]\",\"default_\":\"\",\"description\":\"tasks : dict[Role, asyncio.Task]\",\"compositions\":[\"Role\",\"asyncio.Task\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"raise_exception\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"raise_exception: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(raise_exception: bool)\",\"aggregations\":[]},\"subscribe\":{\"name\":\"subscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]},{\"name\":\"trigger\",\"type_\":\"AsyncGenerator[Message,None]\",\"default_\":\"\",\"description\":\"trigger: AsyncGenerator[Message, None]\",\"compositions\":[\"AsyncGenerator\",\"Message\"]},{\"name\":\"callback\",\"type_\":\"Callable[[Message],Awaitable[None]]\",\"default_\":\"\",\"description\":\"callback: Callable[[Message], Awaitable[None]]\",\"compositions\":[\"Awaitable\",\"Callable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"subscribe(role: Role, trigger: AsyncGenerator[Message, None], callback: Callable[[Message], Awaitable[None]])\",\"aggregations\":[\"Awaitable\",\"Message\",\"Role\",\"Callable\",\"AsyncGenerator\"]},\"unsubscribe\":{\"name\":\"unsubscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"unsubscribe(role: Role)\",\"aggregations\":[\"Role\"]}},\"compositions\":[\"Role\",\"asyncio.Task\"],\"aggregations\":[\"Awaitable\",\"Message\",\"Callable\",\"AsyncGenerator\"]}"}, {"predicate": "has_class_property", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:model_config"}, {"predicate": "has_class_property", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:tasks"}, {"predicate": "has_class_method", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:run"}, {"predicate": "has_class_method", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:subscribe"}, {"predicate": "has_class_method", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/subscription.py:SubscriptionRunner:unsubscribe"}, {"predicate": "isCompositeOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:asyncio.Task"}, {"predicate": "isAggregateOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:Awaitable"}, {"predicate": "isAggregateOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:Message"}, {"predicate": "isAggregateOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:Callable"}, {"predicate": "isAggregateOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:AsyncGenerator"}, {"predicate": "is_composite_of", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "{\"lineno\":11,\"end_lineno\":100,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SubscriptionRunner\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "{\"name\":\"SubscriptionRunner\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"tasks\",\"visibility\":\"+\",\"value_type\":\"dict[Role,asyncio.Task]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/subscription.py:SubscriptionRunner", "target": "?:Role"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:tasks", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:tasks", "target": "{\"name\":\"tasks\",\"type_\":\"dict[Role,asyncio.Task]\",\"default_\":\"\",\"description\":\"tasks : dict[Role, asyncio.Task]\",\"compositions\":[\"Role\",\"asyncio.Task\"]}"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"raise_exception\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"raise_exception: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(raise_exception: bool)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:subscribe", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:subscribe", "target": "{\"name\":\"subscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]},{\"name\":\"trigger\",\"type_\":\"AsyncGenerator[Message,None]\",\"default_\":\"\",\"description\":\"trigger: AsyncGenerator[Message, None]\",\"compositions\":[\"AsyncGenerator\",\"Message\"]},{\"name\":\"callback\",\"type_\":\"Callable[[Message],Awaitable[None]]\",\"default_\":\"\",\"description\":\"callback: Callable[[Message], Awaitable[None]]\",\"compositions\":[\"Awaitable\",\"Callable\",\"Message\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"subscribe(role: Role, trigger: AsyncGenerator[Message, None], callback: Callable[[Message], Awaitable[None]])\",\"aggregations\":[\"Awaitable\",\"Message\",\"Role\",\"Callable\",\"AsyncGenerator\"]}"}, {"predicate": "is", "source": "metagpt/subscription.py:SubscriptionRunner:unsubscribe", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/subscription.py:SubscriptionRunner:unsubscribe", "target": "{\"name\":\"unsubscribe\",\"args\":[{\"name\":\"role\",\"type_\":\"Role\",\"default_\":\"\",\"description\":\"role: Role\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"unsubscribe(role: Role)\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/summarize_code.py", "target": "metagpt/actions/summarize_code.py:SummarizeCode"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "{\"name\":\"SummarizeCode\",\"package\":\"metagpt/actions/summarize_code.py:SummarizeCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]},\"summarize_code\":{\"name\":\"summarize_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_code(prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/summarize_code.py:SummarizeCode:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/summarize_code.py:SummarizeCode:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/summarize_code.py:SummarizeCode:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/summarize_code.py:SummarizeCode:summarize_code"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "{\"lineno\":90,\"end_lineno\":119,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SummarizeCode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/summarize_code.py:SummarizeCode", "target": "{\"name\":\"SummarizeCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:SummarizeCode:summarize_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/summarize_code.py:SummarizeCode:summarize_code", "target": "{\"name\":\"summarize_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"summarize_code(prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:SystemMessage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:SystemMessage", "target": "{\"name\":\"SystemMessage\",\"package\":\"metagpt/schema.py:SystemMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:SystemMessage", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:SystemMessage", "target": "metagpt/schema.py:SystemMessage:__init__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:SystemMessage", "target": "{\"lineno\":316,\"end_lineno\":322,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SystemMessage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:SystemMessage", "target": "{\"name\":\"SystemMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/talk_action.py", "target": "metagpt/actions/talk_action.py:TalkAction"}, {"predicate": "has_class", "source": "metagpt/actions/talk_action.py", "target": "metagpt/actions/talk_action.py:TalkActionPrompt"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "{\"name\":\"TalkAction\",\"package\":\"metagpt/actions/talk_action.py:TalkAction\",\"attributes\":{\"aask_args\":{\"name\":\"aask_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"aask_args\",\"compositions\":[]},\"agent_description\":{\"name\":\"agent_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"agent_description\",\"compositions\":[]},\"history_summary\":{\"name\":\"history_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history_summary : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"i_context : str\",\"compositions\":[]},\"knowledge\":{\"name\":\"knowledge\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"knowledge : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"\",\"default_\":\"\",\"description\":\"language\",\"compositions\":[]},\"prompt\":{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]},\"prompt_gpt4\":{\"name\":\"prompt_gpt4\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_gpt4\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[\"Message\"],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:aask_args"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:agent_description"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:history_summary"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:knowledge"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:language"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:prompt"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:rsp"}, {"predicate": "has_class_method", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/talk_action.py:TalkAction:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "metagpt/schema.py:Message"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "{\"lineno\":17,\"end_lineno\":97,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TalkAction\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "{\"name\":\"TalkAction\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"aask_args\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"agent_description\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"history_summary\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"knowledge\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"prompt_gpt4\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[Message]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/talk_action.py:TalkAction", "target": "?:Message"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:aask_args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:aask_args", "target": "{\"name\":\"aask_args\",\"type_\":\"\",\"default_\":\"\",\"description\":\"aask_args\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:aask_args", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:agent_description", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:agent_description", "target": "{\"name\":\"agent_description\",\"type_\":\"\",\"default_\":\"\",\"description\":\"agent_description\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:agent_description", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:history_summary", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:history_summary", "target": "{\"name\":\"history_summary\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"history_summary : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"i_context : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:knowledge", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:knowledge", "target": "{\"name\":\"knowledge\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"knowledge : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:language", "target": "{\"name\":\"language\",\"type_\":\"\",\"default_\":\"\",\"description\":\"language\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:language", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:prompt", "target": "{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:prompt", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4", "target": "{\"name\":\"prompt_gpt4\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_gpt4\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:prompt_gpt4", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:rsp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:rsp", "target": "{\"name\":\"rsp\",\"type_\":\"Optional[Message]\",\"default_\":\"\",\"description\":\"rsp : Optional[Message]\",\"compositions\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkAction:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkAction:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"run(with_message): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "{\"name\":\"TalkActionPrompt\",\"package\":\"metagpt/actions/talk_action.py:TalkActionPrompt\",\"attributes\":{\"FORMATION\":{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]},\"FORMATION_LOOSE\":{\"name\":\"FORMATION_LOOSE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION_LOOSE : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION"}, {"predicate": "has_class_property", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION_LOOSE"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "{\"lineno\":100,\"end_lineno\":169,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TalkActionPrompt\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/talk_action.py:TalkActionPrompt", "target": "{\"name\":\"TalkActionPrompt\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"FORMATION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FORMATION_LOOSE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION", "target": "{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION_LOOSE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/talk_action.py:TalkActionPrompt:FORMATION_LOOSE", "target": "{\"name\":\"FORMATION_LOOSE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION_LOOSE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:Task", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:Task", "target": "{\"name\":\"Task\",\"package\":\"metagpt/actions/action_node.py:Task\",\"attributes\":{\"dependent_task_ids\":{\"name\":\"dependent_task_ids\",\"type_\":\"List[int]\",\"default_\":\"\",\"description\":\"dependent_task_ids : List[int]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"task_id\":{\"name\":\"task_id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"task_id : int\",\"compositions\":[]},\"tool\":{\"name\":\"tool\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:Task", "target": "metagpt/actions/action_node.py:Task:dependent_task_ids"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:Task", "target": "metagpt/actions/action_node.py:Task:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:Task", "target": "metagpt/actions/action_node.py:Task:task_id"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:Task", "target": "metagpt/actions/action_node.py:Task:tool"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:Task", "target": "{\"lineno\":673,\"end_lineno\":677,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Task\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_node.py:Task", "target": "{\"name\":\"Task\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"dependent_task_ids\",\"visibility\":\"+\",\"value_type\":\"List[int]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"task_id\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"tool\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:Task:dependent_task_ids", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:Task:dependent_task_ids", "target": "{\"name\":\"dependent_task_ids\",\"type_\":\"List[int]\",\"default_\":\"\",\"description\":\"dependent_task_ids : List[int]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:Task:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:Task:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:Task:task_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:Task:task_id", "target": "{\"name\":\"task_id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"task_id : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:Task:tool", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:Task:tool", "target": "{\"name\":\"tool\",\"type_\":\"\",\"default_\":\"\",\"description\":\"tool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:Tasks", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:Tasks", "target": "{\"name\":\"Tasks\",\"package\":\"metagpt/actions/action_node.py:Tasks\",\"attributes\":{\"tasks\":{\"name\":\"tasks\",\"type_\":\"List[Task]\",\"default_\":\"\",\"description\":\"tasks : List[Task]\",\"compositions\":[\"Task\"]}},\"methods\":{},\"compositions\":[\"Task\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:Tasks", "target": "metagpt/actions/action_node.py:Tasks:tasks"}, {"predicate": "is_composite_of", "source": "metagpt/actions/action_node.py:Tasks", "target": "metagpt/actions/action_node.py:Task"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:Tasks", "target": "{\"lineno\":680,\"end_lineno\":681,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Tasks\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_node.py:Tasks", "target": "{\"name\":\"Tasks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"tasks\",\"visibility\":\"+\",\"value_type\":\"List[Task]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:Tasks", "target": "?:Task"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:Tasks:tasks", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:Tasks:tasks", "target": "{\"name\":\"tasks\",\"type_\":\"List[Task]\",\"default_\":\"\",\"description\":\"tasks : List[Task]\",\"compositions\":[\"Task\"]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/teacher.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/teacher.py", "target": "metagpt/roles/teacher.py:Teacher"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher", "target": "{\"name\":\"Teacher\",\"package\":\"metagpt/roles/teacher.py:Teacher\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"course_title\":{\"name\":\"course_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"course_title\",\"compositions\":[]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}},\"methods\":{\"new_file_name\":{\"name\":\"new_file_name\",\"args\":[{\"name\":\"lesson_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lesson_title\",\"compositions\":[]},{\"name\":\"ext\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ext\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_file_name(lesson_title, ext)\",\"aggregations\":[]},\"save\":{\"name\":\"save\",\"args\":[{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(content)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:constraints"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:course_title"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:desc"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:profile"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:new_file_name"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:save"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:_think"}, {"predicate": "has_class_method", "source": "metagpt/roles/teacher.py:Teacher", "target": "metagpt/roles/teacher.py:Teacher:_react"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:Teacher", "target": "{\"lineno\":22,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Teacher\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/teacher.py:Teacher", "target": "{\"name\":\"Teacher\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"course_title\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:course_title", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:course_title", "target": "{\"name\":\"course_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"course_title\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:course_title", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:new_file_name", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:new_file_name", "target": "{\"name\":\"new_file_name\",\"args\":[{\"name\":\"lesson_title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lesson_title\",\"compositions\":[]},{\"name\":\"ext\",\"type_\":\"\",\"default_\":\"\",\"description\":\"ext\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"new_file_name(lesson_title, ext)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/teacher.py:Teacher:save", "target": "{\"name\":\"save\",\"args\":[{\"name\":\"content\",\"type_\":\"\",\"default_\":\"\",\"description\":\"content\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"save(content)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_teaching_plan.py", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock"}, {"predicate": "has_class", "source": "metagpt/actions/write_teaching_plan.py", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "{\"name\":\"TeachingPlanBlock\",\"package\":\"metagpt/actions/write_teaching_plan.py:TeachingPlanBlock\",\"attributes\":{\"COURSE_TITLE\":{\"name\":\"COURSE_TITLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"COURSE_TITLE : str\",\"compositions\":[]},\"DATA_BEGIN_TAG\":{\"name\":\"DATA_BEGIN_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_BEGIN_TAG : str\",\"compositions\":[]},\"DATA_END_TAG\":{\"name\":\"DATA_END_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_END_TAG : str\",\"compositions\":[]},\"FORMATION\":{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]},\"PROMPT_TEMPLATE\":{\"name\":\"PROMPT_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TEMPLATE : str\",\"compositions\":[]},\"PROMPT_TITLE_TEMPLATE\":{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TITLE_TEMPLATE : str\",\"compositions\":[]},\"TOPICS\":{\"name\":\"TOPICS\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"TOPICS : list\",\"compositions\":[]},\"TOPIC_STATEMENTS\":{\"name\":\"TOPIC_STATEMENTS\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"TOPIC_STATEMENTS : dict\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:COURSE_TITLE"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_BEGIN_TAG"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_END_TAG"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:FORMATION"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TEMPLATE"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TITLE_TEMPLATE"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPICS"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPIC_STATEMENTS"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "{\"lineno\":92,\"end_lineno\":191,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TeachingPlanBlock\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock", "target": "{\"name\":\"TeachingPlanBlock\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"COURSE_TITLE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"DATA_BEGIN_TAG\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"DATA_END_TAG\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"FORMATION\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"PROMPT_TEMPLATE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"TOPICS\",\"visibility\":\"+\",\"value_type\":\"list\",\"default_value\":\"\"},{\"name\":\"TOPIC_STATEMENTS\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:COURSE_TITLE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:COURSE_TITLE", "target": "{\"name\":\"COURSE_TITLE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"COURSE_TITLE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_BEGIN_TAG", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_BEGIN_TAG", "target": "{\"name\":\"DATA_BEGIN_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_BEGIN_TAG : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_END_TAG", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:DATA_END_TAG", "target": "{\"name\":\"DATA_END_TAG\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"DATA_END_TAG : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:FORMATION", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:FORMATION", "target": "{\"name\":\"FORMATION\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"FORMATION : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TEMPLATE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TEMPLATE", "target": "{\"name\":\"PROMPT_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TEMPLATE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TITLE_TEMPLATE", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:PROMPT_TITLE_TEMPLATE", "target": "{\"name\":\"PROMPT_TITLE_TEMPLATE\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"PROMPT_TITLE_TEMPLATE : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPICS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPICS", "target": "{\"name\":\"TOPICS\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"TOPICS : list\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPIC_STATEMENTS", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:TeachingPlanBlock:TOPIC_STATEMENTS", "target": "{\"name\":\"TOPIC_STATEMENTS\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"TOPIC_STATEMENTS : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/team.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/team.py", "target": "metagpt/team.py:Team"}, {"predicate": "is", "source": "metagpt/team.py:Team", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team", "target": "{\"name\":\"Team\",\"package\":\"metagpt/team.py:Team\",\"attributes\":{\"cost_manager\":{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]},\"env\":{\"name\":\"env\",\"type_\":\"Optional[Environment]\",\"default_\":\"\",\"description\":\"env : Optional[Environment]\",\"compositions\":[\"Environment\"]},\"idea\":{\"name\":\"idea\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"idea : str\",\"compositions\":[]},\"investment\":{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment : float\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}},\"methods\":{\"deserialize\":{\"name\":\"deserialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"'Team'\",\"description\":\"'Team'\",\"compositions\":[\"Team\"]},\"description\":\"deserialize(stg_path: Path, context: Context): 'Team'\",\"aggregations\":[\"Team\",\"Context\",\"Path\"]},\"hire\":{\"name\":\"hire\",\"args\":[{\"name\":\"roles\",\"type_\":\"list[Role]\",\"default_\":\"\",\"description\":\"roles: list[Role]\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"hire(roles: list[Role])\",\"aggregations\":[\"Role\"]},\"invest\":{\"name\":\"invest\",\"args\":[{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment: float\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"invest(investment: float)\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"n_round\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_round\",\"compositions\":[]},{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"\",\"default_\":\"\",\"description\":\"send_to\",\"compositions\":[]},{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(n_round, idea, send_to, auto_archive)\",\"aggregations\":[]},\"run_project\":{\"name\":\"run_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_project(idea, send_to: str)\",\"aggregations\":[]},\"serialize\":{\"name\":\"serialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"serialize(stg_path: Path)\",\"aggregations\":[\"Path\"]},\"start_project\":{\"name\":\"start_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"start_project(idea, send_to: str)\",\"aggregations\":[]}},\"compositions\":[\"Environment\"],\"aggregations\":[\"Team\",\"Context\",\"Path\",\"Role\"]}"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:cost_manager"}, {"predicate": "has_class_property", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:env"}, {"predicate": "has_class_property", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:idea"}, {"predicate": "has_class_property", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:investment"}, {"predicate": "has_class_property", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:model_config"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:deserialize"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:hire"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:invest"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:run"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:run_project"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:serialize"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:start_project"}, {"predicate": "isAggregateOf", "source": "metagpt/team.py:Team", "target": "?:Team"}, {"predicate": "isAggregateOf", "source": "metagpt/team.py:Team", "target": "?:Context"}, {"predicate": "isAggregateOf", "source": "metagpt/team.py:Team", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/team.py:Team", "target": "?:Role"}, {"predicate": "is_composite_of", "source": "metagpt/team.py:Team", "target": "metagpt/environment.py:Environment"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:__init__"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:_check_balance"}, {"predicate": "has_class_method", "source": "metagpt/team.py:Team", "target": "metagpt/team.py:Team:_save"}, {"predicate": "has_page_info", "source": "metagpt/team.py:Team", "target": "{\"lineno\":32,\"end_lineno\":136,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Team\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/team.py:Team", "target": "{\"name\":\"Team\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"cost_manager\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"env\",\"visibility\":\"+\",\"value_type\":\"Optional[Environment]\",\"default_value\":\"\"},{\"name\":\"idea\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"investment\",\"visibility\":\"+\",\"value_type\":\"float\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/team.py:Team", "target": "?:Environment"}, {"predicate": "has_class_use_case", "source": "metagpt/team.py:Team", "target": "{\"description\":\"The source code defines a Team class that represents a team of agents working on a project. The team can hire roles, invest in the project, run and start a project, and run the company for a specified number of rounds.\",\"use_cases\":[{\"description\":\"Hire roles to cooperate\",\"inputs\":[\"roles\"],\"outputs\":[],\"actors\":[\"Team\"],\"steps\":[\"The team hires roles to cooperate on the project.\"],\"reason\":\"When the team needs to add new roles to the project.\"},{\"description\":\"Invest company\",\"inputs\":[\"investment\"],\"outputs\":[],\"actors\":[\"Team\"],\"steps\":[\"The team invests in the company.\",\"If the investment exceeds the maximum budget, a NoMoneyException is raised.\"],\"reason\":\"When the team needs to invest in the company.\"},{\"description\":\"Run a project from publishing user requirement\",\"inputs\":[\"idea\",\"send_to\"],\"outputs\":[],\"actors\":[\"Team\"],\"steps\":[\"The team runs a project based on the user's requirement.\",\"The idea is published to the team's environment for further processing.\"],\"reason\":\"When the team needs to start a new project based on user requirements.\"},{\"description\":\"Run company until target round or no money\",\"inputs\":[\"n_round\",\"idea\",\"send_to\",\"auto_archive\"],\"outputs\":[\"history\"],\"actors\":[\"Team\"],\"steps\":[\"The team runs the company for a specified number of rounds.\",\"If an idea is provided, it is used to run a project.\",\"The company is run until the target round is reached or there is no money left.\",\"The environment is archived if auto_archive is set to true.\"],\"reason\":\"When the team needs to run the company for a specified number of rounds.\"}],\"relationship\":[\"The 'Hire roles to cooperate' use case is related to the 'Invest company' use case as hiring roles may require investment.\",\"The 'Run a project from publishing user requirement' use case is related to the 'Run company until target round or no money' use case as running a project is part of running the company.\"]}"}, {"predicate": "has_sequence_view", "source": "metagpt/team.py:Team", "target": "\nsequenceDiagram\n participant Team\n participant Role\n participant Environment\n participant Context\n participant Path\n\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n\n Note right of Team: The 'Hire roles to cooperate' use case is related to the 'Invest company' use case as hiring roles may require investment.\n Note right of Team: The 'Run a project from publishing user requirement' use case is related to the 'Run company until target round or no money' use case as running a project is part of running the company.\n"}, {"predicate": "is", "source": "metagpt/team.py:Team:cost_manager", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:cost_manager", "target": "{\"name\":\"cost_manager\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cost_manager\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:cost_manager", "target": "class_method"}, {"predicate": "is", "source": "metagpt/team.py:Team:env", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:env", "target": "{\"name\":\"env\",\"type_\":\"Optional[Environment]\",\"default_\":\"\",\"description\":\"env : Optional[Environment]\",\"compositions\":[\"Environment\"]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:idea", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:idea", "target": "{\"name\":\"idea\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"idea : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:investment", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:investment", "target": "{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment : float\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:deserialize", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:deserialize", "target": "{\"name\":\"deserialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"'Team'\",\"description\":\"'Team'\",\"compositions\":[\"Team\"]},\"description\":\"deserialize(stg_path: Path, context: Context): 'Team'\",\"aggregations\":[\"Team\",\"Context\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:hire", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:hire", "target": "{\"name\":\"hire\",\"args\":[{\"name\":\"roles\",\"type_\":\"list[Role]\",\"default_\":\"\",\"description\":\"roles: list[Role]\",\"compositions\":[\"Role\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"hire(roles: list[Role])\",\"aggregations\":[\"Role\"]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:invest", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:invest", "target": "{\"name\":\"invest\",\"args\":[{\"name\":\"investment\",\"type_\":\"float\",\"default_\":\"\",\"description\":\"investment: float\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"invest(investment: float)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"n_round\",\"type_\":\"\",\"default_\":\"\",\"description\":\"n_round\",\"compositions\":[]},{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"\",\"default_\":\"\",\"description\":\"send_to\",\"compositions\":[]},{\"name\":\"auto_archive\",\"type_\":\"\",\"default_\":\"\",\"description\":\"auto_archive\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(n_round, idea, send_to, auto_archive)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:run_project", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:run_project", "target": "{\"name\":\"run_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run_project(idea, send_to: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:serialize", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:serialize", "target": "{\"name\":\"serialize\",\"args\":[{\"name\":\"stg_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"stg_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"serialize(stg_path: Path)\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/team.py:Team:start_project", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/team.py:Team:start_project", "target": "{\"name\":\"start_project\",\"args\":[{\"name\":\"idea\",\"type_\":\"\",\"default_\":\"\",\"description\":\"idea\",\"compositions\":[]},{\"name\":\"send_to\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"send_to: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"start_project(idea, send_to: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TestingContext", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TestingContext", "target": "{\"name\":\"TestingContext\",\"package\":\"metagpt/schema.py:TestingContext\",\"attributes\":{\"code_doc\":{\"name\":\"code_doc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_doc\",\"compositions\":[]},\"filename\":{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]},\"test_doc\":{\"name\":\"test_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"test_doc : Optional[Document]\",\"compositions\":[\"Document\"]}},\"methods\":{},\"compositions\":[\"Document\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:TestingContext", "target": "metagpt/schema.py:TestingContext:code_doc"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:TestingContext", "target": "metagpt/schema.py:TestingContext:filename"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:TestingContext", "target": "metagpt/schema.py:TestingContext:test_doc"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:TestingContext", "target": "?:Document"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:TestingContext", "target": "metagpt/schema.py:BaseContext"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:TestingContext", "target": "{\"lineno\":425,\"end_lineno\":428,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TestingContext\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:TestingContext", "target": "{\"name\":\"TestingContext\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"code_doc\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"filename\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"test_doc\",\"visibility\":\"+\",\"value_type\":\"Optional[Document]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/schema.py:TestingContext", "target": "{\"description\":\"This source code defines a TestingContext class that contains a filename, code document, and an optional test document. The TestingContext is a subclass of BaseContext.\",\"use_cases\":[{\"description\":\"Create a new testing context\",\"inputs\":[\"filename\",\"code_doc\"],\"outputs\":[\"testing_context\"],\"actors\":[\"Tester\"],\"steps\":[\"The Tester provides a filename and a code document to the system\",\"The system creates a new TestingContext object with the provided filename and code document\",\"The system returns the created TestingContext object\"],\"reason\":\"When a Tester needs to create a new testing context for a specific code document\"}],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/schema.py:TestingContext", "target": "\nsequenceDiagram\n participant Tester\n participant System\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n"}, {"predicate": "is", "source": "metagpt/schema.py:TestingContext:code_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TestingContext:code_doc", "target": "{\"name\":\"code_doc\",\"type_\":\"\",\"default_\":\"\",\"description\":\"code_doc\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TestingContext:filename", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TestingContext:filename", "target": "{\"name\":\"filename\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"filename : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:TestingContext:test_doc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:TestingContext:test_doc", "target": "{\"name\":\"test_doc\",\"type_\":\"Optional[Document]\",\"default_\":\"\",\"description\":\"test_doc : Optional[Document]\",\"compositions\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "{\"name\":\"ThoughtNode\",\"package\":\"metagpt/strategy/base.py:ThoughtNode\",\"attributes\":{\"id\":{\"name\":\"id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"id : int\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"valid_status\":{\"name\":\"valid_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"valid_status : bool\",\"compositions\":[]},\"value\":{\"name\":\"value\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"value : int\",\"compositions\":[]}},\"methods\":{\"update_valid_status\":{\"name\":\"update_valid_status\",\"args\":[{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_valid_status(status): None\",\"aggregations\":[]},\"update_value\":{\"name\":\"update_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_value(value): None\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:id"}, {"predicate": "has_class_property", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:name"}, {"predicate": "has_class_property", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:valid_status"}, {"predicate": "has_class_property", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:value"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:update_valid_status"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "metagpt/strategy/base.py:ThoughtNode:update_value"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "{\"lineno\":34,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtNode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/base.py:ThoughtNode", "target": "{\"name\":\"ThoughtNode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"id\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"valid_status\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"},{\"name\":\"value\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:id", "target": "{\"name\":\"id\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"id : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:valid_status", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:valid_status", "target": "{\"name\":\"valid_status\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"valid_status : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:value", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:value", "target": "{\"name\":\"value\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"value : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:update_valid_status", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:update_valid_status", "target": "{\"name\":\"update_valid_status\",\"args\":[{\"name\":\"status\",\"type_\":\"\",\"default_\":\"\",\"description\":\"status\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_valid_status(status): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtNode:update_value", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtNode:update_value", "target": "{\"name\":\"update_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"update_value(value): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "{\"name\":\"ThoughtSolverBase\",\"package\":\"metagpt/strategy/tot.py:ThoughtSolverBase\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model_config\":{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]},\"thought_tree\":{\"name\":\"thought_tree\",\"type_\":\"Optional[ThoughtTree]\",\"default_\":\"\",\"description\":\"thought_tree : Optional[ThoughtTree]\",\"compositions\":[\"ThoughtTree\"]}},\"methods\":{\"evaluate_node\":{\"name\":\"evaluate_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"parent_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parent_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"evaluate_node(node, parent_value): None\",\"aggregations\":[]},\"generate_thoughts\":{\"name\":\"generate_thoughts\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"generate_thoughts(current_state, current_node): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]},\"select_nodes\":{\"name\":\"select_nodes\",\"args\":[{\"name\":\"thought_nodes\",\"type_\":\"List[ThoughtNode]\",\"default_\":\"\",\"description\":\"thought_nodes: List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"select_nodes(thought_nodes: List[ThoughtNode]): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]},\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]},\"update_solution\":{\"name\":\"update_solution\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_solution()\",\"aggregations\":[]}},\"compositions\":[\"ThoughtTree\"],\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:config"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:llm"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:model_config"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:thought_tree"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:evaluate_node"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:generate_thoughts"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:select_nodes"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:solve"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:update_solution"}, {"predicate": "isAggregateOf", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "?:ThoughtNode"}, {"predicate": "is_composite_of", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/base.py:ThoughtTree"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:__init__"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "{\"lineno\":33,\"end_lineno\":123,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtSolverBase\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "{\"name\":\"ThoughtSolverBase\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model_config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"thought_tree\",\"visibility\":\"+\",\"value_type\":\"Optional[ThoughtTree]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot.py:ThoughtSolverBase", "target": "?:ThoughtTree"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:model_config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:model_config", "target": "{\"name\":\"model_config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model_config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:thought_tree", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:thought_tree", "target": "{\"name\":\"thought_tree\",\"type_\":\"Optional[ThoughtTree]\",\"default_\":\"\",\"description\":\"thought_tree : Optional[ThoughtTree]\",\"compositions\":[\"ThoughtTree\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:evaluate_node", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:evaluate_node", "target": "{\"name\":\"evaluate_node\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"parent_value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parent_value\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"evaluate_node(node, parent_value): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:generate_thoughts", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:generate_thoughts", "target": "{\"name\":\"generate_thoughts\",\"args\":[{\"name\":\"current_state\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_state\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"current_node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"generate_thoughts(current_state, current_node): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:select_nodes", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:select_nodes", "target": "{\"name\":\"select_nodes\",\"args\":[{\"name\":\"thought_nodes\",\"type_\":\"List[ThoughtNode]\",\"default_\":\"\",\"description\":\"thought_nodes: List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"select_nodes(thought_nodes: List[ThoughtNode]): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:update_solution", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:update_solution", "target": "{\"name\":\"update_solution\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_solution()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "{\"name\":\"ThoughtSolverConfig\",\"package\":\"metagpt/strategy/tot_schema.py:ThoughtSolverConfig\",\"attributes\":{\"evaluator\":{\"name\":\"evaluator\",\"type_\":\"\",\"default_\":\"\",\"description\":\"evaluator\",\"compositions\":[]},\"max_steps\":{\"name\":\"max_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_steps : int\",\"compositions\":[]},\"method_select\":{\"name\":\"method_select\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method_select : str\",\"compositions\":[]},\"n_generate_sample\":{\"name\":\"n_generate_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_generate_sample : int\",\"compositions\":[]},\"n_select_sample\":{\"name\":\"n_select_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_select_sample : int\",\"compositions\":[]},\"n_solution_sample\":{\"name\":\"n_solution_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_solution_sample : int\",\"compositions\":[]},\"parser\":{\"name\":\"parser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parser\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:max_steps"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:method_select"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_generate_sample"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_select_sample"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_solution_sample"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot.py:ThoughtSolverBase"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot.py:ThoughtSolverBase:config"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot.py:TreeofThought"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "metagpt/strategy/tot.py:TreeofThought:config"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "{\"lineno\":23,\"end_lineno\":30,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtSolverConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig", "target": "{\"name\":\"ThoughtSolverConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"evaluator\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"max_steps\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"method_select\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"n_generate_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_select_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"n_solution_sample\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"parser\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:evaluator", "target": "{\"name\":\"evaluator\",\"type_\":\"\",\"default_\":\"\",\"description\":\"evaluator\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:max_steps", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:max_steps", "target": "{\"name\":\"max_steps\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"max_steps : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:method_select", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:method_select", "target": "{\"name\":\"method_select\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method_select : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_generate_sample", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_generate_sample", "target": "{\"name\":\"n_generate_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_generate_sample : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_select_sample", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_select_sample", "target": "{\"name\":\"n_select_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_select_sample : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_solution_sample", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:n_solution_sample", "target": "{\"name\":\"n_solution_sample\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"n_solution_sample : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot_schema.py:ThoughtSolverConfig:parser", "target": "{\"name\":\"parser\",\"type_\":\"\",\"default_\":\"\",\"description\":\"parser\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "{\"name\":\"ThoughtTree\",\"package\":\"metagpt/strategy/base.py:ThoughtTree\",\"attributes\":{\"all_nodes\":{\"name\":\"all_nodes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_nodes\",\"compositions\":[]}},\"methods\":{\"parse_node_path\":{\"name\":\"parse_node_path\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_node_path(node): List[str]\",\"aggregations\":[]},\"show\":{\"name\":\"show\",\"args\":[],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"show(): None\",\"aggregations\":[]},\"update_node\":{\"name\":\"update_node\",\"args\":[{\"name\":\"thought\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"thought: List[dict]\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"ThoughtNode\",\"default_\":\"\",\"description\":\"current_node: ThoughtNode\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"update_node(thought: List[dict], current_node: ThoughtNode): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}},\"compositions\":[],\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/base.py:ThoughtTree:all_nodes"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/base.py:ThoughtTree:parse_node_path"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/base.py:ThoughtTree:show"}, {"predicate": "has_class_method", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/base.py:ThoughtTree:update_node"}, {"predicate": "isAggregateOf", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "?:ThoughtNode"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/tot.py:BFSSolver"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/tot.py:BFSSolver:thought_tree"}, {"predicate": "isCompositeOf", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/tot.py:DFSSolver"}, {"predicate": "isCompositeOn", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "metagpt/strategy/tot.py:DFSSolver:thought_tree"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "{\"lineno\":51,\"end_lineno\":109,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ThoughtTree\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/base.py:ThoughtTree", "target": "{\"name\":\"ThoughtTree\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"all_nodes\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:all_nodes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree:all_nodes", "target": "{\"name\":\"all_nodes\",\"type_\":\"\",\"default_\":\"\",\"description\":\"all_nodes\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:all_nodes", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:parse_node_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree:parse_node_path", "target": "{\"name\":\"parse_node_path\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]}],\"return_args\":{\"type_\":\"List[str]\",\"description\":\"List[str]\",\"compositions\":[]},\"description\":\"parse_node_path(node): List[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:show", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree:show", "target": "{\"name\":\"show\",\"args\":[],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"show(): None\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/base.py:ThoughtTree:update_node", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/base.py:ThoughtTree:update_node", "target": "{\"name\":\"update_node\",\"args\":[{\"name\":\"thought\",\"type_\":\"List[dict]\",\"default_\":\"\",\"description\":\"thought: List[dict]\",\"compositions\":[]},{\"name\":\"current_node\",\"type_\":\"ThoughtNode\",\"default_\":\"\",\"description\":\"current_node: ThoughtNode\",\"compositions\":[\"ThoughtNode\"]}],\"return_args\":{\"type_\":\"List[ThoughtNode]\",\"description\":\"List[ThoughtNode]\",\"compositions\":[\"ThoughtNode\"]},\"description\":\"update_node(thought: List[dict], current_node: ThoughtNode): List[ThoughtNode]\",\"aggregations\":[\"ThoughtNode\"]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "{\"name\":\"TokenCostManager\",\"package\":\"metagpt/utils/cost_manager.py:TokenCostManager\",\"attributes\":{\"total_completion_tokens\":{\"name\":\"total_completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_completion_tokens\",\"compositions\":[]},\"total_prompt_tokens\":{\"name\":\"total_prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_prompt_tokens\",\"compositions\":[]}},\"methods\":{\"update_cost\":{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/utils/cost_manager.py:TokenCostManager:total_completion_tokens"}, {"predicate": "has_class_property", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/utils/cost_manager.py:TokenCostManager:total_prompt_tokens"}, {"predicate": "has_class_method", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/utils/cost_manager.py:TokenCostManager:update_cost"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/utils/cost_manager.py:CostManager"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/provider/ollama_api.py:OllamaLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/provider/ollama_api.py:OllamaLLM:_cost_manager"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/provider/open_llm_api.py:OpenLLM"}, {"predicate": "isCompositeOn", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "metagpt/provider/open_llm_api.py:OpenLLM:_cost_manager"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "{\"lineno\":85,\"end_lineno\":99,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TokenCostManager\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/cost_manager.py:TokenCostManager", "target": "{\"name\":\"TokenCostManager\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"total_completion_tokens\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"total_prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:TokenCostManager:total_completion_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:TokenCostManager:total_completion_tokens", "target": "{\"name\":\"total_completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_completion_tokens\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:TokenCostManager:total_prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:TokenCostManager:total_prompt_tokens", "target": "{\"name\":\"total_prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"total_prompt_tokens\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/cost_manager.py:TokenCostManager:update_cost", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/cost_manager.py:TokenCostManager:update_cost", "target": "{\"name\":\"update_cost\",\"args\":[{\"name\":\"prompt_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt_tokens\",\"compositions\":[]},{\"name\":\"completion_tokens\",\"type_\":\"\",\"default_\":\"\",\"description\":\"completion_tokens\",\"compositions\":[]},{\"name\":\"model\",\"type_\":\"\",\"default_\":\"\",\"description\":\"model\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"update_cost(prompt_tokens, completion_tokens, model)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ToolUse", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ToolUse", "target": "{\"name\":\"ToolUse\",\"package\":\"metagpt/actions/action_node.py:ToolUse\",\"attributes\":{\"tool_name\":{\"name\":\"tool_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tool_name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/action_node.py:ToolUse", "target": "metagpt/actions/action_node.py:ToolUse:tool_name"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/action_node.py:ToolUse", "target": "metagpt/actions/action_node.py:Task"}, {"predicate": "isCompositeOn", "source": "metagpt/actions/action_node.py:ToolUse", "target": "metagpt/actions/action_node.py:Task:tool"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:ToolUse", "target": "{\"lineno\":669,\"end_lineno\":670,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ToolUse\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/action_node.py:ToolUse", "target": "{\"name\":\"ToolUse\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"tool_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ToolUse:tool_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/action_node.py:ToolUse:tool_name", "target": "{\"name\":\"tool_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tool_name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/translator.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/translator.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/translator.py", "target": "metagpt/tools/translator.py:Translator"}, {"predicate": "is", "source": "metagpt/tools/translator.py:Translator", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/translator.py:Translator", "target": "{\"name\":\"Translator\",\"package\":\"metagpt/tools/translator.py:Translator\",\"attributes\":{},\"methods\":{\"translate_prompt\":{\"name\":\"translate_prompt\",\"args\":[{\"name\":\"original\",\"type_\":\"\",\"default_\":\"\",\"description\":\"original\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"translate_prompt(original, lang)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/translator.py:Translator", "target": "metagpt/tools/translator.py:Translator:translate_prompt"}, {"predicate": "has_page_info", "source": "metagpt/tools/translator.py:Translator", "target": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Translator\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/translator.py:Translator", "target": "{\"name\":\"Translator\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/translator.py:Translator:translate_prompt", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/translator.py:Translator:translate_prompt", "target": "{\"name\":\"translate_prompt\",\"args\":[{\"name\":\"original\",\"type_\":\"\",\"default_\":\"\",\"description\":\"original\",\"compositions\":[]},{\"name\":\"lang\",\"type_\":\"\",\"default_\":\"\",\"description\":\"lang\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"translate_prompt(original, lang)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "{\"name\":\"TreeofThought\",\"package\":\"metagpt/strategy/tot.py:TreeofThought\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"solver\":{\"name\":\"solver\",\"type_\":\"\",\"default_\":\"\",\"description\":\"solver\",\"compositions\":[]},\"strategy\":{\"name\":\"strategy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strategy\",\"compositions\":[]}},\"methods\":{\"solve\":{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:config"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:solver"}, {"predicate": "has_class_property", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:strategy"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:solve"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:__init__"}, {"predicate": "has_class_method", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "metagpt/strategy/tot.py:TreeofThought:_initialize_solver"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "{\"lineno\":235,\"end_lineno\":277,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TreeofThought\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/strategy/tot.py:TreeofThought", "target": "{\"name\":\"TreeofThought\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"solver\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"strategy\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:solver", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:solver", "target": "{\"name\":\"solver\",\"type_\":\"\",\"default_\":\"\",\"description\":\"solver\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:strategy", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:strategy", "target": "{\"name\":\"strategy\",\"type_\":\"\",\"default_\":\"\",\"description\":\"strategy\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:solve", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/strategy/tot.py:TreeofThought:solve", "target": "{\"name\":\"solve\",\"args\":[{\"name\":\"init_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"init_prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"solve(init_prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/roles/tutorial_assistant.py", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "{\"name\":\"TutorialAssistant\",\"package\":\"metagpt/roles/tutorial_assistant.py:TutorialAssistant\",\"attributes\":{\"constraints\":{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]},\"goal\":{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"main_title\":{\"name\":\"main_title\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"main_title : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"profile\":{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]},\"total_content\":{\"name\":\"total_content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"total_content : str\",\"compositions\":[]}},\"methods\":{\"react\":{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:constraints"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:goal"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:language"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:main_title"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:name"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:profile"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:topic"}, {"predicate": "has_class_property", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:total_content"}, {"predicate": "has_class_method", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:react"}, {"predicate": "isAggregateOf", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_class_method", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:__init__"}, {"predicate": "has_class_method", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_handle_directory"}, {"predicate": "has_class_method", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_act"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "{\"lineno\":20,\"end_lineno\":94,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"TutorialAssistant\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant", "target": "{\"name\":\"TutorialAssistant\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"constraints\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"goal\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"main_title\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"profile\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"total_content\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:constraints", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:constraints", "target": "{\"name\":\"constraints\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"constraints : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:goal", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:goal", "target": "{\"name\":\"goal\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"goal : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:main_title", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:main_title", "target": "{\"name\":\"main_title\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"main_title : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:profile", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:profile", "target": "{\"name\":\"profile\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"profile : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:topic", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:topic", "target": "{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:total_content", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:total_content", "target": "{\"name\":\"total_content\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"total_content : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:react", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:react", "target": "{\"name\":\"react\",\"args\":[],\"return_args\":{\"type_\":\"Message\",\"description\":\"Message\",\"compositions\":[\"Message\"]},\"description\":\"react(): Message\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassAttribute", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassAttribute", "target": "{\"name\":\"UMLClassAttribute\",\"package\":\"metagpt/schema.py:UMLClassAttribute\",\"attributes\":{\"default_value\":{\"name\":\"default_value\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_value : str\",\"compositions\":[]},\"value_type\":{\"name\":\"value_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"value_type : str\",\"compositions\":[]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassAttribute", "target": "metagpt/schema.py:UMLClassAttribute:default_value"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassAttribute", "target": "metagpt/schema.py:UMLClassAttribute:value_type"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassAttribute", "target": "metagpt/schema.py:UMLClassAttribute:get_mermaid"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:UMLClassAttribute", "target": "metagpt/schema.py:UMLClassMeta"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UMLClassAttribute", "target": "{\"lineno\":516,\"end_lineno\":536,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassAttribute\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UMLClassAttribute", "target": "{\"name\":\"UMLClassAttribute\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"default_value\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"value_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassAttribute:default_value", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassAttribute:default_value", "target": "{\"name\":\"default_value\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"default_value : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassAttribute:value_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassAttribute:value_type", "target": "{\"name\":\"value_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"value_type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassAttribute:get_mermaid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassAttribute:get_mermaid", "target": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMeta", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMeta", "target": "{\"name\":\"UMLClassMeta\",\"package\":\"metagpt/schema.py:UMLClassMeta\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"visibility\":{\"name\":\"visibility\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"visibility : str\",\"compositions\":[]}},\"methods\":{\"name_to_visibility\":{\"name\":\"name_to_visibility\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"name_to_visibility(name: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassMeta", "target": "metagpt/schema.py:UMLClassMeta:name"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassMeta", "target": "metagpt/schema.py:UMLClassMeta:visibility"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassMeta", "target": "metagpt/schema.py:UMLClassMeta:name_to_visibility"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UMLClassMeta", "target": "{\"lineno\":501,\"end_lineno\":513,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassMeta\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UMLClassMeta", "target": "{\"name\":\"UMLClassMeta\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"visibility\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMeta:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMeta:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMeta:visibility", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMeta:visibility", "target": "{\"name\":\"visibility\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"visibility : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMeta:name_to_visibility", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMeta:name_to_visibility", "target": "{\"name\":\"name_to_visibility\",\"args\":[{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"name_to_visibility(name: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMethod", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMethod", "target": "{\"name\":\"UMLClassMethod\",\"package\":\"metagpt/schema.py:UMLClassMethod\",\"attributes\":{\"args\":{\"name\":\"args\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]},\"return_type\":{\"name\":\"return_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"return_type : str\",\"compositions\":[]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}},\"compositions\":[\"UMLClassAttribute\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassMethod:args"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassMethod:return_type"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassMethod:get_mermaid"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassMeta"}, {"predicate": "is_composite_of", "source": "metagpt/schema.py:UMLClassMethod", "target": "metagpt/schema.py:UMLClassAttribute"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UMLClassMethod", "target": "{\"lineno\":539,\"end_lineno\":553,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassMethod\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UMLClassMethod", "target": "{\"name\":\"UMLClassMethod\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"args\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassAttribute]\",\"default_value\":\"\"},{\"name\":\"return_type\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:UMLClassMethod", "target": "?:UMLClassAttribute"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMethod:args", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMethod:args", "target": "{\"name\":\"args\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"args : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMethod:return_type", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMethod:return_type", "target": "{\"name\":\"return_type\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"return_type : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassMethod:get_mermaid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassMethod:get_mermaid", "target": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView", "target": "{\"name\":\"UMLClassView\",\"package\":\"metagpt/schema.py:UMLClassView\",\"attributes\":{\"attributes\":{\"name\":\"attributes\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]},\"methods\":{\"name\":\"methods\",\"type_\":\"List[UMLClassMethod]\",\"default_\":\"\",\"description\":\"methods : List[UMLClassMethod]\",\"compositions\":[\"UMLClassMethod\"]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]},\"load_dot_class_info\":{\"name\":\"load_dot_class_info\",\"args\":[{\"name\":\"dot_class_info\",\"type_\":\"DotClassInfo\",\"default_\":\"\",\"description\":\"dot_class_info: DotClassInfo\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"UMLClassView\",\"description\":\"UMLClassView\",\"compositions\":[\"UMLClassView\"]},\"description\":\"load_dot_class_info(dot_class_info: DotClassInfo): UMLClassView\",\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}},\"compositions\":[\"UMLClassAttribute\",\"UMLClassMethod\"],\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassView:attributes"}, {"predicate": "has_class_property", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassView:methods"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassView:get_mermaid"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassView:load_dot_class_info"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:UMLClassView", "target": "?:UMLClassView"}, {"predicate": "isAggregateOf", "source": "metagpt/schema.py:UMLClassView", "target": "?:DotClassInfo"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassMeta"}, {"predicate": "is_composite_of", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassAttribute"}, {"predicate": "is_composite_of", "source": "metagpt/schema.py:UMLClassView", "target": "metagpt/schema.py:UMLClassMethod"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UMLClassView", "target": "{\"lineno\":556,\"end_lineno\":583,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UMLClassView\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UMLClassView", "target": "{\"name\":\"UMLClassView\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"attributes\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassAttribute]\",\"default_value\":\"\"},{\"name\":\"methods\",\"visibility\":\"+\",\"value_type\":\"List[UMLClassMethod]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:UMLClassView", "target": "?:UMLClassAttribute"}, {"predicate": "isCompositeOf", "source": "metagpt/schema.py:UMLClassView", "target": "?:UMLClassMethod"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView:attributes", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView:attributes", "target": "{\"name\":\"attributes\",\"type_\":\"List[UMLClassAttribute]\",\"default_\":\"\",\"description\":\"attributes : List[UMLClassAttribute]\",\"compositions\":[\"UMLClassAttribute\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView:methods", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView:methods", "target": "{\"name\":\"methods\",\"type_\":\"List[UMLClassMethod]\",\"default_\":\"\",\"description\":\"methods : List[UMLClassMethod]\",\"compositions\":[\"UMLClassMethod\"]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView:get_mermaid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView:get_mermaid", "target": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"\",\"default_\":\"\",\"description\":\"align\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid(align): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UMLClassView:load_dot_class_info", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UMLClassView:load_dot_class_info", "target": "{\"name\":\"load_dot_class_info\",\"args\":[{\"name\":\"dot_class_info\",\"type_\":\"DotClassInfo\",\"default_\":\"\",\"description\":\"dot_class_info: DotClassInfo\",\"compositions\":[\"DotClassInfo\"]}],\"return_args\":{\"type_\":\"UMLClassView\",\"description\":\"UMLClassView\",\"compositions\":[\"UMLClassView\"]},\"description\":\"load_dot_class_info(dot_class_info: DotClassInfo): UMLClassView\",\"aggregations\":[\"UMLClassView\",\"DotClassInfo\"]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/ut_writer.py", "target": "metagpt/tools/ut_writer.py:UTGenerator"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "{\"name\":\"UTGenerator\",\"package\":\"metagpt/tools/ut_writer.py:UTGenerator\",\"attributes\":{\"chatgpt_method\":{\"name\":\"chatgpt_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chatgpt_method : str\",\"compositions\":[]},\"icl_sample\":{\"name\":\"icl_sample\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"icl_sample : str\",\"compositions\":[]},\"questions_path\":{\"name\":\"questions_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"questions_path : str\",\"compositions\":[]},\"swagger_file\":{\"name\":\"swagger_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"swagger_file : str\",\"compositions\":[]},\"template_prefix\":{\"name\":\"template_prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template_prefix : str\",\"compositions\":[]},\"ut_py_path\":{\"name\":\"ut_py_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ut_py_path : str\",\"compositions\":[]}},\"methods\":{\"ask_gpt_and_save\":{\"name\":\"ask_gpt_and_save\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tag: str\",\"compositions\":[]},{\"name\":\"fname\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"fname: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_gpt_and_save(question: str, tag: str, fname: str)\",\"aggregations\":[]},\"build_api_doc\":{\"name\":\"build_api_doc\",\"args\":[{\"name\":\"node\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"node: dict\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path: str\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_api_doc(node: dict, path: str, method: str): str\",\"aggregations\":[]},\"build_object_properties\":{\"name\":\"build_object_properties\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]},{\"name\":\"level\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"level: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_object_properties(node, prop_object_required, level: int): str\",\"aggregations\":[]},\"generate_ut\":{\"name\":\"generate_ut\",\"args\":[{\"name\":\"include_tags\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_tags\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"generate_ut(include_tags): bool\",\"aggregations\":[]},\"get_swagger_json\":{\"name\":\"get_swagger_json\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_swagger_json(): dict\",\"aggregations\":[]},\"get_tags_mapping\":{\"name\":\"get_tags_mapping\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_tags_mapping(): dict\",\"aggregations\":[]},\"gpt_msgs_to_code\":{\"name\":\"gpt_msgs_to_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"messages: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"gpt_msgs_to_code(messages: list): str\",\"aggregations\":[]},\"para_to_str\":{\"name\":\"para_to_str\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"prop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"para_to_str(name, prop, prop_object_required)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:chatgpt_method"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:icl_sample"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:questions_path"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:swagger_file"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:template_prefix"}, {"predicate": "has_class_property", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:ut_py_path"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:ask_gpt_and_save"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:build_api_doc"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:build_object_properties"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:generate_ut"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:get_swagger_json"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:get_tags_mapping"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:gpt_msgs_to_code"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:para_to_str"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:__init__"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:__para_to_str"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:_para_to_str"}, {"predicate": "has_class_method", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "metagpt/tools/ut_writer.py:UTGenerator:_generate_ut"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "{\"lineno\":104,\"end_lineno\":287,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UTGenerator\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/ut_writer.py:UTGenerator", "target": "{\"name\":\"UTGenerator\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"chatgpt_method\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"icl_sample\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"questions_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"swagger_file\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"template_prefix\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"ut_py_path\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:chatgpt_method", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:chatgpt_method", "target": "{\"name\":\"chatgpt_method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"chatgpt_method : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:icl_sample", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:icl_sample", "target": "{\"name\":\"icl_sample\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"icl_sample : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:questions_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:questions_path", "target": "{\"name\":\"questions_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"questions_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:swagger_file", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:swagger_file", "target": "{\"name\":\"swagger_file\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"swagger_file : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:template_prefix", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:template_prefix", "target": "{\"name\":\"template_prefix\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"template_prefix : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:ut_py_path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:ut_py_path", "target": "{\"name\":\"ut_py_path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"ut_py_path : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:ask_gpt_and_save", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:ask_gpt_and_save", "target": "{\"name\":\"ask_gpt_and_save\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"tag\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"tag: str\",\"compositions\":[]},{\"name\":\"fname\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"fname: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"ask_gpt_and_save(question: str, tag: str, fname: str)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:build_api_doc", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:build_api_doc", "target": "{\"name\":\"build_api_doc\",\"args\":[{\"name\":\"node\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"node: dict\",\"compositions\":[]},{\"name\":\"path\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"path: str\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_api_doc(node: dict, path: str, method: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:build_object_properties", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:build_object_properties", "target": "{\"name\":\"build_object_properties\",\"args\":[{\"name\":\"node\",\"type_\":\"\",\"default_\":\"\",\"description\":\"node\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]},{\"name\":\"level\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"level: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"build_object_properties(node, prop_object_required, level: int): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:generate_ut", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:generate_ut", "target": "{\"name\":\"generate_ut\",\"args\":[{\"name\":\"include_tags\",\"type_\":\"\",\"default_\":\"\",\"description\":\"include_tags\",\"compositions\":[]}],\"return_args\":{\"type_\":\"bool\",\"description\":\"bool\",\"compositions\":[]},\"description\":\"generate_ut(include_tags): bool\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:get_swagger_json", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:get_swagger_json", "target": "{\"name\":\"get_swagger_json\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_swagger_json(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:get_tags_mapping", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:get_tags_mapping", "target": "{\"name\":\"get_tags_mapping\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"get_tags_mapping(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:gpt_msgs_to_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:gpt_msgs_to_code", "target": "{\"name\":\"gpt_msgs_to_code\",\"args\":[{\"name\":\"messages\",\"type_\":\"list\",\"default_\":\"\",\"description\":\"messages: list\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"gpt_msgs_to_code(messages: list): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:para_to_str", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/ut_writer.py:UTGenerator:para_to_str", "target": "{\"name\":\"para_to_str\",\"args\":[{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},{\"name\":\"prop\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop\",\"compositions\":[]},{\"name\":\"prop_object_required\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prop_object_required\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"para_to_str(name, prop, prop_object_required)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "{\"name\":\"Usage\",\"package\":\"metagpt/tools/openai_text_to_embedding.py:Usage\",\"attributes\":{\"prompt_tokens\":{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens : int\",\"compositions\":[]},\"total_tokens\":{\"name\":\"total_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_tokens : int\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "metagpt/tools/openai_text_to_embedding.py:Usage:prompt_tokens"}, {"predicate": "has_class_property", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "metagpt/tools/openai_text_to_embedding.py:Usage:total_tokens"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding"}, {"predicate": "isCompositeOn", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "metagpt/tools/openai_text_to_embedding.py:ResultEmbedding:usage"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "{\"lineno\":29,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"Usage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/openai_text_to_embedding.py:Usage", "target": "{\"name\":\"Usage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"prompt_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"},{\"name\":\"total_tokens\",\"visibility\":\"+\",\"value_type\":\"int\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Usage:prompt_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Usage:prompt_tokens", "target": "{\"name\":\"prompt_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"prompt_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:Usage:total_tokens", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/openai_text_to_embedding.py:Usage:total_tokens", "target": "{\"name\":\"total_tokens\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"total_tokens : int\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/schema.py:UserMessage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/schema.py:UserMessage", "target": "{\"name\":\"UserMessage\",\"package\":\"metagpt/schema.py:UserMessage\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/schema.py:UserMessage", "target": "metagpt/schema.py:Message"}, {"predicate": "has_class_method", "source": "metagpt/schema.py:UserMessage", "target": "metagpt/schema.py:UserMessage:__init__"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:UserMessage", "target": "{\"lineno\":307,\"end_lineno\":313,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UserMessage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/schema.py:UserMessage", "target": "{\"name\":\"UserMessage\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/add_requirement.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/add_requirement.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/add_requirement.py", "target": "metagpt/actions/add_requirement.py:UserRequirement"}, {"predicate": "is", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "{\"name\":\"UserRequirement\",\"package\":\"metagpt/actions/add_requirement.py:UserRequirement\",\"attributes\":{},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "metagpt/actions/action.py:Action"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "metagpt/schema.py:Message"}, {"predicate": "isAggregateOn", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "metagpt/schema.py:Message:cause_by"}, {"predicate": "has_page_info", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "{\"lineno\":11,\"end_lineno\":12,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"UserRequirement\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/add_requirement.py:UserRequirement", "target": "{\"name\":\"UserRequirement\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/visual_graph_repo.py", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo"}, {"predicate": "has_class", "source": "metagpt/utils/visual_graph_repo.py", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo"}, {"predicate": "has_class", "source": "metagpt/utils/visual_graph_repo.py", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "{\"name\":\"VisualDiGraphRepo\",\"package\":\"metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo\",\"attributes\":{},\"methods\":{\"get_mermaid_class_view\":{\"name\":\"get_mermaid_class_view\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid_class_view(): str\",\"aggregations\":[]},\"get_mermaid_sequence_views\":{\"name\":\"get_mermaid_sequence_views\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_views(): List[str, str]\",\"aggregations\":[]},\"load_from\":{\"name\":\"load_from\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_from(filename: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_class_view"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_views"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:load_from"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_get_class_view"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_refine_name"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "{\"lineno\":59,\"end_lineno\":111,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VisualDiGraphRepo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo", "target": "{\"name\":\"VisualDiGraphRepo\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_class_view", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_class_view", "target": "{\"name\":\"get_mermaid_class_view\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_mermaid_class_view(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_views", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:get_mermaid_sequence_views", "target": "{\"name\":\"get_mermaid_sequence_views\",\"args\":[],\"return_args\":{\"type_\":\"List[str,str]\",\"description\":\"List[str, str]\",\"compositions\":[]},\"description\":\"get_mermaid_sequence_views(): List[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:load_from", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:load_from", "target": "{\"name\":\"load_from\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"load_from(filename: str \\\\| Path)\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "{\"name\":\"VisualGraphRepo\",\"package\":\"metagpt/utils/visual_graph_repo.py:VisualGraphRepo\",\"attributes\":{\"graph_db\":{\"name\":\"graph_db\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_db\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:__init__"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "{\"lineno\":52,\"end_lineno\":56,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"VisualGraphRepo\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo", "target": "{\"name\":\"VisualGraphRepo\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"graph_db\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:graph_db", "target": "{\"name\":\"graph_db\",\"type_\":\"\",\"default_\":\"\",\"description\":\"graph_db\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "{\"name\":\"WDMHttpProxyClient\",\"package\":\"metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient\",\"attributes\":{},\"methods\":{\"get\":{\"name\":\"get\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(url)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:get"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "{\"lineno\":94,\"end_lineno\":98,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WDMHttpProxyClient\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient", "target": "{\"name\":\"WDMHttpProxyClient\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:get", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine_selenium.py:WDMHttpProxyClient:get", "target": "{\"name\":\"get\",\"args\":[{\"name\":\"url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"url\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get(url)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "{\"name\":\"WebBrowseAndSummarize\",\"package\":\"metagpt/actions/research.py:WebBrowseAndSummarize\",\"attributes\":{\"browse_func\":{\"name\":\"browse_func\",\"type_\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_\":\"\",\"description\":\"browse_func : Optional[Union[Callable[[list[str]], None], None]]\",\"compositions\":[\"Callable\"]},\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"web_browser_engine\":{\"name\":\"web_browser_engine\",\"type_\":\"Optional[WebBrowserEngine]\",\"default_\":\"\",\"description\":\"web_browser_engine : Optional[WebBrowserEngine]\",\"compositions\":[\"WebBrowserEngine\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(url: str): dict[str, str]\",\"aggregations\":[]}},\"compositions\":[\"Callable\",\"WebBrowserEngine\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:browse_func"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:run"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "?:Callable"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine"}, {"predicate": "has_class_method", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:__init__"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "{\"lineno\":174,\"end_lineno\":237,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowseAndSummarize\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "{\"name\":\"WebBrowseAndSummarize\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"browse_func\",\"visibility\":\"+\",\"value_type\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_value\":\"\"},{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"web_browser_engine\",\"visibility\":\"+\",\"value_type\":\"Optional[WebBrowserEngine]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/research.py:WebBrowseAndSummarize", "target": "?:WebBrowserEngine"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:browse_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:browse_func", "target": "{\"name\":\"browse_func\",\"type_\":\"Optional[Union[Callable[[list[str]],None],None]]\",\"default_\":\"\",\"description\":\"browse_func : Optional[Union[Callable[[list[str]], None], None]]\",\"compositions\":[\"Callable\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine", "target": "{\"name\":\"web_browser_engine\",\"type_\":\"Optional[WebBrowserEngine]\",\"default_\":\"\",\"description\":\"web_browser_engine : Optional[WebBrowserEngine]\",\"compositions\":[\"WebBrowserEngine\"]}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict[str,str]\",\"description\":\"dict[str, str]\",\"compositions\":[]},\"description\":\"run(url: str): dict[str, str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/web_browser_engine.py", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "{\"name\":\"WebBrowserEngine\",\"package\":\"metagpt/tools/web_browser_engine.py:WebBrowserEngine\",\"attributes\":{\"engine\":{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]},\"run_func\":{\"name\":\"run_func\",\"type_\":\"Callable[...,Coroutine[Any,Any,WebPage\\\\|list[WebPage]]]\\\\|None\",\"default_\":\"\",\"description\":\"run_func : Callable[..., Coroutine[Any, Any, WebPage \\\\| list[WebPage]]] \\\\| None\",\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\",\"WebPage\\\\\",\"\\\\\"]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\",\"description\":\"WebPage\",\"compositions\":[\"WebPage\"]},\"description\":\"run(url: str): WebPage\",\"aggregations\":[\"WebPage\"]}},\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\",\"WebPage\\\\\",\"\\\\\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine"}, {"predicate": "has_class_property", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run_func"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:..."}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:Callable"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:Coroutine"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:WebPage\\"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:\\"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/actions/research.py:WebBrowseAndSummarize"}, {"predicate": "isCompositeOn", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/actions/research.py:WebBrowseAndSummarize:web_browser_engine"}, {"predicate": "is_composite_of", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/utils/parse_html.py:WebPage"}, {"predicate": "has_class_method", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "{\"lineno\":13,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowserEngine\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "{\"name\":\"WebBrowserEngine\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"engine\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"run_func\",\"visibility\":\"+\",\"value_type\":\"Callable[...,Coroutine[Any,Any,WebPage\\\\|list[WebPage]]]\\\\|None\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine", "target": "?:WebPage"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine", "target": "{\"name\":\"engine\",\"type_\":\"\",\"default_\":\"\",\"description\":\"engine\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run_func", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run_func", "target": "{\"name\":\"run_func\",\"type_\":\"Callable[...,Coroutine[Any,Any,WebPage\\\\|list[WebPage]]]\\\\|None\",\"default_\":\"\",\"description\":\"run_func : Callable[..., Coroutine[Any, Any, WebPage \\\\| list[WebPage]]] \\\\| None\",\"compositions\":[\"...\",\"Callable\",\"Coroutine\",\"WebPage\",\"WebPage\\\\\",\"\\\\\"]}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"WebPage\",\"description\":\"WebPage\",\"compositions\":[\"WebPage\"]},\"description\":\"run(url: str): WebPage\",\"aggregations\":[\"WebPage\"]}"}, {"predicate": "is", "source": "metagpt/tools:WebBrowserEngineType", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools:WebBrowserEngineType", "target": "{\"name\":\"WebBrowserEngineType\",\"package\":\"metagpt/tools:WebBrowserEngineType\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/tools:WebBrowserEngineType:name"}, {"predicate": "isCompositeOf", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/configs/browser_config.py:BrowserConfig"}, {"predicate": "isCompositeOn", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/configs/browser_config.py:BrowserConfig:engine"}, {"predicate": "isAggregateOf", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine"}, {"predicate": "isAggregateOn", "source": "metagpt/tools:WebBrowserEngineType", "target": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:engine"}, {"predicate": "has_class_view", "source": "metagpt/tools:WebBrowserEngineType", "target": "{\"name\":\"WebBrowserEngineType\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools:WebBrowserEngineType:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/tools:WebBrowserEngineType:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/parse_html.py", "target": "metagpt/utils/parse_html.py:WebPage"}, {"predicate": "has_function", "source": "metagpt/utils/parse_html.py", "target": "metagpt/utils/parse_html.py:get_html_content"}, {"predicate": "has_function", "source": "metagpt/utils/parse_html.py", "target": "metagpt/utils/parse_html.py:_get_soup"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage", "target": "{\"name\":\"WebPage\",\"package\":\"metagpt/utils/parse_html.py:WebPage\",\"attributes\":{\"html\":{\"name\":\"html\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"html : str\",\"compositions\":[]},\"inner_text\":{\"name\":\"inner_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"inner_text : str\",\"compositions\":[]},\"soup\":{\"name\":\"soup\",\"type_\":\"\",\"default_\":\"\",\"description\":\"soup\",\"compositions\":[]},\"title\":{\"name\":\"title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"title\",\"compositions\":[]},\"url\":{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}},\"methods\":{\"get_links\":{\"name\":\"get_links\",\"args\":[],\"return_args\":{\"type_\":\"Generator[str,None,None]\",\"description\":\"Generator[str, None, None]\",\"compositions\":[\"Generator\"]},\"description\":\"get_links(): Generator[str, None, None]\",\"aggregations\":[\"Generator\"]}},\"compositions\":[],\"aggregations\":[\"Generator\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:html"}, {"predicate": "has_class_property", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:inner_text"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:soup"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:title"}, {"predicate": "has_class_property", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:url"}, {"predicate": "has_class_method", "source": "metagpt/utils/parse_html.py:WebPage", "target": "metagpt/utils/parse_html.py:WebPage:get_links"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/parse_html.py:WebPage", "target": "?:Generator"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:WebPage", "target": "{\"lineno\":11,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebPage\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/parse_html.py:WebPage", "target": "{\"name\":\"WebPage\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"html\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"inner_text\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"soup\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"title\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"url\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:html", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:html", "target": "{\"name\":\"html\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"html : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:inner_text", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:inner_text", "target": "{\"name\":\"inner_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"inner_text : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:soup", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:soup", "target": "{\"name\":\"soup\",\"type_\":\"\",\"default_\":\"\",\"description\":\"soup\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:soup", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:title", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:title", "target": "{\"name\":\"title\",\"type_\":\"\",\"default_\":\"\",\"description\":\"title\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:title", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:url", "target": "{\"name\":\"url\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"url : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:WebPage:get_links", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/parse_html.py:WebPage:get_links", "target": "{\"name\":\"get_links\",\"args\":[],\"return_args\":{\"type_\":\"Generator[str,None,None]\",\"description\":\"Generator[str, None, None]\",\"compositions\":[\"Generator\"]},\"description\":\"get_links(): Generator[str, None, None]\",\"aggregations\":[\"Generator\"]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "{\"name\":\"WikiHowTemplate\",\"package\":\"metagpt/tools/prompt_writer.py:WikiHowTemplate\",\"attributes\":{},\"methods\":{\"gen\":{\"name\":\"gen\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"step\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"step: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"gen(question: str, step: str): list[str]\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "metagpt/tools/prompt_writer.py:WikiHowTemplate:gen"}, {"predicate": "has_class_method", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "metagpt/tools/prompt_writer.py:WikiHowTemplate:__init__"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "{\"lineno\":52,\"end_lineno\":74,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WikiHowTemplate\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate", "target": "{\"name\":\"WikiHowTemplate\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate:gen", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate:gen", "target": "{\"name\":\"gen\",\"args\":[{\"name\":\"question\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"question: str\",\"compositions\":[]},{\"name\":\"step\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"step: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"list[str]\",\"description\":\"list[str]\",\"compositions\":[]},\"description\":\"gen(question: str, step: str): list[str]\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/configs/workspace_config.py", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "{\"name\":\"WorkspaceConfig\",\"package\":\"metagpt/configs/workspace_config.py:WorkspaceConfig\",\"attributes\":{\"path\":{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]},\"uid\":{\"name\":\"uid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"uid : str\",\"compositions\":[]},\"use_uid\":{\"name\":\"use_uid\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_uid : bool\",\"compositions\":[]}},\"methods\":{\"check_uid_and_update_path\":{\"name\":\"check_uid_and_update_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_uid_and_update_path()\",\"aggregations\":[]},\"check_workspace_path\":{\"name\":\"check_workspace_path\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_workspace_path(v)\",\"aggregations\":[]}},\"compositions\":[\"Path\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:path"}, {"predicate": "has_class_property", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:uid"}, {"predicate": "has_class_property", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:use_uid"}, {"predicate": "has_class_method", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_uid_and_update_path"}, {"predicate": "has_class_method", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_workspace_path"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "isCompositeOf", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/config2.py:Config"}, {"predicate": "isCompositeOn", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "metagpt/config2.py:Config:workspace"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "{\"lineno\":18,\"end_lineno\":38,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WorkspaceConfig\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig", "target": "{\"name\":\"WorkspaceConfig\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"Path\",\"default_value\":\"\"},{\"name\":\"uid\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_uid\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:path", "target": "{\"name\":\"path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"path : Path\",\"compositions\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:uid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:uid", "target": "{\"name\":\"uid\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"uid : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:use_uid", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:use_uid", "target": "{\"name\":\"use_uid\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_uid : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_uid_and_update_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_uid_and_update_path", "target": "{\"name\":\"check_uid_and_update_path\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_uid_and_update_path()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_workspace_path", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/configs/workspace_config.py:WorkspaceConfig:check_workspace_path", "target": "{\"name\":\"check_workspace_path\",\"args\":[{\"name\":\"v\",\"type_\":\"\",\"default_\":\"\",\"description\":\"v\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_workspace_path(v)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_code.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_code.py", "target": "metagpt/actions/write_code.py:WriteCode"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode", "target": "{\"name\":\"WriteCode\",\"package\":\"metagpt/actions/write_code.py:WriteCode\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"get_codes\":{\"name\":\"get_codes\",\"args\":[{\"name\":\"task_doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"task_doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"exclude\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"exclude: str\",\"compositions\":[]},{\"name\":\"project_repo\",\"type_\":\"ProjectRepo\",\"default_\":\"\",\"description\":\"project_repo: ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},{\"name\":\"use_inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_inc: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_codes(task_doc: Document, exclude: str, project_repo: ProjectRepo, use_inc: bool): str\",\"aggregations\":[\"ProjectRepo\",\"Document\"]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]},\"write_code\":{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_code(prompt): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"ProjectRepo\",\"Document\",\"CodingContext\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:get_codes"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/write_code.py:WriteCode:write_code"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_code.py:WriteCode", "target": "?:ProjectRepo"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_code.py:WriteCode", "target": "?:Document"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_code.py:WriteCode", "target": "?:CodingContext"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_code.py:WriteCode", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:WriteCode", "target": "{\"lineno\":87,\"end_lineno\":219,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCode\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_code.py:WriteCode", "target": "{\"name\":\"WriteCode\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:get_codes", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:get_codes", "target": "{\"name\":\"get_codes\",\"args\":[{\"name\":\"task_doc\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"task_doc: Document\",\"compositions\":[\"Document\"]},{\"name\":\"exclude\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"exclude: str\",\"compositions\":[]},{\"name\":\"project_repo\",\"type_\":\"ProjectRepo\",\"default_\":\"\",\"description\":\"project_repo: ProjectRepo\",\"compositions\":[\"ProjectRepo\"]},{\"name\":\"use_inc\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_inc: bool\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_codes(task_doc: Document, exclude: str, project_repo: ProjectRepo, use_inc: bool): str\",\"aggregations\":[\"ProjectRepo\",\"Document\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:WriteCode:write_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code.py:WriteCode:write_code", "target": "{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_code(prompt): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_code_an_draft.py", "target": "metagpt/actions/write_code_an_draft.py:WriteCodeAN"}, {"predicate": "has_function", "source": "metagpt/actions/write_code_an_draft.py", "target": "metagpt/actions/write_code_an_draft.py:main"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "{\"name\":\"WriteCodeAN\",\"package\":\"metagpt/actions/write_code_an_draft.py:WriteCodeAN\",\"attributes\":{},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "metagpt/actions/write_code_an_draft.py:WriteCodeAN:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "{\"lineno\":576,\"end_lineno\":581,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeAN\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN", "target": "{\"name\":\"WriteCodeAN\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_an_draft.py:WriteCodeAN:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_code_plan_and_change_an.py", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "{\"name\":\"WriteCodePlanAndChange\",\"package\":\"metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"get_old_codes\":{\"name\":\"get_old_codes\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_old_codes(): str\",\"aggregations\":[]},\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:get_old_codes"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "{\"lineno\":185,\"end_lineno\":210,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodePlanAndChange\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange", "target": "{\"name\":\"WriteCodePlanAndChange\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:get_old_codes", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:get_old_codes", "target": "{\"name\":\"get_old_codes\",\"args\":[],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"get_old_codes(): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_plan_and_change_an.py:WriteCodePlanAndChange:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_code_review.py", "target": "metagpt/actions/write_code_review.py:WriteCodeReview"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "{\"name\":\"WriteCodeReview\",\"package\":\"metagpt/actions/write_code_review.py:WriteCodeReview\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]},\"write_code_review_and_rewrite\":{\"name\":\"write_code_review_and_rewrite\",\"args\":[{\"name\":\"context_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context_prompt\",\"compositions\":[]},{\"name\":\"cr_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cr_prompt\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filename\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code_review_and_rewrite(context_prompt, cr_prompt, filename)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"CodingContext\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/write_code_review.py:WriteCodeReview:write_code_review_and_rewrite"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "?:CodingContext"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "{\"lineno\":121,\"end_lineno\":199,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteCodeReview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_code_review.py:WriteCodeReview", "target": "{\"name\":\"WriteCodeReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"i_context\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"CodingContext\",\"description\":\"CodingContext\",\"compositions\":[\"CodingContext\"]},\"description\":\"run(): CodingContext\",\"aggregations\":[\"CodingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:write_code_review_and_rewrite", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_code_review.py:WriteCodeReview:write_code_review_and_rewrite", "target": "{\"name\":\"write_code_review_and_rewrite\",\"args\":[{\"name\":\"context_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context_prompt\",\"compositions\":[]},{\"name\":\"cr_prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"cr_prompt\",\"compositions\":[]},{\"name\":\"filename\",\"type_\":\"\",\"default_\":\"\",\"description\":\"filename\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code_review_and_rewrite(context_prompt, cr_prompt, filename)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_tutorial.py", "target": "metagpt/actions/write_tutorial.py:WriteContent"}, {"predicate": "has_class", "source": "metagpt/actions/write_tutorial.py", "target": "metagpt/actions/write_tutorial.py:WriteDirectory"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "{\"name\":\"WriteContent\",\"package\":\"metagpt/actions/write_tutorial.py:WriteContent\",\"attributes\":{\"directory\":{\"name\":\"directory\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"directory : dict\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str): str\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/write_tutorial.py:WriteContent:directory"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/write_tutorial.py:WriteContent:language"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/write_tutorial.py:WriteContent:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/write_tutorial.py:WriteContent:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "{\"lineno\":42,\"end_lineno\":65,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteContent\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_tutorial.py:WriteContent", "target": "{\"name\":\"WriteContent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"directory\",\"visibility\":\"+\",\"value_type\":\"dict\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent:directory", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent:directory", "target": "{\"name\":\"directory\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"directory : dict\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteContent:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteContent:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(topic: str): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/design_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/design_api.py", "target": "metagpt/actions/design_api.py:WriteDesign"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "{\"name\":\"WriteDesign\",\"package\":\"metagpt/actions/design_api.py:WriteDesign\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"with_messages: Message\",\"compositions\":[\"Message\"]},{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages: Message, schema: str)\",\"aggregations\":[\"Message\"]}},\"compositions\":[],\"aggregations\":[\"Message\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "?:Message"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_new_system_design"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_merge"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_update_system_design"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_save_data_api_design"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_save_seq_flow"}, {"predicate": "has_class_method", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "metagpt/actions/design_api.py:WriteDesign:_save_mermaid_file"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "{\"lineno\":39,\"end_lineno\":120,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDesign\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "{\"name\":\"WriteDesign\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "{\"description\":\"The source code defines a class `WriteDesign` that represents an action to generate system design based on PRD and design documents. It includes methods to update system design, merge PRD and system design, save data API design, and save sequence flow.\",\"use_cases\":[{\"description\":\"Generate system design based on PRD and design documents\",\"inputs\":[\"with_messages\",\"schema\"],\"outputs\":[\"content\",\"instruct_content\"],\"actors\":[\"Message\"],\"steps\":[\"Identify which PRD documents and design documents have been modified\",\"Regenerate the design content for the modified documents\",\"Wait for all files to be processed before sending the publish message\"],\"reason\":\"When there are changes in PRD and design documents, the system needs to generate the corresponding system design.\"}],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/actions/design_api.py:WriteDesign", "target": "\nsequenceDiagram\n participant Action\n participant Message\n\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n\n"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/design_api.py:WriteDesign:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"Message\",\"default_\":\"\",\"description\":\"with_messages: Message\",\"compositions\":[\"Message\"]},{\"name\":\"schema\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"schema: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages: Message, schema: str)\",\"aggregations\":[\"Message\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "{\"name\":\"WriteDirectory\",\"package\":\"metagpt/actions/write_tutorial.py:WriteDirectory\",\"attributes\":{\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"run(topic: str): Dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "metagpt/actions/write_tutorial.py:WriteDirectory:language"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "metagpt/actions/write_tutorial.py:WriteDirectory:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "metagpt/actions/write_tutorial.py:WriteDirectory:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "{\"lineno\":17,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDirectory\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_tutorial.py:WriteDirectory", "target": "{\"name\":\"WriteDirectory\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_tutorial.py:WriteDirectory:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"run(topic: str): Dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_docstring.py", "target": "metagpt/actions/write_docstring.py:WriteDocstring"}, {"predicate": "has_function", "source": "metagpt/actions/write_docstring.py", "target": "metagpt/actions/write_docstring.py:_simplify_python_code"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "{\"name\":\"WriteDocstring\",\"package\":\"metagpt/actions/write_docstring.py:WriteDocstring\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(code: str, system_text: str, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[]},\"write_docstring\":{\"name\":\"write_docstring\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"overwrite\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"overwrite: bool\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_docstring(filename: str \\\\| Path, overwrite: bool, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[\"str\\\\\",\"Path\"]}},\"compositions\":[],\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/write_docstring.py:WriteDocstring:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/write_docstring.py:WriteDocstring:i_context"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/write_docstring.py:WriteDocstring:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/write_docstring.py:WriteDocstring:write_docstring"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "?:str\\"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "?:Path"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "{\"lineno\":156,\"end_lineno\":196,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteDocstring\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_docstring.py:WriteDocstring", "target": "{\"name\":\"WriteDocstring\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"code\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"code: str\",\"compositions\":[]},{\"name\":\"system_text\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"system_text: str\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"run(code: str, system_text: str, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:WriteDocstring:write_docstring", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_docstring.py:WriteDocstring:write_docstring", "target": "{\"name\":\"write_docstring\",\"args\":[{\"name\":\"filename\",\"type_\":\"str\\\\|Path\",\"default_\":\"\",\"description\":\"filename: str \\\\| Path\",\"compositions\":[\"Path\",\"str\\\\\"]},{\"name\":\"overwrite\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"overwrite: bool\",\"compositions\":[]},{\"name\":\"style\",\"type_\":\"Literal['google','numpy','sphinx']\",\"default_\":\"\",\"description\":\"style: Literal['google', 'numpy', 'sphinx']\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"write_docstring(filename: str \\\\| Path, overwrite: bool, style: Literal['google', 'numpy', 'sphinx']): str\",\"aggregations\":[\"str\\\\\",\"Path\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_prd.py", "target": "metagpt/actions/write_prd.py:WritePRD"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "{\"name\":\"WritePRD\",\"package\":\"metagpt/actions/write_prd.py:WritePRD\",\"attributes\":{\"project_name\":{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}},\"methods\":{\"get_related_docs\":{\"name\":\"get_related_docs\",\"args\":[{\"name\":\"req\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"req: Document\",\"compositions\":[\"Document\"]},{\"name\":\"docs\",\"type_\":\"list[Document]\",\"default_\":\"\",\"description\":\"docs: list[Document]\",\"compositions\":[\"Document\"]}],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_related_docs(req: Document, docs: list[Document]): list[Document]\",\"aggregations\":[\"Document\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionOutput\\\\|Message\",\"description\":\"ActionOutput \\\\| Message\",\"compositions\":[\"ActionOutput\\\\\",\"Message\"]},\"description\":\"run(with_messages): ActionOutput \\\\| Message\",\"aggregations\":[\"Message\",\"ActionOutput\\\\\"]}},\"compositions\":[],\"aggregations\":[\"Document\",\"Message\",\"ActionOutput\\\\\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:project_name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:get_related_docs"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "?:Document"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "?:Message"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "?:ActionOutput\\"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_handle_bugfix"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_handle_new_requirement"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_handle_requirement_update"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_is_bugfix"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_is_related"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_merge"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_update_prd"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_save_competitive_analysis"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "metagpt/actions/write_prd.py:WritePRD:_rename_workspace"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "{\"lineno\":61,\"end_lineno\":172,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePRD\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_prd.py:WritePRD", "target": "{\"name\":\"WritePRD\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"project_name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:project_name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd.py:WritePRD:project_name", "target": "{\"name\":\"project_name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"project_name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:get_related_docs", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd.py:WritePRD:get_related_docs", "target": "{\"name\":\"get_related_docs\",\"args\":[{\"name\":\"req\",\"type_\":\"Document\",\"default_\":\"\",\"description\":\"req: Document\",\"compositions\":[\"Document\"]},{\"name\":\"docs\",\"type_\":\"list[Document]\",\"default_\":\"\",\"description\":\"docs: list[Document]\",\"compositions\":[\"Document\"]}],\"return_args\":{\"type_\":\"list[Document]\",\"description\":\"list[Document]\",\"compositions\":[\"Document\"]},\"description\":\"get_related_docs(req: Document, docs: list[Document]): list[Document]\",\"aggregations\":[\"Document\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd.py:WritePRD:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"ActionOutput\\\\|Message\",\"description\":\"ActionOutput \\\\| Message\",\"compositions\":[\"ActionOutput\\\\\",\"Message\"]},\"description\":\"run(with_messages): ActionOutput \\\\| Message\",\"aggregations\":[\"Message\",\"ActionOutput\\\\\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_prd_review.py", "target": "metagpt/actions/write_prd_review.py:WritePRDReview"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "{\"name\":\"WritePRDReview\",\"package\":\"metagpt/actions/write_prd_review.py:WritePRDReview\",\"attributes\":{\"desc\":{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]},\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]},\"prd\":{\"name\":\"prd\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"prd : Optional[str]\",\"compositions\":[]},\"prd_review_prompt_template\":{\"name\":\"prd_review_prompt_template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_review_prompt_template : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:desc"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:name"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:prd"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:prd_review_prompt_template"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/write_prd_review.py:WritePRDReview:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "{\"lineno\":14,\"end_lineno\":31,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WritePRDReview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_prd_review.py:WritePRDReview", "target": "{\"name\":\"WritePRDReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"desc\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"prd\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"prd_review_prompt_template\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:desc", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:desc", "target": "{\"name\":\"desc\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"desc : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:prd", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:prd", "target": "{\"name\":\"prd\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"prd : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:prd_review_prompt_template", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:prd_review_prompt_template", "target": "{\"name\":\"prd_review_prompt_template\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"prd_review_prompt_template : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_prd_review.py:WritePRDReview:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"prd\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prd\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(prd)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_review.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_review.py", "target": "metagpt/actions/write_review.py:WriteReview"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:WriteReview", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_review.py:WriteReview", "target": "{\"name\":\"WriteReview\",\"package\":\"metagpt/actions/write_review.py:WriteReview\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_review.py:WriteReview", "target": "metagpt/actions/write_review.py:WriteReview:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_review.py:WriteReview", "target": "metagpt/actions/write_review.py:WriteReview:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_review.py:WriteReview", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:WriteReview", "target": "{\"lineno\":33,\"end_lineno\":39,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteReview\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_review.py:WriteReview", "target": "{\"name\":\"WriteReview\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:WriteReview:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_review.py:WriteReview:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:WriteReview:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_review.py:WriteReview:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"context\",\"type_\":\"\",\"default_\":\"\",\"description\":\"context\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(context)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/project_management.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/project_management.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/project_management.py", "target": "metagpt/actions/project_management.py:WriteTasks"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "{\"name\":\"WriteTasks\",\"package\":\"metagpt/actions/project_management.py:WriteTasks\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:run"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:_update_tasks"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:_run_new_tasks"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:_merge"}, {"predicate": "has_class_method", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "metagpt/actions/project_management.py:WriteTasks:_update_requirements"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "{\"lineno\":32,\"end_lineno\":96,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTasks\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "{\"name\":\"WriteTasks\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "has_class_use_case", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "{\"description\":\"The source code defines a class 'WriteTasks' that is responsible for creating and updating tasks based on changes in system designs and task files. It also handles merging and updating requirements related to the tasks.\",\"use_cases\":[{\"description\":\"Create and update tasks based on changes in system designs and task files\",\"inputs\":[\"changed_system_designs\",\"changed_tasks\"],\"outputs\":[\"change_files\"],\"actors\":[\"WriteTasks\"],\"steps\":[\"Identify the system designs and task files that have undergone changes\",\"Update the system designs and task files\",\"Merge the updated system designs and task files\",\"Update the requirements related to the tasks\"],\"reason\":\"When there are changes in the system designs or task files, the system needs to create and update tasks accordingly.\"}],\"relationship\":[]}"}, {"predicate": "has_sequence_view", "source": "metagpt/actions/project_management.py:WriteTasks", "target": "\nsequenceDiagram\n participant WriteTasks\n\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/project_management.py:WriteTasks:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/project_management.py:WriteTasks:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/project_management.py:WriteTasks:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_messages\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_messages\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_messages)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "{\"name\":\"WriteTeachingPlanPart\",\"package\":\"metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]},\"language\":{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]},\"rsp\":{\"name\":\"rsp\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"rsp : Optional[str]\",\"compositions\":[]},\"topic\":{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}},\"methods\":{\"format_value\":{\"name\":\"format_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"format_value(value, context: Context)\",\"aggregations\":[\"Context\"]},\"run\":{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_message)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"Context\"]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:language"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:rsp"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:topic"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:format_value"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:run"}, {"predicate": "isAggregateOf", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "?:Context"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:_set_result"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__str__"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__repr__"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "{\"lineno\":15,\"end_lineno\":89,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTeachingPlanPart\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart", "target": "{\"name\":\"WriteTeachingPlanPart\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"language\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"rsp\",\"visibility\":\"+\",\"value_type\":\"Optional[str]\",\"default_value\":\"\"},{\"name\":\"topic\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"i_context : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:language", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:language", "target": "{\"name\":\"language\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"language : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:rsp", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:rsp", "target": "{\"name\":\"rsp\",\"type_\":\"Optional[str]\",\"default_\":\"\",\"description\":\"rsp : Optional[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:topic", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:topic", "target": "{\"name\":\"topic\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"topic : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:format_value", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:format_value", "target": "{\"name\":\"format_value\",\"args\":[{\"name\":\"value\",\"type_\":\"\",\"default_\":\"\",\"description\":\"value\",\"compositions\":[]},{\"name\":\"context\",\"type_\":\"Context\",\"default_\":\"\",\"description\":\"context: Context\",\"compositions\":[\"Context\"]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"format_value(value, context: Context)\",\"aggregations\":[\"Context\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:run", "target": "{\"name\":\"run\",\"args\":[{\"name\":\"with_message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"with_message\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"run(with_message)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_test.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/write_test.py", "target": "metagpt/actions/write_test.py:WriteTest"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest", "target": "{\"name\":\"WriteTest\",\"package\":\"metagpt/actions/write_test.py:WriteTest\",\"attributes\":{\"i_context\":{\"name\":\"i_context\",\"type_\":\"Optional[TestingContext]\",\"default_\":\"\",\"description\":\"i_context : Optional[TestingContext]\",\"compositions\":[\"TestingContext\"]},\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{\"run\":{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"TestingContext\",\"description\":\"TestingContext\",\"compositions\":[\"TestingContext\"]},\"description\":\"run(): TestingContext\",\"aggregations\":[\"TestingContext\"]},\"write_code\":{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code(prompt)\",\"aggregations\":[]}},\"compositions\":[\"TestingContext\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/write_test.py:WriteTest:i_context"}, {"predicate": "has_class_property", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/write_test.py:WriteTest:name"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/write_test.py:WriteTest:run"}, {"predicate": "has_class_method", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/write_test.py:WriteTest:write_code"}, {"predicate": "isGeneralizeOf", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/actions/action.py:Action"}, {"predicate": "is_composite_of", "source": "metagpt/actions/write_test.py:WriteTest", "target": "metagpt/schema.py:TestingContext"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:WriteTest", "target": "{\"lineno\":40,\"end_lineno\":70,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WriteTest\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/actions/write_test.py:WriteTest", "target": "{\"name\":\"WriteTest\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"i_context\",\"visibility\":\"+\",\"value_type\":\"Optional[TestingContext]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/actions/write_test.py:WriteTest", "target": "?:TestingContext"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest:i_context", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest:i_context", "target": "{\"name\":\"i_context\",\"type_\":\"Optional[TestingContext]\",\"default_\":\"\",\"description\":\"i_context : Optional[TestingContext]\",\"compositions\":[\"TestingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest:run", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest:run", "target": "{\"name\":\"run\",\"args\":[],\"return_args\":{\"type_\":\"TestingContext\",\"description\":\"TestingContext\",\"compositions\":[\"TestingContext\"]},\"description\":\"run(): TestingContext\",\"aggregations\":[\"TestingContext\"]}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:WriteTest:write_code", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/actions/write_test.py:WriteTest:write_code", "target": "{\"name\":\"write_code\",\"args\":[{\"name\":\"prompt\",\"type_\":\"\",\"default_\":\"\",\"description\":\"prompt\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"write_code(prompt)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "{\"name\":\"WsParam\",\"package\":\"metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam\",\"attributes\":{\"api_key\":{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key\",\"compositions\":[]},\"api_secret\":{\"name\":\"api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_secret\",\"compositions\":[]},\"app_id\":{\"name\":\"app_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"app_id\",\"compositions\":[]},\"host\":{\"name\":\"host\",\"type_\":\"\",\"default_\":\"\",\"description\":\"host\",\"compositions\":[]},\"message\":{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message : NoneType\",\"compositions\":[]},\"path\":{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]},\"spark_url\":{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}},\"methods\":{\"create_url\":{\"name\":\"create_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_key"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_secret"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:app_id"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:host"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:message"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:path"}, {"predicate": "has_class_property", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:spark_url"}, {"predicate": "has_class_method", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:create_url"}, {"predicate": "has_class_view", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam", "target": "{\"name\":\"WsParam\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"api_key\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"api_secret\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"app_id\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"host\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"message\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"path\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"spark_url\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_key", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_key", "target": "{\"name\":\"api_key\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_key\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_secret", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:api_secret", "target": "{\"name\":\"api_secret\",\"type_\":\"\",\"default_\":\"\",\"description\":\"api_secret\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:app_id", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:app_id", "target": "{\"name\":\"app_id\",\"type_\":\"\",\"default_\":\"\",\"description\":\"app_id\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:host", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:host", "target": "{\"name\":\"host\",\"type_\":\"\",\"default_\":\"\",\"description\":\"host\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:message", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:message", "target": "{\"name\":\"message\",\"type_\":\"\",\"default_\":\"\",\"description\":\"message : NoneType\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:path", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:path", "target": "{\"name\":\"path\",\"type_\":\"\",\"default_\":\"\",\"description\":\"path\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:spark_url", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:spark_url", "target": "{\"name\":\"spark_url\",\"type_\":\"\",\"default_\":\"\",\"description\":\"spark_url\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:create_url", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:WsParam:create_url", "target": "{\"name\":\"create_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"create_url()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/utils/yaml_model.py", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "has_class", "source": "metagpt/utils/yaml_model.py", "target": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "{\"name\":\"YamlModel\",\"package\":\"metagpt/utils/yaml_model.py:YamlModel\",\"attributes\":{\"extra_fields\":{\"name\":\"extra_fields\",\"type_\":\"Optional[Dict[str,str]]\",\"default_\":\"\",\"description\":\"extra_fields : Optional[Dict[str, str]]\",\"compositions\":[]}},\"methods\":{\"from_yaml_file\":{\"name\":\"from_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'YamlModel'\",\"description\":\"'YamlModel'\",\"compositions\":[\"YamlModel\"]},\"description\":\"from_yaml_file(file_path: Path): 'YamlModel'\",\"aggregations\":[\"Path\",\"YamlModel\"]},\"read_yaml\":{\"name\":\"read_yaml\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"read_yaml(file_path: Path, encoding: str): Dict\",\"aggregations\":[\"Path\"]},\"to_yaml_file\":{\"name\":\"to_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"to_yaml_file(file_path: Path, encoding: str): None\",\"aggregations\":[\"Path\"]}},\"compositions\":[],\"aggregations\":[\"Path\",\"YamlModel\"]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "metagpt/utils/yaml_model.py:YamlModel:extra_fields"}, {"predicate": "has_class_method", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "metagpt/utils/yaml_model.py:YamlModel:from_yaml_file"}, {"predicate": "has_class_method", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "metagpt/utils/yaml_model.py:YamlModel:read_yaml"}, {"predicate": "has_class_method", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "metagpt/utils/yaml_model.py:YamlModel:to_yaml_file"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "?:Path"}, {"predicate": "isAggregateOf", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "?:YamlModel"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "{\"lineno\":15,\"end_lineno\":36,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"YamlModel\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/yaml_model.py:YamlModel", "target": "{\"name\":\"YamlModel\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"extra_fields\",\"visibility\":\"+\",\"value_type\":\"Optional[Dict[str,str]]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel:extra_fields", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel:extra_fields", "target": "{\"name\":\"extra_fields\",\"type_\":\"Optional[Dict[str,str]]\",\"default_\":\"\",\"description\":\"extra_fields : Optional[Dict[str, str]]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel:from_yaml_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel:from_yaml_file", "target": "{\"name\":\"from_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]}],\"return_args\":{\"type_\":\"'YamlModel'\",\"description\":\"'YamlModel'\",\"compositions\":[\"YamlModel\"]},\"description\":\"from_yaml_file(file_path: Path): 'YamlModel'\",\"aggregations\":[\"Path\",\"YamlModel\"]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel:read_yaml", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel:read_yaml", "target": "{\"name\":\"read_yaml\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"Dict\",\"description\":\"Dict\",\"compositions\":[]},\"description\":\"read_yaml(file_path: Path, encoding: str): Dict\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModel:to_yaml_file", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModel:to_yaml_file", "target": "{\"name\":\"to_yaml_file\",\"args\":[{\"name\":\"file_path\",\"type_\":\"Path\",\"default_\":\"\",\"description\":\"file_path: Path\",\"compositions\":[\"Path\"]},{\"name\":\"encoding\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"encoding: str\",\"compositions\":[]}],\"return_args\":{\"type_\":\"None\",\"description\":\"None\",\"compositions\":[]},\"description\":\"to_yaml_file(file_path: Path, encoding: str): None\",\"aggregations\":[\"Path\"]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "{\"name\":\"YamlModelWithoutDefault\",\"package\":\"metagpt/utils/yaml_model.py:YamlModelWithoutDefault\",\"attributes\":{},\"methods\":{\"check_not_default_config\":{\"name\":\"check_not_default_config\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_not_default_config(values)\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_method", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault:check_not_default_config"}, {"predicate": "isGeneralizeOf", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "metagpt/utils/yaml_model.py:YamlModel"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "{\"lineno\":39,\"end_lineno\":48,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"YamlModelWithoutDefault\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault", "target": "{\"name\":\"YamlModelWithoutDefault\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault:check_not_default_config", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/yaml_model.py:YamlModelWithoutDefault:check_not_default_config", "target": "{\"name\":\"check_not_default_config\",\"args\":[{\"name\":\"values\",\"type_\":\"\",\"default_\":\"\",\"description\":\"values\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"check_not_default_config(values)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/zhipuai_api.py", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM"}, {"predicate": "has_class", "source": "metagpt/provider/zhipuai_api.py", "target": "metagpt/provider/zhipuai_api.py:ZhiPuEvent"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "{\"name\":\"ZhiPuAILLM\",\"package\":\"metagpt/provider/zhipuai_api.py:ZhiPuAILLM\",\"attributes\":{\"config\":{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]},\"llm\":{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]},\"model\":{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]},\"use_system_prompt\":{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}},\"methods\":{\"acompletion\":{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]},\"acompletion_text\":{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]},\"completion\":{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"completion(messages: list[dict], timeout): dict\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:model"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:use_system_prompt"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion_text"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:completion"}, {"predicate": "isGeneralizeOf", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init__"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init_zhipuai"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_const_kwargs"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_update_costs"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion_stream"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "{\"lineno\":34,\"end_lineno\":116,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuAILLM\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM", "target": "{\"name\":\"ZhiPuAILLM\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"config\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"llm\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"model\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"use_system_prompt\",\"visibility\":\"+\",\"value_type\":\"bool\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:config", "target": "{\"name\":\"config\",\"type_\":\"\",\"default_\":\"\",\"description\":\"config\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm", "target": "{\"name\":\"llm\",\"type_\":\"\",\"default_\":\"\",\"description\":\"llm\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:model", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:model", "target": "{\"name\":\"model\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"model : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:use_system_prompt", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:use_system_prompt", "target": "{\"name\":\"use_system_prompt\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"use_system_prompt : bool\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion", "target": "{\"name\":\"acompletion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acompletion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion_text", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:acompletion_text", "target": "{\"name\":\"acompletion_text\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"stream\",\"type_\":\"\",\"default_\":\"\",\"description\":\"stream\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"str\",\"description\":\"str\",\"compositions\":[]},\"description\":\"acompletion_text(messages: list[dict], stream, timeout): str\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:completion", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:completion", "target": "{\"name\":\"completion\",\"args\":[{\"name\":\"messages\",\"type_\":\"list[dict]\",\"default_\":\"\",\"description\":\"messages: list[dict]\",\"compositions\":[]},{\"name\":\"timeout\",\"type_\":\"\",\"default_\":\"\",\"description\":\"timeout\",\"compositions\":[]}],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"completion(messages: list[dict], timeout): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "{\"name\":\"ZhiPuEvent\",\"package\":\"metagpt/provider/zhipuai_api.py:ZhiPuEvent\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "metagpt/provider/zhipuai_api.py:ZhiPuEvent:name"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "{\"lineno\":26,\"end_lineno\":30,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuEvent\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent", "target": "{\"name\":\"ZhiPuEvent\",\"visibility\":\"+\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai_api.py:ZhiPuEvent:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/provider/zhipuai/zhipu_model_api.py", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "{\"name\":\"ZhiPuModelAPI\",\"package\":\"metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI\",\"attributes\":{},\"methods\":{\"acreate\":{\"name\":\"acreate\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acreate(): dict\",\"aggregations\":[]},\"acreate_stream\":{\"name\":\"acreate_stream\",\"args\":[],\"return_args\":{\"type_\":\"AsyncSSEClient\",\"description\":\"AsyncSSEClient\",\"compositions\":[\"AsyncSSEClient\"]},\"description\":\"acreate_stream(): AsyncSSEClient\",\"aggregations\":[\"AsyncSSEClient\"]},\"arequest\":{\"name\":\"arequest\",\"args\":[{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream: bool\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"headers: dict\",\"compositions\":[]},{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"arequest(stream: bool, method: str, headers: dict, kwargs)\",\"aggregations\":[]},\"split_zhipu_api_url\":{\"name\":\"split_zhipu_api_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"split_zhipu_api_url()\",\"aggregations\":[]}},\"compositions\":[],\"aggregations\":[\"AsyncSSEClient\"]}"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate_stream"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:arequest"}, {"predicate": "has_class_method", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:split_zhipu_api_url"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "?:AsyncSSEClient"}, {"predicate": "isAggregateOf", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM"}, {"predicate": "isAggregateOn", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:llm"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "{\"lineno\":14,\"end_lineno\":54,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ZhiPuModelAPI\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI", "target": "{\"name\":\"ZhiPuModelAPI\",\"visibility\":\"+\",\"attributes\":[],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate", "target": "{\"name\":\"acreate\",\"args\":[],\"return_args\":{\"type_\":\"dict\",\"description\":\"dict\",\"compositions\":[]},\"description\":\"acreate(): dict\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate_stream", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:acreate_stream", "target": "{\"name\":\"acreate_stream\",\"args\":[],\"return_args\":{\"type_\":\"AsyncSSEClient\",\"description\":\"AsyncSSEClient\",\"compositions\":[\"AsyncSSEClient\"]},\"description\":\"acreate_stream(): AsyncSSEClient\",\"aggregations\":[\"AsyncSSEClient\"]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:arequest", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:arequest", "target": "{\"name\":\"arequest\",\"args\":[{\"name\":\"stream\",\"type_\":\"bool\",\"default_\":\"\",\"description\":\"stream: bool\",\"compositions\":[]},{\"name\":\"method\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"method: str\",\"compositions\":[]},{\"name\":\"headers\",\"type_\":\"dict\",\"default_\":\"\",\"description\":\"headers: dict\",\"compositions\":[]},{\"name\":\"kwargs\",\"type_\":\"\",\"default_\":\"\",\"description\":\"kwargs\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"arequest(stream: bool, method: str, headers: dict, kwargs)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:split_zhipu_api_url", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:ZhiPuModelAPI:split_zhipu_api_url", "target": "{\"name\":\"split_zhipu_api_url\",\"args\":[],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"split_zhipu_api_url()\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill", "target": "{\"name\":\"_AgentSkill\",\"package\":\"metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill\",\"attributes\":{\"name\":{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}},\"methods\":{},\"compositions\":[],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill", "target": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill:name"}, {"predicate": "has_class_view", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill", "target": "{\"name\":\"_AgentSkill\",\"visibility\":\"#\",\"attributes\":[{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "is", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/learn/skill_loader.py:SkillsDeclaration:get_skill_list:_AgentSkill:name", "target": "{\"name\":\"name\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"name : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "class"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "{\"name\":\"_VisualClassView\",\"package\":\"metagpt/utils/visual_graph_repo.py:_VisualClassView\",\"attributes\":{\"aggregations\":{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]},\"compositions\":{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]},\"generalizations\":{\"name\":\"generalizations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"generalizations : List[str]\",\"compositions\":[]},\"name\":{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]},\"package\":{\"name\":\"package\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"package : str\",\"compositions\":[]},\"uml\":{\"name\":\"uml\",\"type_\":\"Optional[UMLClassView]\",\"default_\":\"\",\"description\":\"uml : Optional[UMLClassView]\",\"compositions\":[\"UMLClassView\"]}},\"methods\":{\"get_mermaid\":{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"align: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_mermaid(align: int)\",\"aggregations\":[]}},\"compositions\":[\"UMLClassView\"],\"aggregations\":[]}"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:aggregations"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:compositions"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:generalizations"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:package"}, {"predicate": "has_class_property", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:uml"}, {"predicate": "has_class_method", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/utils/visual_graph_repo.py:_VisualClassView:get_mermaid"}, {"predicate": "is_composite_of", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "metagpt/schema.py:UMLClassView"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "{\"lineno\":25,\"end_lineno\":49,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"_VisualClassView\"],\"properties\":{}}"}, {"predicate": "has_class_view", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "{\"name\":\"_VisualClassView\",\"visibility\":\"#\",\"attributes\":[{\"name\":\"aggregations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"compositions\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"generalizations\",\"visibility\":\"+\",\"value_type\":\"List[str]\",\"default_value\":\"\"},{\"name\":\"name\",\"visibility\":\"+\",\"value_type\":\"\",\"default_value\":\"\"},{\"name\":\"package\",\"visibility\":\"+\",\"value_type\":\"str\",\"default_value\":\"\"},{\"name\":\"uml\",\"visibility\":\"+\",\"value_type\":\"Optional[UMLClassView]\",\"default_value\":\"\"}],\"methods\":[]}"}, {"predicate": "isCompositeOf", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView", "target": "?:UMLClassView"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:aggregations", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:aggregations", "target": "{\"name\":\"aggregations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"aggregations : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:compositions", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:compositions", "target": "{\"name\":\"compositions\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"compositions : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:generalizations", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:generalizations", "target": "{\"name\":\"generalizations\",\"type_\":\"List[str]\",\"default_\":\"\",\"description\":\"generalizations : List[str]\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name", "target": "{\"name\":\"name\",\"type_\":\"\",\"default_\":\"\",\"description\":\"name\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:package", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:package", "target": "{\"name\":\"package\",\"type_\":\"str\",\"default_\":\"\",\"description\":\"package : str\",\"compositions\":[]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:uml", "target": "class_property"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:uml", "target": "{\"name\":\"uml\",\"type_\":\"Optional[UMLClassView]\",\"default_\":\"\",\"description\":\"uml : Optional[UMLClassView]\",\"compositions\":[\"UMLClassView\"]}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:get_mermaid", "target": "class_method"}, {"predicate": "has_detail", "source": "metagpt/utils/visual_graph_repo.py:_VisualClassView:get_mermaid", "target": "{\"name\":\"get_mermaid\",\"args\":[{\"name\":\"align\",\"type_\":\"int\",\"default_\":\"\",\"description\":\"align: int\",\"compositions\":[]}],\"return_args\":{\"type_\":\"\",\"description\":\"\",\"compositions\":[]},\"description\":\"get_mermaid(align: int)\",\"aggregations\":[]}"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassAttribute:_split_literal", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:_parse_name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:DotClassMethod:_parse_args", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_file", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_expr", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_name", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_if", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_if_compare", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_variable", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_assign", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_classes", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_parse_class_relationships", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_split_class_line", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_split_relationship_line", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_get_label", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_create_path_mapping", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_repair_namespaces", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_repair_ns", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:RepoParser:_find_root", "target": "class_method"}, {"predicate": "is", "source": "metagpt/repo_parser.py:is_func", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:is_func", "target": "{\"lineno\":637,\"end_lineno\":638,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_func\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:ast.Constant:\n@Time : 2023/11/17 17:58\n@Author : alexanderwu\n@File : repo_parser.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/17 17:58\\n@Author : alexanderwu\\n@File : repo_parser.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:__future__", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['annotations']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:ast", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:re", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:subprocess", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:pathlib", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['Path']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['Dict', 'List', 'Optional']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:pandas as pd", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:pydantic", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['BaseModel', 'Field', 'field_validator']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:metagpt.const", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['AGGREGATION', 'COMPOSITION', 'GENERALIZATION']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:metagpt.logs", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['logger']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:metagpt.utils.common", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['any_to_str', 'aread']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/repo_parser.py:names:['handle_exception']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/startup.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/startup.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/startup.py", "target": "metagpt/startup.py:generate_repo"}, {"predicate": "has_function", "source": "metagpt/startup.py", "target": "metagpt/startup.py:startup"}, {"predicate": "has_function", "source": "metagpt/startup.py", "target": "metagpt/startup.py:copy_config_to"}, {"predicate": "is", "source": "metagpt/startup.py:generate_repo", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:generate_repo", "target": "{\"lineno\":16,\"end_lineno\":68,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"generate_repo\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/startup.py:startup", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:startup", "target": "{\"lineno\":72,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"startup\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/startup.py:copy_config_to", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:copy_config_to", "target": "{\"lineno\":121,\"end_lineno\":136,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"copy_config_to\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/startup.py:app", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:app", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"app\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:asyncio", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:shutil", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:module:pathlib", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:names:['Path']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:typer", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"typer\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:module:metagpt.config2", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:names:['config']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:module:metagpt.const", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:names:['CONFIG_ROOT', 'METAGPT_ROOT']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:module:metagpt.context", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:names:['Context']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/startup.py:__name__:__main__", "target": "{\"lineno\":139,\"end_lineno\":140,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131222415604:{\nsequenceDiagram\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n```\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:User"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:Typer"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131222533217:{\nsequenceDiagram\n participant ProjectRepo\n participant GitRepository\n participant Path\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/context.py:Context"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131222606110:{\nsequenceDiagram\n participant ProjectRepo\n participant str\n participant Path\n participant GitRepository\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/utils/project_repo.py:ProjectRepo"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:str"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:Path"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131222711914:{\nsequenceDiagram\n participant FileRepository\n participant DependencyFile\n participant Path\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant GitRepository\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n FileRepository->>FileRepository: filter_gitignore(filenames, root_relative_path)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/utils/git_repository.py:GitRepository"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131222829147:{\nsequenceDiagram\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant DependencyFile\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant BaseLLM\n participant LLMConfig\n participant User\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->> FileRepository: get_all(filter_ignored)\n FileRepository ->> FileRepository: retrieve content of all files\n FileRepository ->> Document: return list of document instances\n\n Document ->> FileRepository: get_change_dir_files(dir)\n FileRepository ->> FileRepository: identify changed files within directory\n FileRepository ->> Document: return list of changed files\n\n Document ->> FileRepository: save_doc(doc, dependencies)\n FileRepository ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository ->> Path: convert content of document to Markdown\n FileRepository ->> FileRepository: save content to file with optional suffix\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: delete(filename)\n FileRepository ->> Path: delete file from repository\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n FileRepository->>FileRepository: filter_gitignore(filenames, root_relative_path)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/utils/file_repository.py:FileRepository"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/document.py:Document"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/schema.py:Document"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:List"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:aiofiles"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:os"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:datetime"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:json"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131222928045:{\nsequenceDiagram\n participant User\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant BaseLLM\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/utils/dependency_file.py:DependencyFile"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131223021143:{\nsequenceDiagram\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant User\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/provider/base_llm.py:BaseLLM"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131223126916:{\nsequenceDiagram\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/schema.py:Message"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:AsyncOpenAI"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131223231878:{\nsequenceDiagram\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant Path\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Context\n participant Team\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n BaseLLM -->> Message: rsp\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/configs/llm_config.py:LLMConfig"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:SystemAdministrator"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:LLMSystem"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131223353735:{\nsequenceDiagram\n participant Team\n participant Role\n participant Environment\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/team.py:Team"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131223527497:{\nsequenceDiagram\n participant Role\n participant Team\n participant Environment\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant Message\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/roles/role.py:Role"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131223701562:{\nsequenceDiagram\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProductManager\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/environment.py:Environment"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:Iterable"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:SerializeAsAny"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131223806039:{\nsequenceDiagram\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Architect\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document ->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/roles/product_manager.py:ProductManager"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131223921365:{\nsequenceDiagram\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant ProjectManager\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/roles/architect.py:Architect"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:SourceCode"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131224018623:{\nsequenceDiagram\n participant ProjectManager\n participant WriteTasks\n participant WriteDesign\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n WriteDesign-->>ProjectManager: task_list\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/roles/project_manager.py:ProjectManager"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131224133693:{\nsequenceDiagram\n participant WriteTasks\n participant ProjectManager\n participant WriteDesign\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Message\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/actions/project_management.py:WriteTasks"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131224454452:{\nsequenceDiagram\n participant Action\n participant Message\n participant WriteTasks\n participant ProjectManager\n participant WriteDesign\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Iterable\n participant SerializeAsAny\n participant Team\n participant Context\n participant Path\n participant SystemAdministrator\n participant LLMSystem\n participant User\n participant AsyncOpenAI\n participant BaseLLM\n participant DependencyFile\n participant Document\n participant List\n participant GitRepository\n participant aiofiles\n participant os\n participant datetime\n participant json\n participant FileRepository\n participant Path\\\\\n participant ProjectRepo\n participant str\n participant LLMConfig\n participant Typer\n participant Engineer\n participant QaEngineer\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant NoMoneyException\n participant Logger\n\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/actions/design_api.py:WriteDesign"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131224643506:{\nsequenceDiagram\n participant RunCodeContext\n participant CodeSummarizeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/actions/action.py:Action"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131224806732:{\nsequenceDiagram\n participant User\n participant System\n participant RunCodeContext\n participant CodeSummarizeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant Document\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/schema.py:RunCodeContext"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:System"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131224922674:{\nsequenceDiagram\n participant ExternalSystem\n participant CodeSummarizeContext\n participant User\n participant System\n participant RunCodeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant Document\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>CodeSummarizeContext: Create an empty instance\n loop through filenames\n CodeSummarizeContext->>CodeSummarizeContext: Check if filename is relative to SYSTEM_DESIGN_FILE_REPO\n alt filename is relative to SYSTEM_DESIGN_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set design_filename attribute\n else filename is relative to TASK_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set task_filename attribute\n end\n end\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository ->> FileRepository: get_dependency(filename)\n FileRepository ->> FileRepository: identify changed dependent files\n FileRepository ->> Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/schema.py:CodeSummarizeContext"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:ExternalSystem"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131225037718:{\nsequenceDiagram\n participant Tester\n participant System\n participant ExternalSystem\n participant CodeSummarizeContext\n participant User\n participant RunCodeContext\n participant TestingContext\n participant CodingContext\n participant CodePlanAndChangeContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant Document\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>CodeSummarizeContext: Create an empty instance\n loop through filenames\n CodeSummarizeContext->>CodeSummarizeContext: Check if filename is relative to SYSTEM_DESIGN_FILE_REPO\n alt filename is relative to SYSTEM_DESIGN_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set design_filename attribute\n else filename is relative to TASK_FILE_REPO\n CodeSummarizeContext-->>CodeSummarizeContext: Set task_filename attribute\n end\n end\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/schema.py:TestingContext"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:Tester"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131225231661:{\nsequenceDiagram\n participant User\n participant System\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/schema.py:CodingContext"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131225403302:{\nsequenceDiagram\n participant User\n participant System\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant ProjectManager\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant DocFileRepositories\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team: create company\n Team -> ProductManager: hire\n Team -> Architect: hire\n Team -> ProjectManager: hire\n Team -> Engineer: hire\n Team -> QaEngineer: hire\n Team -> Team: invest\n Team -> Team: run_project\n Team -> Team: run\n}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/utils/common.py:NoMoneyException"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:Logger"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131225530578:{\nsequenceDiagram\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant System\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant ResourceFileRepositories\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file_repository(self._srcs_path)\n ProjectRepo->>ProjectRepo: code_files_exists()\n ProjectRepo->>GitRepository: git_workdir = self.git_repo.workdir\n ProjectRepo->>Path: src_workdir = git_workdir / git_workdir.name\n ProjectRepo->>Path: return Path(path).relative_to(self.workdir)\n ProjectRepo->>Path: return Path(path)\n ProjectRepo->>ProjectRepo: with_src_path(path)\n ProjectRepo->>ProjectRepo: src_relative_path\n ProjectRepo->>Path: return self._srcs_path\n ProjectRepo->>Path: Create a new os.environ object\n Path->>Path: Copy the current os.environ object\n Path-->>ProjectRepo: env\n BaseLLM->>LLMConfig: Obtain a LLM (Language Model) instance with a cost manager\n LLMConfig-->>BaseLLM: llm\n User -> Typer: startup command\n Typer -> generate_repo: call with arguments\n generate_repo -> config: update_via_cli\n config -> Context: initialize\n Context -> Team}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/utils/project_repo.py:DocFileRepositories"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:Developer"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131225710350:{\nsequenceDiagram\n participant System\n System->>ResourceFileRepositories: git_repo\n activate ResourceFileRepositories\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=COMPETITIVE_ANALYSIS_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=DATA_API_DESIGN_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SEQ_FLOW_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SYSTEM_DESIGN_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=PRD_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=TASK_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_SUMMARIES_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SD_OUTPUT_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_PLAN_AND_CHANGE_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=VISUAL_GRAPH_REPO_FILE_REPO)\n deactivate ResourceFileRepositories\n\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant Engineer\n participant QaEngineer\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>ProjectRepo: self._srcs_path = None\n ProjectRepo->>ProjectRepo: requirement\n ProjectRepo->>DocFileRepositories: return await self.docs.get(filename=REQUIREMENT_FILENAME)\n ProjectRepo->>ProjectRepo: git_repo\n ProjectRepo->>GitRepository: return self._git_repo\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>ProjectRepo: srcs\n ProjectRepo->>ProjectRepo: raise ValueError(\"Call with_srcs first.\")\n ProjectRepo->>GitRepository: return self._git_repo.new_file}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/utils/project_repo.py:ResourceFileRepositories"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:generate_repo"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "?:config"}, {"predicate": "has_sequence_view", "source": "metagpt/startup.py:__name__:__main__", "target": "\nsequenceDiagram\n participant Engineer\n participant System\n participant ResourceFileRepositories\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant QaEngineer\n\n Engineer->>Engineer: action_description\n Engineer->>Engineer: list code_todos\n Engineer->>Engineer: str constraints\n Engineer->>Engineer: str goal\n Engineer->>Engineer: int n_borg\n Engineer->>Engineer: int n_summarize\n Engineer->>Engineer: str name\n Engineer->>Engineer: str next_todo_action\n Engineer->>Engineer: str profile\n Engineer->>Engineer: src_workspace\n Engineer->>Engineer: list summarize_todos\n Engineer->>Engineer: bool use_code_review\n\n System->>ResourceFileRepositories: git_repo\n activate ResourceFileRepositories\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=COMPETITIVE_ANALYSIS_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=DATA_API_DESIGN_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SEQ_FLOW_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SYSTEM_DESIGN_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=PRD_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=TASK_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_SUMMARIES_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SD_OUTPUT_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_PLAN_AND_CHANGE_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=VISUAL_GRAPH_REPO_FILE_REPO)\n deactivate ResourceFileRepositories\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>"}, {"predicate": "has_sequence_view_ver", "source": "metagpt/startup.py:__name__:__main__", "target": "20240131225840129:{\nsequenceDiagram\n participant Engineer\n participant System\n participant ResourceFileRepositories\n participant ProjectManager\n participant Developer\n participant DocFileRepositories\n participant User\n participant CodingContext\n participant Document\n participant Tester\n participant ExternalSystem\n participant CodeSummarizeContext\n participant RunCodeContext\n participant TestingContext\n participant Action\n participant WriteTasks\n participant SourceCode\n participant Architect\n participant ProductManager\n participant Environment\n participant Role\n participant Team\n participant Path\n participant NoMoneyException\n participant Logger\n participant SystemAdministrator\n participant LLMSystem\n participant Message\n participant BaseLLM\n participant AsyncOpenAI\n participant DependencyFile\n participant FileRepository\n participant GitRepository\n participant ProjectRepo\n participant Typer\n participant generate_repo\n participant config\n participant Context\n participant QaEngineer\n\n Engineer->>Engineer: action_description\n Engineer->>Engineer: list code_todos\n Engineer->>Engineer: str constraints\n Engineer->>Engineer: str goal\n Engineer->>Engineer: int n_borg\n Engineer->>Engineer: int n_summarize\n Engineer->>Engineer: str name\n Engineer->>Engineer: str next_todo_action\n Engineer->>Engineer: str profile\n Engineer->>Engineer: src_workspace\n Engineer->>Engineer: list summarize_todos\n Engineer->>Engineer: bool use_code_review\n\n System->>ResourceFileRepositories: git_repo\n activate ResourceFileRepositories\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=COMPETITIVE_ANALYSIS_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=DATA_API_DESIGN_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SEQ_FLOW_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SYSTEM_DESIGN_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=PRD_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=TASK_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_SUMMARIES_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=SD_OUTPUT_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=CODE_PLAN_AND_CHANGE_PDF_FILE_REPO)\n ResourceFileRepositories->>git_repo: new_file_repository(relative_path=VISUAL_GRAPH_REPO_FILE_REPO)\n deactivate ResourceFileRepositories\n\n User->>SourceCode: Define custom exception class NoMoneyException\n SourceCode->>SourceCode: Define __init__ method\\nand __str__ method\\nfor NoMoneyException\n ProjectManager ->> DocFileRepositories: Create DocFileRepositories instance\n Developer ->> DocFileRepositories: Create DocFileRepositories instance\n DocFileRepositories ->> DocFileRepositories: Initialize with git_repo\n DocFileRepositories ->> DocFileRepositories: Create file repositories for PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> ProjectManager: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n DocFileRepositories -->> Developer: Return PRDs, system design, tasks, code summaries, graph repository, class view, and code plan and change\n User ->> System: provides a filename as input\n System ->> CodingContext: creates a new CodingContext object with the provided filename\n System -->> User: returns the created CodingContext object\n User ->> System: provides the coding context and the updated design document as input\n System ->> CodingContext: updates the design document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated task document as input\n System ->> CodingContext: updates the task document in the provided coding context\n System -->> User: returns the updated coding context\n User ->> System: provides the coding context and the updated code document as input\n System ->> CodingContext: updates the code document in the provided coding context\n System -->> User: returns the updated coding context\n Tester ->> System: provide filename, code_doc\n System ->> System: create new TestingContext object with filename and code_doc\n System -->> Tester: return testing_context\n ExternalSystem->>CodeSummarizeContext: loads(filenames: List[str])\n activate CodeSummarizeContext\n CodeSummarizeContext-->>ExternalSystem: ctx: CodeSummarizeContext\n deactivate CodeSummarizeContext\n User->>System: provides the code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided code in script mode\n System->>System: generates an output after executing the code\n User->>System: provides the test code to be executed\n User->>System: specifies the working directory for code execution\n User->>System: may provide additional python paths if required\n System->>System: runs the provided test code\n System->>System: generates an output after executing the test code\n RunCodeContext->>Action: set_prefix(prefix)\n Action->>Action: prefix = prefix\n Action->>Action: llm.system_prompt = prefix\n Action->>Action: node.llm = llm (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run_action_node(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: return\n RunCodeContext->>Action: run(args, kwargs) (if node is not None)\n Action-->>RunCodeContext: NotImplementedError\n Action->>Action: run(with_messages, schema)\n Action->>Action: _update_system_design(filename)\n Action->>Action: _merge(prd_doc, system_design_doc)\n Action->>Action: _save_data_api_design(design_doc)\n Action->>Action: _save_seq_flow(design_doc)\n Action->>Action: _save_mermaid_file(data, pathname)\n Action->>Action: resources.system_design.save_pdf(doc)\n WriteTasks->>+WriteTasks: run(with_messages)\n WriteTasks->>+WriteTasks: _update_tasks(filename)\n WriteTasks->>+WriteTasks: _merge(system_design_doc, task_doc)\n WriteTasks->>+WriteTasks: _update_requirements(doc)\n WriteTasks-->>-WriteTasks: ActionOutput(content, instruct_content)\n ProjectManager->>WriteTasks: Receive task list and task dependencies\n WriteTasks-->>ProjectManager: task_breakdown\n ProjectManager->>WriteDesign: Receive user requirement and technical design\n SourceCode->>Architect: class Architect(Role)\n SourceCode->>Architect: name: str = \"Bob\"\n SourceCode->>Architect: profile: str = \"Architect\"\n SourceCode->>Architect: goal: str = \"design a concise, usable, complete software system\"\n SourceCode->>Architect: constraints: str = \"make sure the architecture is simple enough and use appropriate open source libraries. Use same language as user requirement\"\n SourceCode->>Architect: __init__(self, **kwargs) -> None\n Architect->>Architect: super().__init__(**kwargs)\n Architect->>Architect: self.set_actions([WriteDesign])\n Architect->>Architect: self._watch({WritePRD})\n ProductManager->>+ProductManager: _think()\n alt git repository exists and git reinitialization not set\n ProductManager->>+ProductManager: _set_state(1)\n else conditions not met\n ProductManager->>+ProductManager: _set_state(0)\n ProductManager->>+ProductManager: config.git_reinit = False\n ProductManager->>+ProductManager: todo_action = any_to_name(WritePRD)\n end\n ProductManager-->>-ProductManager: return bool(rc.todo)\n ProductManager->>+ProductManager: _observe(ignore_memory=False)\n ProductManager-->>-ProductManager: return super()._observe(ignore_memory=True)\n Environment->>Role: add_role(role: Role)\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Iterable: add_roles(roles: Iterable[Role])\n Iterable->>Environment: iterate through roles\n Role->>Environment: set_env(environment)\n Role->>Environment: set_context(context)\n Environment->>Message: publish_message(message: Message, peekable: bool)\n Message-->>Role: put_message(message)\n Environment->>Role: run(k: int)\n Role-->>Environment: run()\n Environment->>Environment: get_roles()\n Environment->>Environment: get_role(name: str)\n Environment->>Environment: role_names()\n Environment->>Environment: is_idle\n Environment->>Environment: get_addresses(obj)\n Environment->>Environment: set_addresses(obj, addresses)\n Environment->>Environment: archive(auto_archive: bool)\n Role->>+Role: __init__\n Role-->>-Role: pydantic_rebuild_model\n Role-->>-Role: _check_actions\n Role-->>-Role: _watch\n Role-->>-Role: set_todo\n Role-->>-Role: git_repo\n Role-->>-Role: src_workspace\n Role-->>-Role: project_repo\n Role-->>-Role: prompt_schema\n Role-->>-Role: project_name\n Role-->>-Role: project_path\n Role-->>-Role: check_addresses\n Role-->>-Role: _reset\n Role-->>-Role: _setting\n Role-->>-Role: _init_action\n Role-->>-Role: set_action\n Role-->>-Role: set_actions\n Role-->>-Role: _set_react_mode\n Role-->>-Role: _get_prefix\n Role-->>-Role: _think\n Role-->>-Role: _act\n Role-->>-Role: _observe\n Role-->>-Role: publish_message\n Role-->>-Role: put_message\n Role-->>-Role: _react\n Role-->>-Role: _act_by_order\n Role-->>-Role: _plan_and_act\n Role-->>-Role: react\n Role-->>-Role: get_memories\n Role-->>-Role: run\n Role-->>-Role: think\n Role-->>-Role: act\n Role-->>-Role: action_description\n Team->>+Team: hire(roles)\n Team->>+Team: invest(investment)\n Team->>+Team: run_project(idea, send_to)\n Team->>+Team: run(n_round, idea, send_to, auto_archive)\n Team->>+Environment: add_roles(roles)\n Team->>+Environment: publish_message(Message, peekable)\n Team->>+Environment: archive(auto_archive)\n Team->>+Context: \n Team->>+Path: SERDESER_PATH.joinpath(\"team\")\n Team->>+Path: stg_path.joinpath(\"team.json\")\n Team->>+Path: read_json_file(team_info_path)\n Team->>+Path: write_json_file(team_info_path, model_dump())\n Team->>+NoMoneyException: raise NoMoneyException\n Team->>+Logger: logger.info()\n Team->>+Logger: logger.debug()\n Team->>+Logger: logger.info()\n SystemAdministrator->>LLMSystem: Provide configuration parameters\n LLMSystem->>LLMSystem: Validate provided parameters\n LLMSystem->>LLMSystem: Configure LLM system with provided parameters\n User->>Message: Create a new message with content, instruct content, role, cause by, sent from, and send to\n Message->>Message: Validate and set the message ID if not provided\n Message->>Message: Validate and set the instruct content if provided\n Message->>Message: Validate and set the cause by if provided\n Message->>Message: Validate and set the sent from if provided\n Message->>Message: Validate and set the send to if provided\n Message->>Message: Create a new message object with the provided data\n Message-->>User: Return the message ID\n User->>Message: Convert the message object to a dictionary\n Message->>Message: Create a dictionary with role and content attributes of the message object\n Message-->>User: Return the created dictionary\n User->>Message: Convert the message object to a JSON string\n Message->>Message: Convert the message object to a JSON string\n Message-->>User: Return the JSON string\n User->>Message: Load a message object from a JSON string\n Message->>Message: Parse the JSON string to a dictionary\n Message->>Message: Create a message object from the dictionary\n Message-->>User: Return the created message object\n Message ->> BaseLLM: msg, system_msgs, format_msgs, timeout, stream\n BaseLLM ->> BaseLLM: Check if system messages are provided\n BaseLLM ->> BaseLLM: Format the messages\n BaseLLM ->> AsyncOpenAI: Send formatted messages\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM -->> Message: rsp\n Message ->> BaseLLM: msgs, timeout\n BaseLLM ->> AsyncOpenAI: Send each message\n AsyncOpenAI -->> BaseLLM: Response\n BaseLLM ->> BaseLLM: Concatenate responses\n BaseLLM -->> Message: rsp_text\n Message ->> BaseLLM: messages, timeout\n BaseLLM -->> BaseLLM: Raise NotImplementedError\n User->>DependencyFile: load()\n alt file exists\n DependencyFile->>DependencyFile: aread(file)\n DependencyFile->>DependencyFile: json.loads(data)\n DependencyFile->>DependencyFile: update internal dependencies\n end\n User->>DependencyFile: save()\n DependencyFile->>DependencyFile: json.dumps(dependencies)\n DependencyFile->>DependencyFile: aiofiles.open(file, \"w\")\n DependencyFile->>DependencyFile: writer.write(data)\n User->>DependencyFile: update(filename, dependencies, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile->>DependencyFile: update internal dependencies\n DependencyFile->>DependencyFile: persist changes\n end\n User->>DependencyFile: get(filename, persist)\n alt persist is true\n DependencyFile->>DependencyFile: load()\n DependencyFile->>DependencyFile: get relative path of filename\n DependencyFile-->>User: return set of dependencies\n end\n User->>DependencyFile: delete_file()\n DependencyFile-->>User: dependency file deleted\n Document ->> FileRepository: save(filename, content, dependencies)\n FileRepository ->> Path: create pathname for file\n FileRepository ->> aiofiles: write content to file\n FileRepository ->> GitRepository: get_dependency()\n GitRepository ->> FileRepository: dependency_file\n FileRepository ->> dependency_file: update(pathname, dependencies)\n FileRepository ->> Document: return saved document\n Document ->> FileRepository: get_dependency(filename)\n FileRepository ->> Path: retrieve pathname of file\n FileRepository ->> dependency_file: get(pathname)\n FileRepository ->> Document: return set of dependencies\n Document ->> FileRepository: get_changed_dependency(filename)\n FileRepository->>FileRepository: get_dependency(filename)\n FileRepository->>FileRepository: identify changed dependent files\n FileRepository->>Document: return set of changed dependencies\n Document ->> FileRepository: get(filename)\n FileRepository ->> Document: create document instance for file\n FileRepository ->> Path: read content of file\n FileRepository ->> Document: return document with content or None\n Document->>FileRepository: get_all(filter_ignored)\n FileRepository->>FileRepository: retrieve content of all files\n FileRepository->>Document: return list of document instances\n Document->>FileRepository: get_change_dir_files(dir)\n FileRepository->>FileRepository: identify changed files within directory\n FileRepository->>Document: return list of changed files\n Document->>FileRepository: save_doc(doc, dependencies)\n FileRepository->>FileRepository: save(filename, content, dependencies)\n FileRepository->>Document: return saved document\n Document->>FileRepository: save_pdf(doc, with_suffix, dependencies)\n FileRepository->>Path: convert content of document to Markdown\n FileRepository->>FileRepository: save content to file with optional suffix\n FileRepository->>Document: return saved document\n Document->>FileRepository: delete(filename)\n FileRepository->>Path: delete file from repository\n FileRepository->>GitRepository: get_dependency()\n GitRepository->>FileRepository: dependency_file\n FileRepository->>dependency_file: update(filename, dependencies)\n FileRepository->>FileRepository: open(local_path, auto_init)\n FileRepository->>FileRepository: add_change(files)\n FileRepository->>FileRepository: commit(comments)\n FileRepository->>FileRepository: delete_repository()\n FileRepository->>FileRepository: changed_files\n FileRepository->>FileRepository: is_git_dir(local_path)\n FileRepository->>FileRepository: is_valid\n FileRepository->>FileRepository: status\n FileRepository->>FileRepository: workdir\n FileRepository->>FileRepository: archive(comments)\n FileRepository->>FileRepository: new_file_repository(relative_path)\n FileRepository->>DependencyFile: get_dependency()\n FileRepository->>FileRepository: rename_root(new_dir_name)\n FileRepository->>FileRepository: get_files(relative_path, root_relative_path, filter_ignored)\n ProjectRepo->>ProjectRepo: __init__(root)\n ProjectRepo->>GitRepository: GitRepository(local_path=Path(root))\n ProjectRepo->>FileRepository: super().__init__(git_repo=git_repo_, relative_path=Path(\".\"))\n ProjectRepo->>DocFileRepositories: self.docs = DocFileRepositories(self._git_repo)\n ProjectRepo->>ResourceFileRepositories: self.resources = ResourceFileRepositories(self._git_repo)\n ProjectRepo->>GitRepository: self.tests = self._git_repo.new_file_repository(relative_path=TEST_CODES_FILE_REPO)\n ProjectRepo->>GitRepository: self.test_outputs = self._git_repo.new_file_repository(relative_path=TEST_OUTPUTS_FILE_REPO)\n ProjectRepo->>Path: return Path(self.git_repo.workdir)\n ProjectRepo->>}"}, {"predicate": "has_participant", "source": "metagpt/startup.py:__name__:__main__", "target": "metagpt/roles/engineer.py:Engineer"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:asyncio", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:typing", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Awaitable\",\"Callable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['AsyncGenerator', 'Awaitable', 'Callable']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Awaitable\",\"Callable\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:pydantic", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['BaseModel', 'ConfigDict', 'Field']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:metagpt.logs", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['logger']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:metagpt.roles", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['Role']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:module:metagpt.schema", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/subscription.py:names:['Message']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/__init__.py:module:metagpt", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt\",\"names\":[\"_compat as _\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/__init__.py:names:['_compat as _']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt\",\"names\":[\"_compat as _\"]}}"}, {"predicate": "is", "source": "metagpt/llm.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/llm.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/llm.py", "target": "metagpt/llm.py:LLM"}, {"predicate": "is", "source": "metagpt/llm.py:LLM", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:LLM", "target": "{\"lineno\":15,\"end_lineno\":20,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"LLM\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:ast.Constant:\n@Time : 2023/5/11 14:45\n@Author : alexanderwu\n@File : llm.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:45\\n@Author : alexanderwu\\n@File : llm.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:names:['LLMConfig']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:module:metagpt.context", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:names:['Context']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/llm.py:names:['BaseLLM']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/config2.py:merge_dict", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:merge_dict", "target": "{\"lineno\":135,\"end_lineno\":140,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"merge_dict\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/config2.py:config", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:config", "target": "{\"lineno\":143,\"end_lineno\":143,\"type_name\":\"ast.Assign\",\"tokens\":[\"config\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:ast.Constant:\n@Time : 2024/1/4 01:25\n@Author : alexanderwu\n@File : config2.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 01:25\\n@Author : alexanderwu\\n@File : config2.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Iterable\",\"List\",\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['Dict', 'Iterable', 'List', 'Literal', 'Optional']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Iterable\",\"List\",\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['BaseModel', 'model_validator']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.browser_config", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.browser_config\",\"names\":[\"BrowserConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['BrowserConfig']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.browser_config\",\"names\":[\"BrowserConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.mermaid_config", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.mermaid_config\",\"names\":[\"MermaidConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['MermaidConfig']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.mermaid_config\",\"names\":[\"MermaidConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.redis_config", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['RedisConfig']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.s3_config", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.s3_config\",\"names\":[\"S3Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['S3Config']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.s3_config\",\"names\":[\"S3Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.search_config", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.search_config\",\"names\":[\"SearchConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['SearchConfig']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.search_config\",\"names\":[\"SearchConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.configs.workspace_config", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.workspace_config\",\"names\":[\"WorkspaceConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['WorkspaceConfig']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.workspace_config\",\"names\":[\"WorkspaceConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.const", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['CONFIG_ROOT', 'METAGPT_ROOT']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CONFIG_ROOT\",\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/config2.py:names:['YamlModel']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "is", "source": "metagpt/team.py:Team:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/team.py:Team:_check_balance", "target": "class_method"}, {"predicate": "is", "source": "metagpt/team.py:Team:_save", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/team.py:ast.Constant:\n@Time : 2023/5/12 00:30\n@Author : alexanderwu\n@File : team.py\n@Modified By: mashenquan, 2023/11/27. Add an archiving operation after completing the project, as specified in\n Section 2.2.3.3 of RFC 135.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/12 00:30\\n@Author : alexanderwu\\n@File : team.py\\n@Modified By: mashenquan, 2023/11/27. Add an archiving operation after completing the project, as specified in\\n Section 2.2.3.3 of RFC 135.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:warnings", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:pathlib", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Path']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Any', 'Optional']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:pydantic", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['BaseModel', 'ConfigDict', 'Field']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.actions", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['UserRequirement']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.const", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\",\"SERDESER_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['MESSAGE_ROUTE_TO_ALL', 'SERDESER_PATH']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\",\"SERDESER_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.context", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Context']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.environment", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Environment']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.environment\",\"names\":[\"Environment\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.logs", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['logger']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.roles", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Role']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.schema", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['Message']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:module:metagpt.utils.common", "target": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"NoMoneyException\",\"read_json_file\",\"serialize_decorator\",\"write_json_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/team.py:names:['NoMoneyException', 'read_json_file', 'serialize_decorator', 'write_json_file']", "target": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"NoMoneyException\",\"read_json_file\",\"serialize_decorator\",\"write_json_file\"]}}"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:__getattr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:__setattr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/context.py:AttrDict:__delattr__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/context.py:ast.Constant:\n@Time : 2024/1/4 16:32\n@Author : alexanderwu\n@File : context.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:32\\n@Author : alexanderwu\\n@File : context.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['Any', 'Optional']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['BaseModel', 'ConfigDict']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.config2", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['Config']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['LLMConfig']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['BaseLLM']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"create_llm_instance\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['create_llm_instance']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"create_llm_instance\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['CostManager']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.utils.git_repository", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['GitRepository']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context.py:names:['ProjectRepo']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "is", "source": "metagpt/logs.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/logs.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/logs.py", "target": "metagpt/logs.py:define_log_level"}, {"predicate": "has_function", "source": "metagpt/logs.py", "target": "metagpt/logs.py:log_llm_stream"}, {"predicate": "has_function", "source": "metagpt/logs.py", "target": "metagpt/logs.py:set_llm_stream_logfunc"}, {"predicate": "is", "source": "metagpt/logs.py:define_log_level", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:define_log_level", "target": "{\"lineno\":18,\"end_lineno\":26,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"define_log_level\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/logs.py:log_llm_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:log_llm_stream", "target": "{\"lineno\":32,\"end_lineno\":33,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_llm_stream\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/logs.py:set_llm_stream_logfunc", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:set_llm_stream_logfunc", "target": "{\"lineno\":36,\"end_lineno\":38,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"set_llm_stream_logfunc\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/logs.py:logger", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:logger", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"logger\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/logs.py:_llm_stream_log", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:_llm_stream_log", "target": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.Assign\",\"tokens\":[\"_llm_stream_log\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:ast.Constant:\n@Time : 2023/6/1 12:41\n@Author : alexanderwu\n@File : logs.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/1 12:41\\n@Author : alexanderwu\\n@File : logs.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:sys", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:module:datetime", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:names:['datetime']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:module:functools", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"partial\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:names:['partial']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"partial\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:module:loguru", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger as _logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:names:['logger as _logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger as _logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:module:metagpt.const", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"METAGPT_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/logs.py:names:['METAGPT_ROOT']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"METAGPT_ROOT\"]}}"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_df", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document.py:IndexableDocument:_get_docs_and_metadatas_by_langchain", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document.py:Repo:_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document.py:Repo:_set", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document.py:validate_cols", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/document.py:validate_cols", "target": "{\"lineno\":26,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"validate_cols\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/document.py:read_data", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/document.py:read_data", "target": "{\"lineno\":31,\"end_lineno\":50,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_data\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:ast.Constant:\n@Time : 2023/6/8 14:03\n@Author : alexanderwu\n@File : document.py\n@Desc : Classes and Operations Related to Files in the File System.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/8 14:03\\n@Author : alexanderwu\\n@File : document.py\\n@Desc : Classes and Operations Related to Files in the File System.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:enum", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['Enum']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:pathlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['Path']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['Optional', 'Union']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:pandas as pd", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:langchain.document_loaders", "target": "{\"lineno\":14,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.document_loaders\",\"names\":[\"TextLoader\",\"UnstructuredPDFLoader\",\"UnstructuredWordDocumentLoader\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['TextLoader', 'UnstructuredPDFLoader', 'UnstructuredWordDocumentLoader']", "target": "{\"lineno\":14,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.document_loaders\",\"names\":[\"TextLoader\",\"UnstructuredPDFLoader\",\"UnstructuredWordDocumentLoader\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:langchain.text_splitter", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.text_splitter\",\"names\":[\"CharacterTextSplitter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['CharacterTextSplitter']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.text_splitter\",\"names\":[\"CharacterTextSplitter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:pydantic", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['BaseModel', 'ConfigDict', 'Field']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:tqdm", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tqdm\",\"names\":[\"tqdm\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['tqdm']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tqdm\",\"names\":[\"tqdm\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:module:metagpt.repo_parser", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"RepoParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document.py:names:['RepoParser']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"RepoParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:ast.Constant:\n@Time : 2023/5/11 22:12\n@Author : alexanderwu\n@File : environment.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\n 1. Remove the functionality of `Environment` class as a public message buffer.\n 2. Standardize the message forwarding behavior of the `Environment` class.\n 3. Add the `is_idle` property.\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\n functionality is to be consolidated into the `Environment` class.\n", "target": "{\"lineno\":3,\"end_lineno\":13,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 22:12\\n@Author : alexanderwu\\n@File : environment.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\\n 1. Remove the functionality of `Environment` class as a public message buffer.\\n 2. Standardize the message forwarding behavior of the `Environment` class.\\n 3. Add the `is_idle` property.\\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\\n functionality is to be consolidated into the `Environment` class.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:asyncio", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Iterable\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:names:['Iterable', 'Set']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Iterable\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:module:pydantic", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:names:['BaseModel', 'ConfigDict', 'Field', 'SerializeAsAny', 'model_validator']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:module:metagpt.context", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:names:['Context']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:module:metagpt.roles.role", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:names:['Role']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:module:metagpt.schema", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:names:['Message']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:module:metagpt.utils.common", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"is_send_to\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/environment.py:names:['is_send_to']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"is_send_to\"]}}"}, {"predicate": "is", "source": "metagpt/_compat.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/_compat.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/_compat.py:platform", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/_compat.py:sys", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/_compat.py:warnings", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"warnings\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/_compat.py:n:a:m:e:p:l:a:t:f:o:r:m:.:s:y:s:t:e:m", "target": "{\"lineno\":5,\"end_lineno\":23,\"type_name\":\"ast.If\",\"tokens\":[\"n\",\"a\",\"m\",\"e\",\"p\",\"l\",\"a\",\"t\",\"f\",\"o\",\"r\",\"m\",\".\",\"s\",\"y\",\"s\",\"t\",\"e\",\"m\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/context_mixin.py:ContextMixin:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:ast.Constant:\n@Time : 2024/1/11 17:25\n@Author : alexanderwu\n@File : context_mixin.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/11 17:25\\n@Author : alexanderwu\\n@File : context_mixin.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['BaseModel', 'ConfigDict', 'Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:metagpt.config2", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['Config']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:metagpt.context", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['Context']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/context_mixin.py:names:['BaseLLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/const.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/const.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/const.py", "target": "metagpt/const.py:get_metagpt_package_root"}, {"predicate": "has_function", "source": "metagpt/const.py", "target": "metagpt/const.py:get_metagpt_root"}, {"predicate": "is", "source": "metagpt/const.py:get_metagpt_package_root", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/const.py:get_metagpt_package_root", "target": "{\"lineno\":20,\"end_lineno\":30,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_metagpt_package_root\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:get_metagpt_root", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/const.py:get_metagpt_root", "target": "{\"lineno\":33,\"end_lineno\":43,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_metagpt_root\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CONFIG_ROOT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CONFIG_ROOT", "target": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONFIG_ROOT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:METAGPT_ROOT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:METAGPT_ROOT", "target": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"METAGPT_ROOT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DEFAULT_WORKSPACE_ROOT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DEFAULT_WORKSPACE_ROOT", "target": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_WORKSPACE_ROOT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:EXAMPLE_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:EXAMPLE_PATH", "target": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXAMPLE_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DATA_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DATA_PATH", "target": "{\"lineno\":52,\"end_lineno\":52,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TEST_DATA_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TEST_DATA_PATH", "target": "{\"lineno\":53,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_DATA_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:RESEARCH_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:RESEARCH_PATH", "target": "{\"lineno\":54,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TUTORIAL_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TUTORIAL_PATH", "target": "{\"lineno\":55,\"end_lineno\":55,\"type_name\":\"ast.Assign\",\"tokens\":[\"TUTORIAL_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:INVOICE_OCR_TABLE_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:INVOICE_OCR_TABLE_PATH", "target": "{\"lineno\":56,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"INVOICE_OCR_TABLE_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:UT_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:UT_PATH", "target": "{\"lineno\":58,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"UT_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SWAGGER_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SWAGGER_PATH", "target": "{\"lineno\":59,\"end_lineno\":59,\"type_name\":\"ast.Assign\",\"tokens\":[\"SWAGGER_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:UT_PY_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:UT_PY_PATH", "target": "{\"lineno\":60,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"UT_PY_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:API_QUESTIONS_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:API_QUESTIONS_PATH", "target": "{\"lineno\":61,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"API_QUESTIONS_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SERDESER_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SERDESER_PATH", "target": "{\"lineno\":63,\"end_lineno\":63,\"type_name\":\"ast.Assign\",\"tokens\":[\"SERDESER_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TMP", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TMP", "target": "{\"lineno\":65,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"TMP\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SOURCE_ROOT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SOURCE_ROOT", "target": "{\"lineno\":67,\"end_lineno\":67,\"type_name\":\"ast.Assign\",\"tokens\":[\"SOURCE_ROOT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:PROMPT_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:PROMPT_PATH", "target": "{\"lineno\":68,\"end_lineno\":68,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SKILL_DIRECTORY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SKILL_DIRECTORY", "target": "{\"lineno\":69,\"end_lineno\":69,\"type_name\":\"ast.Assign\",\"tokens\":[\"SKILL_DIRECTORY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MEM_TTL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MEM_TTL", "target": "{\"lineno\":73,\"end_lineno\":73,\"type_name\":\"ast.Assign\",\"tokens\":[\"MEM_TTL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_FROM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_FROM", "target": "{\"lineno\":75,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_FROM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_TO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_TO", "target": "{\"lineno\":76,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_CAUSE_BY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_CAUSE_BY", "target": "{\"lineno\":77,\"end_lineno\":77,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_CAUSE_BY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_META_ROLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_META_ROLE", "target": "{\"lineno\":78,\"end_lineno\":78,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_META_ROLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_TO_ALL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_TO_ALL", "target": "{\"lineno\":79,\"end_lineno\":79,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO_ALL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:MESSAGE_ROUTE_TO_NONE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:MESSAGE_ROUTE_TO_NONE", "target": "{\"lineno\":80,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"MESSAGE_ROUTE_TO_NONE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:REQUIREMENT_FILENAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:REQUIREMENT_FILENAME", "target": "{\"lineno\":82,\"end_lineno\":82,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_FILENAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:BUGFIX_FILENAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:BUGFIX_FILENAME", "target": "{\"lineno\":83,\"end_lineno\":83,\"type_name\":\"ast.Assign\",\"tokens\":[\"BUGFIX_FILENAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:PACKAGE_REQUIREMENTS_FILENAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:PACKAGE_REQUIREMENTS_FILENAME", "target": "{\"lineno\":84,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"PACKAGE_REQUIREMENTS_FILENAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_FILENAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_FILENAME", "target": "{\"lineno\":85,\"end_lineno\":85,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_FILENAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DOCS_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DOCS_FILE_REPO", "target": "{\"lineno\":87,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"DOCS_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:PRDS_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:PRDS_FILE_REPO", "target": "{\"lineno\":88,\"end_lineno\":88,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRDS_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SYSTEM_DESIGN_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SYSTEM_DESIGN_FILE_REPO", "target": "{\"lineno\":89,\"end_lineno\":89,\"type_name\":\"ast.Assign\",\"tokens\":[\"SYSTEM_DESIGN_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TASK_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TASK_FILE_REPO", "target": "{\"lineno\":90,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_FILE_REPO", "target": "{\"lineno\":91,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:COMPETITIVE_ANALYSIS_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:COMPETITIVE_ANALYSIS_FILE_REPO", "target": "{\"lineno\":92,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_ANALYSIS_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DATA_API_DESIGN_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DATA_API_DESIGN_FILE_REPO", "target": "{\"lineno\":93,\"end_lineno\":93,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_API_DESIGN_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SEQ_FLOW_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SEQ_FLOW_FILE_REPO", "target": "{\"lineno\":94,\"end_lineno\":94,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEQ_FLOW_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SYSTEM_DESIGN_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SYSTEM_DESIGN_PDF_FILE_REPO", "target": "{\"lineno\":95,\"end_lineno\":95,\"type_name\":\"ast.Assign\",\"tokens\":[\"SYSTEM_DESIGN_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:PRD_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:PRD_PDF_FILE_REPO", "target": "{\"lineno\":96,\"end_lineno\":96,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRD_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TASK_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TASK_PDF_FILE_REPO", "target": "{\"lineno\":97,\"end_lineno\":97,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CODE_PLAN_AND_CHANGE_PDF_FILE_REPO", "target": "{\"lineno\":98,\"end_lineno\":98,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TEST_CODES_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TEST_CODES_FILE_REPO", "target": "{\"lineno\":99,\"end_lineno\":99,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_CODES_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:TEST_OUTPUTS_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:TEST_OUTPUTS_FILE_REPO", "target": "{\"lineno\":100,\"end_lineno\":100,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEST_OUTPUTS_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CODE_SUMMARIES_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CODE_SUMMARIES_FILE_REPO", "target": "{\"lineno\":101,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_SUMMARIES_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CODE_SUMMARIES_PDF_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CODE_SUMMARIES_PDF_FILE_REPO", "target": "{\"lineno\":102,\"end_lineno\":102,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_SUMMARIES_PDF_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:RESOURCES_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:RESOURCES_FILE_REPO", "target": "{\"lineno\":103,\"end_lineno\":103,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESOURCES_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SD_OUTPUT_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SD_OUTPUT_FILE_REPO", "target": "{\"lineno\":104,\"end_lineno\":104,\"type_name\":\"ast.Assign\",\"tokens\":[\"SD_OUTPUT_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:GRAPH_REPO_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:GRAPH_REPO_FILE_REPO", "target": "{\"lineno\":105,\"end_lineno\":105,\"type_name\":\"ast.Assign\",\"tokens\":[\"GRAPH_REPO_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:VISUAL_GRAPH_REPO_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:VISUAL_GRAPH_REPO_FILE_REPO", "target": "{\"lineno\":106,\"end_lineno\":106,\"type_name\":\"ast.Assign\",\"tokens\":[\"VISUAL_GRAPH_REPO_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:CLASS_VIEW_FILE_REPO", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:CLASS_VIEW_FILE_REPO", "target": "{\"lineno\":107,\"end_lineno\":107,\"type_name\":\"ast.Assign\",\"tokens\":[\"CLASS_VIEW_FILE_REPO\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:YAPI_URL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:YAPI_URL", "target": "{\"lineno\":109,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"YAPI_URL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DEFAULT_LANGUAGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DEFAULT_LANGUAGE", "target": "{\"lineno\":111,\"end_lineno\":111,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_LANGUAGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DEFAULT_MAX_TOKENS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DEFAULT_MAX_TOKENS", "target": "{\"lineno\":112,\"end_lineno\":112,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_MAX_TOKENS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:COMMAND_TOKENS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:COMMAND_TOKENS", "target": "{\"lineno\":113,\"end_lineno\":113,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMAND_TOKENS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:BRAIN_MEMORY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:BRAIN_MEMORY", "target": "{\"lineno\":114,\"end_lineno\":114,\"type_name\":\"ast.Assign\",\"tokens\":[\"BRAIN_MEMORY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SKILL_PATH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SKILL_PATH", "target": "{\"lineno\":115,\"end_lineno\":115,\"type_name\":\"ast.Assign\",\"tokens\":[\"SKILL_PATH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:SERPER_API_KEY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:SERPER_API_KEY", "target": "{\"lineno\":116,\"end_lineno\":116,\"type_name\":\"ast.Assign\",\"tokens\":[\"SERPER_API_KEY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:DEFAULT_TOKEN_SIZE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:DEFAULT_TOKEN_SIZE", "target": "{\"lineno\":117,\"end_lineno\":117,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_TOKEN_SIZE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:BASE64_FORMAT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:BASE64_FORMAT", "target": "{\"lineno\":120,\"end_lineno\":120,\"type_name\":\"ast.Assign\",\"tokens\":[\"BASE64_FORMAT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:REDIS_KEY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:REDIS_KEY", "target": "{\"lineno\":123,\"end_lineno\":123,\"type_name\":\"ast.Assign\",\"tokens\":[\"REDIS_KEY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:LLM_API_TIMEOUT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:LLM_API_TIMEOUT", "target": "{\"lineno\":124,\"end_lineno\":124,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_API_TIMEOUT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:IGNORED_MESSAGE_ID", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:IGNORED_MESSAGE_ID", "target": "{\"lineno\":127,\"end_lineno\":127,\"type_name\":\"ast.Assign\",\"tokens\":[\"IGNORED_MESSAGE_ID\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:GENERALIZATION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:GENERALIZATION", "target": "{\"lineno\":130,\"end_lineno\":130,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERALIZATION\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:COMPOSITION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:COMPOSITION", "target": "{\"lineno\":131,\"end_lineno\":131,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPOSITION\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/const.py:AGGREGATION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/const.py:AGGREGATION", "target": "{\"lineno\":132,\"end_lineno\":132,\"type_name\":\"ast.Assign\",\"tokens\":[\"AGGREGATION\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:ast.Constant:\n@Time : 2023/5/1 11:59\n@Author : alexanderwu\n@File : const.py\n@Modified By: mashenquan, 2023-11-1. According to Section 2.2.1 and 2.2.2 of RFC 116, added key definitions for\n common properties in the Message.\n@Modified By: mashenquan, 2023-11-27. Defines file repository paths according to Section 2.2.3.4 of RFC 135.\n@Modified By: mashenquan, 2023/12/5. Add directories for code summarization..\n", "target": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/1 11:59\\n@Author : alexanderwu\\n@File : const.py\\n@Modified By: mashenquan, 2023-11-1. According to Section 2.2.1 and 2.2.2 of RFC 116, added key definitions for\\n common properties in the Message.\\n@Modified By: mashenquan, 2023-11-27. Defines file repository paths according to Section 2.2.3.4 of RFC 135.\\n@Modified By: mashenquan, 2023/12/5. Add directories for code summarization..\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:os", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:module:loguru", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"loguru\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/const.py:metagpt", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/schema.py:SerializationMixin:__serialize_with_class_type__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:SerializationMixin:__convert_to_real_type__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:SerializationMixin:__init_subclass__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Document:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Document:__repr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Message:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Message:__setattr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Message:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:Message:__repr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:UserMessage:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:SystemMessage:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:AIMessage:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:CodeSummarizeContext:__hash__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/schema.py:T", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:T", "target": "{\"lineno\":407,\"end_lineno\":407,\"type_name\":\"ast.Assign\",\"tokens\":[\"T\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:ast.Constant:\n@Time : 2023/5/8 22:12\n@Author : alexanderwu\n@File : schema.py\n@Modified By: mashenquan, 2023-10-31. According to Chapter 2.2.1 of RFC 116:\n Replanned the distribution of responsibilities and functional positioning of `Message` class attributes.\n@Modified By: mashenquan, 2023/11/22.\n 1. Add `Document` and `Documents` for `FileRepository` in Section 2.2.3.4 of RFC 135.\n 2. Encapsulate the common key-values set to pydantic structures to standardize and unify parameter passing\n between actions.\n 3. Add `id` to `Message` according to Section 2.2.3.1.1 of RFC 135.\n", "target": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/8 22:12\\n@Author : alexanderwu\\n@File : schema.py\\n@Modified By: mashenquan, 2023-10-31. According to Chapter 2.2.1 of RFC 116:\\n Replanned the distribution of responsibilities and functional positioning of `Message` class attributes.\\n@Modified By: mashenquan, 2023/11/22.\\n 1. Add `Document` and `Documents` for `FileRepository` in Section 2.2.3.4 of RFC 135.\\n 2. Encapsulate the common key-values set to pydantic structures to standardize and unify parameter passing\\n between actions.\\n 3. Add `id` to `Message` according to Section 2.2.3.1.1 of RFC 135.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:__future__", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['annotations']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:asyncio", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:json", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:os.path", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.Import\",\"tokens\":[\"os.path\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:uuid", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:abc", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['ABC']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:asyncio", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"asyncio\",\"names\":[\"Queue\",\"QueueEmpty\",\"wait_for\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['Queue', 'QueueEmpty', 'wait_for']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"asyncio\",\"names\":[\"Queue\",\"QueueEmpty\",\"wait_for\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:json", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['JSONDecodeError']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:pathlib", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['Path']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:typing", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Iterable\",\"List\",\"Optional\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['Any', 'Dict', 'Iterable', 'List', 'Optional', 'Type', 'TypeVar', 'Union']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Iterable\",\"List\",\"Optional\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:pydantic", "target": "{\"lineno\":28,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"PrivateAttr\",\"field_serializer\",\"field_validator\",\"model_serializer\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['BaseModel', 'ConfigDict', 'Field', 'PrivateAttr', 'field_serializer', 'field_validator', 'model_serializer', 'model_validator']", "target": "{\"lineno\":28,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"PrivateAttr\",\"field_serializer\",\"field_validator\",\"model_serializer\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.const", "target": "{\"lineno\":39,\"end_lineno\":48,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILENAME\",\"MESSAGE_ROUTE_CAUSE_BY\",\"MESSAGE_ROUTE_FROM\",\"MESSAGE_ROUTE_TO\",\"MESSAGE_ROUTE_TO_ALL\",\"PRDS_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['CODE_PLAN_AND_CHANGE_FILENAME', 'MESSAGE_ROUTE_CAUSE_BY', 'MESSAGE_ROUTE_FROM', 'MESSAGE_ROUTE_TO', 'MESSAGE_ROUTE_TO_ALL', 'PRDS_FILE_REPO', 'SYSTEM_DESIGN_FILE_REPO', 'TASK_FILE_REPO']", "target": "{\"lineno\":39,\"end_lineno\":48,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILENAME\",\"MESSAGE_ROUTE_CAUSE_BY\",\"MESSAGE_ROUTE_FROM\",\"MESSAGE_ROUTE_TO\",\"MESSAGE_ROUTE_TO_ALL\",\"PRDS_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.logs", "target": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['logger']", "target": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.repo_parser", "target": "{\"lineno\":50,\"end_lineno\":50,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['DotClassInfo']", "target": "{\"lineno\":50,\"end_lineno\":50,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.utils.common", "target": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\",\"import_class\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['any_to_str', 'any_to_str_set', 'import_class']", "target": "{\"lineno\":51,\"end_lineno\":51,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\",\"import_class\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":52,\"end_lineno\":52,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['handle_exception']", "target": "{\"lineno\":52,\"end_lineno\":52,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:module:metagpt.utils.serialize", "target": "{\"lineno\":53,\"end_lineno\":57,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"actionoutout_schema_to_mapping\",\"actionoutput_mapping_to_str\",\"actionoutput_str_to_mapping\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/schema.py:names:['actionoutout_schema_to_mapping', 'actionoutput_mapping_to_str', 'actionoutput_str_to_mapping']", "target": "{\"lineno\":53,\"end_lineno\":57,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"actionoutout_schema_to_mapping\",\"actionoutput_mapping_to_str\",\"actionoutput_str_to_mapping\"]}}"}, {"predicate": "is", "source": "metagpt/learn/text_to_image.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/text_to_image.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/learn/text_to_image.py", "target": "metagpt/learn/text_to_image.py:text_to_image"}, {"predicate": "is", "source": "metagpt/learn/text_to_image.py:text_to_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:text_to_image", "target": "{\"lineno\":20,\"end_lineno\":44,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_image\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : text_to_image.py\n@Desc : Text-to-Image skill, which provides text-to-image functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : text_to_image.py\\n@Desc : Text-to-Image skill, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:base64", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:metagpt.config2", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.config2", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['Config']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.const", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['BASE64_FORMAT']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.llm", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['LLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.tools.metagpt_text_to_image", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.metagpt_text_to_image\",\"names\":[\"oas3_metagpt_text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['oas3_metagpt_text_to_image']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.metagpt_text_to_image\",\"names\":[\"oas3_metagpt_text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.tools.openai_text_to_image", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_image\",\"names\":[\"oas3_openai_text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['oas3_openai_text_to_image']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_image\",\"names\":[\"oas3_openai_text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:module:metagpt.utils.s3", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_image.py:names:['S3']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"predicate": "is", "source": "metagpt/learn/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/learn/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:__all__", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:57\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:57\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:module:metagpt.learn.text_to_image", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_image\",\"names\":[\"text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:names:['text_to_image']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_image\",\"names\":[\"text_to_image\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:module:metagpt.learn.text_to_speech", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_speech\",\"names\":[\"text_to_speech\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:names:['text_to_speech']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.text_to_speech\",\"names\":[\"text_to_speech\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:module:metagpt.learn.google_search", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.google_search\",\"names\":[\"google_search\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/__init__.py:names:['google_search']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.google_search\",\"names\":[\"google_search\"]}}"}, {"predicate": "is", "source": "metagpt/learn/google_search.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/google_search.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/learn/google_search.py", "target": "metagpt/learn/google_search.py:google_search"}, {"predicate": "is", "source": "metagpt/learn/google_search.py:google_search", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/learn/google_search.py:google_search", "target": "{\"lineno\":4,\"end_lineno\":12,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"google_search\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/google_search.py:module:metagpt.tools.search_engine", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/google_search.py:names:['SearchEngine']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "is", "source": "metagpt/learn/text_to_speech.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/text_to_speech.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/learn/text_to_speech.py", "target": "metagpt/learn/text_to_speech.py:text_to_speech"}, {"predicate": "is", "source": "metagpt/learn/text_to_speech.py:text_to_speech", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:text_to_speech", "target": "{\"lineno\":17,\"end_lineno\":69,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_speech\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : text_to_speech.py\n@Desc : Text-to-Speech skill, which provides text-to-speech functionality\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : text_to_speech.py\\n@Desc : Text-to-Speech skill, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:metagpt.config2", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.config2", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['Config']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.const", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['BASE64_FORMAT']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.tools.azure_tts", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.azure_tts\",\"names\":[\"oas3_azsure_tts\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['oas3_azsure_tts']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.azure_tts\",\"names\":[\"oas3_azsure_tts\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.tools.iflytek_tts", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.iflytek_tts\",\"names\":[\"oas3_iflytek_tts\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['oas3_iflytek_tts']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.iflytek_tts\",\"names\":[\"oas3_iflytek_tts\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:module:metagpt.utils.s3", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_speech.py:names:['S3']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.s3\",\"names\":[\"S3\"]}}"}, {"predicate": "is", "source": "metagpt/learn/text_to_embedding.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/learn/text_to_embedding.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/learn/text_to_embedding.py", "target": "metagpt/learn/text_to_embedding.py:text_to_embedding"}, {"predicate": "is", "source": "metagpt/learn/text_to_embedding.py:text_to_embedding", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:text_to_embedding", "target": "{\"lineno\":14,\"end_lineno\":24,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"text_to_embedding\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : text_to_embedding.py\n@Desc : Text-to-Embedding skill, which provides text-to-embedding functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : text_to_embedding.py\\n@Desc : Text-to-Embedding skill, which provides text-to-embedding functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:metagpt.config2", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"metagpt.config2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:module:metagpt.config2", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:names:['Config']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:module:metagpt.tools.openai_text_to_embedding", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_embedding\",\"names\":[\"oas3_openai_text_to_embedding\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/text_to_embedding.py:names:['oas3_openai_text_to_embedding']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.openai_text_to_embedding\",\"names\":[\"oas3_openai_text_to_embedding\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : skill_loader.py\n@Desc : Skill YAML Configuration Loader.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : skill_loader.py\\n@Desc : Skill YAML Configuration Loader.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:names:['Dict', 'List', 'Optional']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:aiofiles", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:yaml", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:module:pydantic", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:module:metagpt.context", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/learn/skill_loader.py:names:['Context']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/search_engine_ddg.py:DDGAPIWrapper:_search_from_ddgs", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:module:__future__", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:names:['annotations']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:module:concurrent", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:names:['futures']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:names:['Literal', 'overload']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:module:metagpt.config2", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:names:['config']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_ddg.py:__name__:__main__", "target": "{\"lineno\":99,\"end_lineno\":102,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_oas3_api_svc.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/metagpt_oas3_api_svc.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/tools/metagpt_oas3_api_svc.py", "target": "metagpt/tools/metagpt_oas3_api_svc.py:oas_http_svc"}, {"predicate": "is", "source": "metagpt/tools/metagpt_oas3_api_svc.py:oas_http_svc", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:oas_http_svc", "target": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"oas_http_svc\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : metagpt_oas3_api_svc.py\n@Desc : MetaGPT OpenAPI Specification 3.0 REST API service\n\n curl -X 'POST' 'http://localhost:8080/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\n", "target": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : metagpt_oas3_api_svc.py\\n@Desc : MetaGPT OpenAPI Specification 3.0 REST API service\\n\\n curl -X 'POST' 'http://localhost:8080/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:module:pathlib", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:names:['Path']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:connexion", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"connexion\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_oas3_api_svc.py:__name__:__main__", "target": "{\"lineno\":31,\"end_lineno\":32,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:DataSource:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/search_engine_meilisearch.py:MeilisearchEngine:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:ast.Constant:\n@Time : 2023/5/22 21:33\n@Author : alexanderwu\n@File : search_engine_meilisearch.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/22 21:33\\n@Author : alexanderwu\\n@File : search_engine_meilisearch.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:names:['List']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:meilisearch", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"meilisearch\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:module:meilisearch.index", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"meilisearch.index\",\"names\":[\"Index\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:names:['Index']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"meilisearch.index\",\"names\":[\"Index\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_meilisearch.py:names:['handle_exception']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:OpenAIText2Embedding:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_embedding.py:oas3_openai_text_to_embedding", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:oas3_openai_text_to_embedding", "target": "{\"lineno\":75,\"end_lineno\":85,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_openai_text_to_embedding\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : openai_text_to_embedding.py\n@Desc : OpenAI Text-to-Embedding OAS3 api, which provides text-to-embedding functionality.\n For more details, checkout: `https://platform.openai.com/docs/api-reference/embeddings/object`\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : openai_text_to_embedding.py\\n@Desc : OpenAI Text-to-Embedding OAS3 api, which provides text-to-embedding functionality.\\n For more details, checkout: `https://platform.openai.com/docs/api-reference/embeddings/object`\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:names:['List']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:aiohttp", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:requests", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:module:pydantic", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_embedding.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serpapi.py:SerpAPIWrapper:_process_response", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:ast.Constant:\n@Time : 2023/5/23 18:27\n@Author : alexanderwu\n@File : search_engine_serpapi.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 18:27\\n@Author : alexanderwu\\n@File : search_engine_serpapi.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:names:['Any', 'Dict', 'Optional', 'Tuple']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:aiohttp", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:names:['BaseModel', 'ConfigDict', 'Field', 'field_validator']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:module:metagpt.config2", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:names:['config']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serpapi.py:__name__:__main__", "target": "{\"lineno\":113,\"end_lineno\":116,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_scrape", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:PlaywrightWrapper:_run_precheck", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_get_install_lock", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_get_install_lock", "target": "{\"lineno\":98,\"end_lineno\":102,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_get_install_lock\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_browsers", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_browsers", "target": "{\"lineno\":105,\"end_lineno\":128,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"_install_browsers\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_log_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_log_stream", "target": "{\"lineno\":131,\"end_lineno\":136,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"_log_stream\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_lock", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_lock", "target": "{\"lineno\":139,\"end_lineno\":139,\"type_name\":\"ast.AnnAssign\",\"tokens\":[\"_install_lock\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_cache", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:_install_cache", "target": "{\"lineno\":140,\"end_lineno\":140,\"type_name\":\"ast.Assign\",\"tokens\":[\"_install_cache\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:__future__", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['annotations']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:asyncio", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:sys", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:pathlib", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['Path']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['Literal']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:playwright.async_api", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['async_playwright']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.config2", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['config']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:module:metagpt.utils.parse_html", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_playwright.py:names:['WebPage']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SkSearchEngine:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/search_engine.py:SearchEngine:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:ast.Constant:\n@Time : 2023/5/6 20:15\n@Author : alexanderwu\n@File : search_engine.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/6 20:15\\n@Author : alexanderwu\\n@File : search_engine.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:importlib", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Coroutine\",\"Literal\",\"Optional\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:names:['Callable', 'Coroutine', 'Literal', 'Optional', 'Union', 'overload']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Coroutine\",\"Literal\",\"Optional\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:module:semantic_kernel.skill_definition", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.skill_definition\",\"names\":[\"sk_function\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:names:['sk_function']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.skill_definition\",\"names\":[\"sk_function\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:module:metagpt.tools", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine.py:names:['SearchEngineType']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine.py:WebBrowserEngine:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:__future__", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['annotations']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:importlib", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Coroutine\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['Any', 'Callable', 'Coroutine', 'overload']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Coroutine\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:metagpt.tools", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['WebBrowserEngineType']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:module:metagpt.utils.parse_html", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine.py:names:['WebPage']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_serper.py:SerperWrapper:_process_response", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:ast.Constant:\n@Time : 2023/5/23 18:27\n@Author : alexanderwu\n@File : search_engine_serpapi.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 18:27\\n@Author : alexanderwu\\n@File : search_engine_serpapi.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:json", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:names:['Any', 'Dict', 'Optional', 'Tuple']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"Optional\",\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:aiohttp", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:names:['BaseModel', 'ConfigDict', 'Field', 'field_validator']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:module:metagpt.config2", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:names:['config']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_serper.py:__name__:__main__", "target": "{\"lineno\":115,\"end_lineno\":118,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/moderation.py:Moderation:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:ast.Constant:\n@Time : 2023/9/26 14:27\n@Author : zhanglei\n@File : moderation.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/26 14:27\\n@Author : zhanglei\\n@File : moderation.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:names:['Union']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/moderation.py:names:['BaseLLM']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/tools/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/__init__.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/tools/__init__.py", "target": "metagpt/tools/__init__.py:SearchEngineType"}, {"predicate": "has_class", "source": "metagpt/tools/__init__.py", "target": "metagpt/tools/__init__.py:WebBrowserEngineType"}, {"predicate": "is", "source": "metagpt/tools/__init__.py:SearchEngineType", "target": "class"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:SearchEngineType", "target": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"SearchEngineType\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/__init__.py:WebBrowserEngineType", "target": "class"}, {"predicate": "has_class_method", "source": "metagpt/tools/__init__.py:WebBrowserEngineType", "target": "metagpt/tools/__init__.py:WebBrowserEngineType:__missing__"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:WebBrowserEngineType", "target": "{\"lineno\":21,\"end_lineno\":29,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"WebBrowserEngineType\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/__init__.py:WebBrowserEngineType:__missing__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:ast.Constant:\n@Time : 2023/4/29 15:35\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:35\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:module:enum", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/__init__.py:names:['Enum']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "is", "source": "metagpt/tools/search_engine_googleapi.py:safe_google_results", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:safe_google_results", "target": "{\"lineno\":120,\"end_lineno\":133,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"safe_google_results\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:__future__", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['annotations']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:concurrent", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['futures']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:urllib.parse", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['urlparse']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:httplib2", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"httplib2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['BaseModel', 'ConfigDict', 'Field', 'field_validator']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:metagpt.config2", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['config']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:module:metagpt.logs", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/search_engine_googleapi.py:__name__:__main__", "target": "{\"lineno\":136,\"end_lineno\":139,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_run_precheck", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:SeleniumWrapper:_scrape_website", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:_gen_get_driver_func", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:_gen_get_driver_func", "target": "{\"lineno\":101,\"end_lineno\":125,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_gen_get_driver_func\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/web_browser_engine_selenium.py:_webdriver_manager_types", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:_webdriver_manager_types", "target": "{\"lineno\":86,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"_webdriver_manager_types\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:__future__", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['annotations']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:asyncio", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:importlib", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:concurrent", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['futures']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"concurrent\",\"names\":[\"futures\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:copy", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['deepcopy']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['Literal']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.common.by", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.common.by\",\"names\":[\"By\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['By']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.common.by\",\"names\":[\"By\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.support", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support\",\"names\":[\"expected_conditions as EC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['expected_conditions as EC']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support\",\"names\":[\"expected_conditions as EC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:selenium.webdriver.support.wait", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support.wait\",\"names\":[\"WebDriverWait\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['WebDriverWait']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"selenium.webdriver.support.wait\",\"names\":[\"WebDriverWait\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:webdriver_manager.core.download_manager", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.download_manager\",\"names\":[\"WDMDownloadManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['WDMDownloadManager']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.download_manager\",\"names\":[\"WDMDownloadManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:webdriver_manager.core.http", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.http\",\"names\":[\"WDMHttpClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['WDMHttpClient']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"webdriver_manager.core.http\",\"names\":[\"WDMHttpClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:metagpt.config2", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['config']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:module:metagpt.utils.parse_html", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/web_browser_engine_selenium.py:names:['WebPage']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.parse_html\",\"names\":[\"WebPage\"]}}"}, {"predicate": "is", "source": "metagpt/tools/openapi_v3_hello.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/tools/openapi_v3_hello.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/tools/openapi_v3_hello.py", "target": "metagpt/tools/openapi_v3_hello.py:post_greeting"}, {"predicate": "is", "source": "metagpt/tools/openapi_v3_hello.py:post_greeting", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:post_greeting", "target": "{\"lineno\":21,\"end_lineno\":22,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"post_greeting\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:ast.Constant:\n@Time : 2023/5/2 16:03\n@Author : mashenquan\n@File : openapi_v3_hello.py\n@Desc : Implement the OpenAPI Specification 3.0 demo and use the following command to test the HTTP service:\n\n curl -X 'POST' 'http://localhost:8082/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\n", "target": "{\"lineno\":3,\"end_lineno\":14,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/2 16:03\\n@Author : mashenquan\\n@File : openapi_v3_hello.py\\n@Desc : Implement the OpenAPI Specification 3.0 demo and use the following command to test the HTTP service:\\n\\n curl -X 'POST' 'http://localhost:8082/openapi/greeting/dave' -H 'accept: text/plain' -H 'Content-Type: application/json' -d '{}'\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:module:pathlib", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:names:['Path']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:connexion", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"connexion\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openapi_v3_hello.py:__name__:__main__", "target": "{\"lineno\":25,\"end_lineno\":29,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:AzureTTS:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/azure_tts.py:oas3_azsure_tts", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:oas3_azsure_tts", "target": "{\"lineno\":60,\"end_lineno\":100,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_azsure_tts\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:ast.Constant:\n@Time : 2023/6/9 22:22\n@Author : Leo Xiao\n@File : azure_tts.py\n@Modified by: mashenquan, 2023/8/17. Azure TTS OAS3 api, which provides text-to-speech functionality\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/9 22:22\\n@Author : Leo Xiao\\n@File : azure_tts.py\\n@Modified by: mashenquan, 2023/8/17. Azure TTS OAS3 api, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:base64", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:module:pathlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:names:['Path']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:module:uuid", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:names:['uuid4']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:aiofiles", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:module:azure.cognitiveservices.speech", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"azure.cognitiveservices.speech\",\"names\":[\"AudioConfig\",\"SpeechConfig\",\"SpeechSynthesizer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:names:['AudioConfig', 'SpeechConfig', 'SpeechSynthesizer']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"azure.cognitiveservices.speech\",\"names\":[\"AudioConfig\",\"SpeechConfig\",\"SpeechSynthesizer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/azure_tts.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:OpenAIText2Image:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/openai_text_to_image.py:oas3_openai_text_to_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:oas3_openai_text_to_image", "target": "{\"lineno\":57,\"end_lineno\":67,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_openai_text_to_image\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : openai_text_to_image.py\n@Desc : OpenAI Text-to-Image OAS3 api, which provides text-to-image functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : openai_text_to_image.py\\n@Desc : OpenAI Text-to-Image OAS3 api, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:aiohttp", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:requests", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/openai_text_to_image.py:names:['BaseLLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:__para_to_str", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:_para_to_str", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:UTGenerator:_generate_ut", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:ICL_SAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:ICL_SAMPLE", "target": "{\"lineno\":11,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"ICL_SAMPLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:ACT_PROMPT_PREFIX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:ACT_PROMPT_PREFIX", "target": "{\"lineno\":67,\"end_lineno\":70,\"type_name\":\"ast.Assign\",\"tokens\":[\"ACT_PROMPT_PREFIX\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:YFT_PROMPT_PREFIX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:YFT_PROMPT_PREFIX", "target": "{\"lineno\":72,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"YFT_PROMPT_PREFIX\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/ut_writer.py:OCR_API_DOC", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:OCR_API_DOC", "target": "{\"lineno\":78,\"end_lineno\":101,\"type_name\":\"ast.Assign\",\"tokens\":[\"OCR_API_DOC\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:json", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:module:pathlib", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:names:['Path']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:module:metagpt.config2", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:names:['config']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM as GPTAPI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:names:['OpenAILLM as GPTAPI']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM as GPTAPI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:module:metagpt.utils.common", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/ut_writer.py:names:['awrite']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"awrite\"]}}"}, {"predicate": "is", "source": "metagpt/tools/translator.py:prompt", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/translator.py:prompt", "target": "{\"lineno\":9,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"prompt\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/translator.py:ast.Constant:\n@Time : 2023/4/29 15:36\n@Author : alexanderwu\n@File : translator.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:36\\n@Author : alexanderwu\\n@File : translator.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:MetaGPTText2Image:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/metagpt_text_to_image.py:oas3_metagpt_text_to_image", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:oas3_metagpt_text_to_image", "target": "{\"lineno\":85,\"end_lineno\":95,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_metagpt_text_to_image\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : metagpt_text_to_image.py\n@Desc : MetaGPT Text-to-Image OAS3 api, which provides text-to-image functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : metagpt_text_to_image.py\\n@Desc : MetaGPT Text-to-Image OAS3 api, which provides text-to-image functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:base64", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:names:['Dict', 'List']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:aiohttp", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:requests", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:module:pydantic", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:names:['BaseModel']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/metagpt_text_to_image.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:IFlyTekTTS:_create_url", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:oas3_iflytek_tts", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:oas3_iflytek_tts", "target": "{\"lineno\":117,\"end_lineno\":143,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"oas3_iflytek_tts\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/tools/iflytek_tts.py:DEFAULT_IFLYTEK_VOICE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:DEFAULT_IFLYTEK_VOICE", "target": "{\"lineno\":48,\"end_lineno\":48,\"type_name\":\"ast.Assign\",\"tokens\":[\"DEFAULT_IFLYTEK_VOICE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:ast.Constant:\n@Time : 2023/8/17\n@Author : mashenquan\n@File : iflytek_tts.py\n@Desc : iFLYTEK TTS OAS3 api, which provides text-to-speech functionality\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/17\\n@Author : mashenquan\\n@File : iflytek_tts.py\\n@Desc : iFLYTEK TTS OAS3 api, which provides text-to-speech functionality\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:base64", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:hashlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:hmac", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"hmac\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:json", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:uuid", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:datetime", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['datetime']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:enum", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['Enum']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:pathlib", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['Path']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:time", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['mktime']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:typing", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['Optional']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:urllib.parse", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['urlencode']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:wsgiref.handlers", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['format_date_time']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:aiofiles", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:websockets as websockets", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"websockets as websockets\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:pydantic", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['BaseModel']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:module:metagpt.logs", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/iflytek_tts.py:names:['logger']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:GPTPromptGenerator:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:WikiHowTemplate:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:EnronTemplate:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/tools/prompt_writer.py:BEAGECTemplate:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:ast.Constant:\n@Time : 2023/5/2 16:03\n@Author : alexanderwu\n@File : prompt_writer.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/2 16:03\\n@Author : alexanderwu\\n@File : prompt_writer.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/tools/prompt_writer.py:names:['Union']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:ast.Constant:\n@Time : 2023/5/20 12:15\n@Author : alexanderwu\n@File : memory.py\n@Modified By: mashenquan, 2023-11-1. According to RFC 116: Updated the type of index key.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/20 12:15\\n@Author : alexanderwu\\n@File : memory.py\\n@Modified By: mashenquan, 2023-11-1. According to RFC 116: Updated the type of index key.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:collections", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['defaultdict']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"DefaultDict\",\"Iterable\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['DefaultDict', 'Iterable', 'Set']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"DefaultDict\",\"Iterable\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"SerializeAsAny\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['BaseModel', 'Field', 'SerializeAsAny']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"SerializeAsAny\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"IGNORED_MESSAGE_ID\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['IGNORED_MESSAGE_ID']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"IGNORED_MESSAGE_ID\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:metagpt.schema", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['Message']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:module:metagpt.utils.common", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory.py:names:['any_to_str', 'any_to_str_set']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"any_to_str_set\"]}}"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_openai_summarize", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_summarize", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_is_related", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_openai_is_related", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_metagpt_rewrite", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_openai_rewrite", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_summarize", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/brain_memory.py:BrainMemory:_get_summary", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:ast.Constant:\n@Time : 2023/8/18\n@Author : mashenquan\n@File : brain_memory.py\n@Desc : Used by AgentStore. Used for long-term storage and automatic compression.\n@Modified By: mashenquan, 2023/9/4. + redis memory cache.\n@Modified By: mashenquan, 2023/12/25. Simplify Functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/18\\n@Author : mashenquan\\n@File : brain_memory.py\\n@Desc : Used by AgentStore. Used for long-term storage and automatic compression.\\n@Modified By: mashenquan, 2023/9/4. + redis memory cache.\\n@Modified By: mashenquan, 2023/12/25. Simplify Functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:re", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['Dict', 'List', 'Optional']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:pydantic", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.config2", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['config']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.const", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_MAX_TOKENS\",\"DEFAULT_TOKEN_SIZE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['DEFAULT_MAX_TOKENS', 'DEFAULT_TOKEN_SIZE']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_MAX_TOKENS\",\"DEFAULT_TOKEN_SIZE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.provider", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"MetaGPTLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['MetaGPTLLM']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"MetaGPTLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['BaseLLM']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.schema", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"SimpleMessage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['Message', 'SimpleMessage']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"SimpleMessage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:module:metagpt.utils.redis", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.redis\",\"names\":[\"Redis\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/brain_memory.py:names:['Redis']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.redis\",\"names\":[\"Redis\"]}}"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:_load", "target": "class_method"}, {"predicate": "is", "source": "metagpt/memory/memory_storage.py:MemoryStorage:_get_index_and_store_fname", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:ast.Constant:\n@Desc : the implement of memory storage\n", "target": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Desc : the implement of memory storage\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:pathlib", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['Path']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:langchain.embeddings", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['OpenAIEmbeddings']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:langchain.vectorstores.faiss", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores.faiss\",\"names\":[\"FAISS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['FAISS']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores.faiss\",\"names\":[\"FAISS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:langchain_core.embeddings", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['Embeddings']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\",\"MEM_TTL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['DATA_PATH', 'MEM_TTL']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_PATH\",\"MEM_TTL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.document_store.faiss_store", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['FaissStore']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.schema", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['Message']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:module:metagpt.utils.serialize", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"deserialize_message\",\"serialize_message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/memory_storage.py:names:['deserialize_message', 'serialize_message']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.serialize\",\"names\":[\"deserialize_message\",\"serialize_message\"]}}"}, {"predicate": "is", "source": "metagpt/memory/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/memory/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/memory/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/memory/__init__.py:__all__", "target": "{\"lineno\":14,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:57\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:57\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/__init__.py:module:metagpt.memory.memory", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/__init__.py:names:['Memory']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:ast.Constant:\n@Desc : the implement of Long-term memory\n", "target": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Desc : the implement of Long-term memory\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['Optional']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:pydantic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['ConfigDict', 'Field']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.logs", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['logger']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.memory", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['Memory']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.memory.memory_storage", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory_storage\",\"names\":[\"MemoryStorage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['MemoryStorage']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.memory_storage\",\"names\":[\"MemoryStorage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.roles.role", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"RoleContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['RoleContext']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"RoleContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:module:metagpt.schema", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/memory/longterm_memory.py:names:['Message']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/document_store/qdrant_store.py:QdrantStore:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:dataclasses", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"dataclasses\",\"names\":[\"dataclass\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['dataclass']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"dataclasses\",\"names\":[\"dataclass\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:typing", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['List']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:qdrant_client", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client\",\"names\":[\"QdrantClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['QdrantClient']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client\",\"names\":[\"QdrantClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:qdrant_client.models", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client.models\",\"names\":[\"Filter\",\"PointStruct\",\"VectorParams\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['Filter', 'PointStruct', 'VectorParams']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"qdrant_client.models\",\"names\":[\"Filter\",\"PointStruct\",\"VectorParams\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:module:metagpt.document_store.base_store", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/qdrant_store.py:names:['BaseStore']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "is", "source": "metagpt/document_store/chromadb_store.py:ChromaStore:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/chromadb_store.py:ast.Constant:\n@Time : 2023/5/29 14:46\n@Author : alexanderwu\n@File : chromadb_store.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/29 14:46\\n@Author : alexanderwu\\n@File : chromadb_store.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/chromadb_store.py:chromadb", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"chromadb\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/document_store/lancedb_store.py:LanceStore:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:ast.Constant:\n@Time : 2023/8/9 15:42\n@Author : unkn-wn (Leon Yee)\n@File : lancedb_store.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/9 15:42\\n@Author : unkn-wn (Leon Yee)\\n@File : lancedb_store.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:shutil", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/lancedb_store.py:lancedb", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"lancedb\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/document_store/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/document_store/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/document_store/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/document_store/__init__.py:__all__", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/__init__.py:ast.Constant:\n@Time : 2023/5/25 10:20\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 10:20\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/__init__.py:module:metagpt.document_store.faiss_store", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/__init__.py:names:['FaissStore']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.faiss_store\",\"names\":[\"FaissStore\"]}}"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:_load", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/faiss_store.py:FaissStore:_write", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:ast.Constant:\n@Time : 2023/5/25 10:20\n@Author : alexanderwu\n@File : faiss_store.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 10:20\\n@Author : alexanderwu\\n@File : faiss_store.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:asyncio", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['Optional']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:langchain.vectorstores", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores\",\"names\":[\"FAISS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['FAISS']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain.vectorstores\",\"names\":[\"FAISS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:langchain_core.embeddings", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['Embeddings']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_core.embeddings\",\"names\":[\"Embeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:metagpt.document", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document\",\"names\":[\"IndexableDocument\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['IndexableDocument']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document\",\"names\":[\"IndexableDocument\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:metagpt.document_store.base_store", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"LocalStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['LocalStore']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"LocalStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:metagpt.logs", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['logger']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:module:metagpt.utils.embedding", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.embedding\",\"names\":[\"get_embedding\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/faiss_store.py:names:['get_embedding']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.embedding\",\"names\":[\"get_embedding\"]}}"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:_get_index_and_store_fname", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:_load", "target": "class_method"}, {"predicate": "is", "source": "metagpt/document_store/base_store.py:LocalStore:_write", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:ast.Constant:\n@Time : 2023/5/28 00:01\n@Author : alexanderwu\n@File : base_store.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/28 00:01\\n@Author : alexanderwu\\n@File : base_store.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:module:abc", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:names:['ABC', 'abstractmethod']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/document_store/base_store.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "is", "source": "metagpt/provider/anthropic_api.py:Claude2:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:ast.Constant:\n@Time : 2023/7/21 11:15\n@Author : Leo Xiao\n@File : anthropic_api.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/21 11:15\\n@Author : Leo Xiao\\n@File : anthropic_api.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:anthropic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"anthropic\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:module:anthropic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anthropic\",\"names\":[\"Anthropic\",\"AsyncAnthropic\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:names:['Anthropic', 'AsyncAnthropic']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anthropic\",\"names\":[\"Anthropic\",\"AsyncAnthropic\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/anthropic_api.py:names:['LLMConfig']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:__init_gemini", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_user_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_assistant_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_const_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_update_costs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/google_gemini_api.py:GeminiLLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:google.generativeai as genai", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"google.generativeai as genai\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:google.ai", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.ai\",\"names\":[\"generativelanguage as glm\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['generativelanguage as glm']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.ai\",\"names\":[\"generativelanguage as glm\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:google.generativeai.generative_models", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.generative_models\",\"names\":[\"GenerativeModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['GenerativeModel']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.generative_models\",\"names\":[\"GenerativeModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:google.generativeai.types", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types\",\"names\":[\"content_types\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['content_types']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types\",\"names\":[\"content_types\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:google.generativeai.types.generation_types", "target": "{\"lineno\":9,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types.generation_types\",\"names\":[\"AsyncGenerateContentResponse\",\"GenerateContentResponse\",\"GenerationConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['AsyncGenerateContentResponse', 'GenerateContentResponse', 'GenerationConfig']", "target": "{\"lineno\":9,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"google.generativeai.types.generation_types\",\"names\":[\"AsyncGenerateContentResponse\",\"GenerateContentResponse\",\"GenerationConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:tenacity", "target": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":14,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.logs", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['log_llm_stream', 'logger']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['BaseLLM']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['register_provider']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/google_gemini_api.py:names:['log_and_reraise']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_init_client", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/azure_openai_api.py:AzureOpenAILLM:_make_client_kwargs", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : openai.py\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\n", "target": "{\"lineno\":2,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : openai.py\\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:openai", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncAzureOpenAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['AsyncAzureOpenAI']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncAzureOpenAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:openai._base_client", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['AsyncHttpxClientWrapper']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['LLMType']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['register_provider']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/azure_openai_api.py:names:['OpenAILLM']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:_make_client_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:_update_costs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:FireworksLLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/fireworks_api.py:MODEL_GRADE_TOKEN_COSTS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:MODEL_GRADE_TOKEN_COSTS", "target": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"MODEL_GRADE_TOKEN_COSTS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:re", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:openai", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncStream\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['APIConnectionError', 'AsyncStream']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncStream\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:openai.types", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['CompletionUsage']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:openai.types.chat", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletionChunk\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['ChatCompletionChunk']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletionChunk\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:tenacity", "target": "{\"lineno\":10,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":10,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['register_provider']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\",\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['OpenAILLM', 'log_and_reraise']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\",\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/fireworks_api.py:names:['CostManager', 'Costs']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:__init_ollama", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:_const_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:_update_costs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:_decode_and_load", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/ollama_api.py:OllamaLLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:json", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:requests", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['ConnectionError']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:tenacity", "target": "{\"lineno\":8,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":8,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.const", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"LLM_API_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['LLM_API_TIMEOUT']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"LLM_API_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.logs", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['log_llm_stream', 'logger']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['BaseLLM']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.provider.general_api_requestor", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['GeneralAPIRequestor']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['register_provider']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['log_and_reraise']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"TokenCostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/ollama_api.py:names:['TokenCostManager']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"TokenCostManager\"]}}"}, {"predicate": "is", "source": "metagpt/provider/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/provider/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:__all__", "target": "{\"lineno\":20,\"end_lineno\":31,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:ast.Constant:\n@Time : 2023/5/5 22:59\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 22:59\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.fireworks_api", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.fireworks_api\",\"names\":[\"FireworksLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['FireworksLLM']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.fireworks_api\",\"names\":[\"FireworksLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.google_gemini_api", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.google_gemini_api\",\"names\":[\"GeminiLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['GeminiLLM']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.google_gemini_api\",\"names\":[\"GeminiLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.ollama_api", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.ollama_api\",\"names\":[\"OllamaLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['OllamaLLM']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.ollama_api\",\"names\":[\"OllamaLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.open_llm_api", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.open_llm_api\",\"names\":[\"OpenLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['OpenLLM']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.open_llm_api\",\"names\":[\"OpenLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['OpenAILLM']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.zhipuai_api", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai_api\",\"names\":[\"ZhiPuAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['ZhiPuAILLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai_api\",\"names\":[\"ZhiPuAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.azure_openai_api", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.azure_openai_api\",\"names\":[\"AzureOpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['AzureOpenAILLM']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.azure_openai_api\",\"names\":[\"AzureOpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.metagpt_api", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.metagpt_api\",\"names\":[\"MetaGPTLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['MetaGPTLLM']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.metagpt_api\",\"names\":[\"MetaGPTLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.human_provider", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.human_provider\",\"names\":[\"HumanProvider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['HumanProvider']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.human_provider\",\"names\":[\"HumanProvider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:module:metagpt.provider.spark_api", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.spark_api\",\"names\":[\"SparkLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/__init__.py:names:['SparkLLM']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.spark_api\",\"names\":[\"SparkLLM\"]}}"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_init_model", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_init_client", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_make_client_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_get_proxy_params", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_cons_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_func_configs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_achat_completion_function", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_process_message", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_calc_usage", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_update_costs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:OpenAILLM:_get_max_tokens", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/openai_api.py:log_and_reraise", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:log_and_reraise", "target": "{\"lineno\":40,\"end_lineno\":48,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_and_reraise\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : openai.py\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\n", "target": "{\"lineno\":2,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : openai.py\\n@Modified By: mashenquan, 2023/11/21. Fix bug: ReadTimeout.\\n@Modified By: mashenquan, 2023/12/1. Fix bug: Unclosed connection caused by openai 0.x.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:json", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncIterator\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['AsyncIterator', 'Optional', 'Union']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncIterator\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:openai", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncOpenAI\",\"AsyncStream\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['APIConnectionError', 'AsyncOpenAI', 'AsyncStream']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"APIConnectionError\",\"AsyncOpenAI\",\"AsyncStream\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:openai._base_client", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['AsyncHttpxClientWrapper']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai._base_client\",\"names\":[\"AsyncHttpxClientWrapper\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:openai.types", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['CompletionUsage']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:openai.types.chat", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletion\",\"ChatCompletionChunk\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['ChatCompletion', 'ChatCompletionChunk']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types.chat\",\"names\":[\"ChatCompletion\",\"ChatCompletionChunk\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:tenacity", "target": "{\"lineno\":17,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":17,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.logs", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['log_llm_stream', 'logger']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['BaseLLM']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.provider.constant", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.constant\",\"names\":[\"GENERAL_FUNCTION_SCHEMA\",\"GENERAL_TOOL_CHOICE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['GENERAL_FUNCTION_SCHEMA', 'GENERAL_TOOL_CHOICE']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.constant\",\"names\":[\"GENERAL_FUNCTION_SCHEMA\",\"GENERAL_TOOL_CHOICE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['register_provider']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.schema", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['Message']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['CostManager', 'Costs']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\",\"Costs\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['handle_exception']", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":33,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\",\"get_max_completion_tokens\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/openai_api.py:names:['count_message_tokens', 'count_string_tokens', 'get_max_completion_tokens']", "target": "{\"lineno\":33,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\",\"get_max_completion_tokens\"]}}"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:SparkLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/spark_api.py:GetMessageFromWeb:_run", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:ast.Constant:\n@File : spark_api.py\n", "target": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@File : spark_api.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:_thread as thread", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"_thread as thread\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:base64", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:datetime", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"datetime\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:hashlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"hashlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:hmac", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"hmac\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:ssl", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"ssl\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:time", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['mktime']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"time\",\"names\":[\"mktime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:urllib.parse", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['urlencode', 'urlparse']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:wsgiref.handlers", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['format_date_time']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"wsgiref.handlers\",\"names\":[\"format_date_time\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:websocket", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"websocket\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['BaseLLM']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/spark_api.py:names:['register_provider']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response_line", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_response", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:GeneralAPIRequestor:_interpret_async_response", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:parse_stream_helper", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:parse_stream_helper", "target": "{\"lineno\":15,\"end_lineno\":28,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream_helper\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_requestor.py:parse_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:parse_stream", "target": "{\"lineno\":31,\"end_lineno\":35,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Generator\",\"Iterator\",\"Tuple\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:names:['AsyncGenerator', 'Generator', 'Iterator', 'Tuple', 'Union']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"Generator\",\"Iterator\",\"Tuple\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:aiohttp", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:requests", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:module:metagpt.logs", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:names:['logger']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:module:metagpt.provider.general_api_base", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_base\",\"names\":[\"APIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_requestor.py:names:['APIRequestor']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_base\",\"names\":[\"APIRequestor\"]}}"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_user_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_assistant_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_system_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_system_msgs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_default_system_msg", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/base_llm.py:BaseLLM:_extract_assistant_rsp", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:ast.Constant:\n@Time : 2023/5/5 23:04\n@Author : alexanderwu\n@File : base_llm.py\n@Desc : mashenquan, 2023/8/22. + try catch\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:04\\n@Author : alexanderwu\\n@File : base_llm.py\\n@Desc : mashenquan, 2023/8/22. + try catch\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:json", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:abc", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['ABC', 'abstractmethod']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['Optional', 'Union']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:openai", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncOpenAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['AsyncOpenAI']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"AsyncOpenAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['LLMConfig']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:metagpt.schema", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['Message']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/base_llm.py:names:['CostManager']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"CostManager\"]}}"}, {"predicate": "is", "source": "metagpt/provider/constant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/constant.py", "target": "python"}, {"predicate": "is", "source": "metagpt/provider/constant.py:GENERAL_FUNCTION_SCHEMA", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/constant.py:GENERAL_FUNCTION_SCHEMA", "target": "{\"lineno\":3,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERAL_FUNCTION_SCHEMA\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/constant.py:GENERAL_TOOL_CHOICE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/constant.py:GENERAL_TOOL_CHOICE", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"GENERAL_TOOL_CHOICE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:__init_zhipuai", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_const_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_update_costs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/zhipuai_api.py:ZhiPuAILLM:_achat_completion_stream", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:enum", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['Enum']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:openai", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"openai\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:zhipuai", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"zhipuai\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:requests", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['ConnectionError']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"requests\",\"names\":[\"ConnectionError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:tenacity", "target": "{\"lineno\":10,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['after_log', 'retry', 'retry_if_exception_type', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":10,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"after_log\",\"retry\",\"retry_if_exception_type\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['log_llm_stream', 'logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"log_llm_stream\",\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['BaseLLM']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['register_provider']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['log_and_reraise']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"log_and_reraise\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:module:metagpt.provider.zhipuai.zhipu_model_api", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.zhipu_model_api\",\"names\":[\"ZhiPuModelAPI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai_api.py:names:['ZhiPuModelAPI']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.zhipu_model_api\",\"names\":[\"ZhiPuModelAPI\"]}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:OpenAIResponse:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_validate_headers", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_prepare_request_raw", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_async_response", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:APIRequestor:_interpret_response_line", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_console_log_level", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_console_log_level", "target": "{\"lineno\":78,\"end_lineno\":82,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_console_log_level\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:log_debug", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:log_debug", "target": "{\"lineno\":85,\"end_lineno\":89,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_debug\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:log_info", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:log_info", "target": "{\"lineno\":92,\"end_lineno\":96,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_info\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:log_warn", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:log_warn", "target": "{\"lineno\":99,\"end_lineno\":102,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"log_warn\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:logfmt", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:logfmt", "target": "{\"lineno\":105,\"end_lineno\":120,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"logfmt\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_build_api_url", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_build_api_url", "target": "{\"lineno\":153,\"end_lineno\":159,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_build_api_url\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_requests_proxies_arg", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_requests_proxies_arg", "target": "{\"lineno\":162,\"end_lineno\":173,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_requests_proxies_arg\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_aiohttp_proxies_arg", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_aiohttp_proxies_arg", "target": "{\"lineno\":176,\"end_lineno\":187,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_aiohttp_proxies_arg\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_make_session", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_make_session", "target": "{\"lineno\":190,\"end_lineno\":196,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_make_session\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:parse_stream_helper", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:parse_stream_helper", "target": "{\"lineno\":199,\"end_lineno\":210,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream_helper\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:parse_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:parse_stream", "target": "{\"lineno\":213,\"end_lineno\":217,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_stream\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:parse_stream_async", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:parse_stream_async", "target": "{\"lineno\":220,\"end_lineno\":224,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"parse_stream_async\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:aiohttp_session", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:aiohttp_session", "target": "{\"lineno\":620,\"end_lineno\":622,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aiohttp_session\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:logger", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:logger", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"logger\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:TIMEOUT_SECS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:TIMEOUT_SECS", "target": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"TIMEOUT_SECS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:MAX_SESSION_LIFETIME_SECS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:MAX_SESSION_LIFETIME_SECS", "target": "{\"lineno\":43,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"MAX_SESSION_LIFETIME_SECS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:MAX_CONNECTION_RETRIES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:MAX_CONNECTION_RETRIES", "target": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"MAX_CONNECTION_RETRIES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:_thread_context", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:_thread_context", "target": "{\"lineno\":47,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"_thread_context\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:LLM_LOG", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:LLM_LOG", "target": "{\"lineno\":49,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_LOG\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/general_api_base.py:api_key_to_header", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:api_key_to_header", "target": "{\"lineno\":71,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"api_key_to_header\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:os", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:platform", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:re", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:sys", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:threading", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"threading\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:time", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"time\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:contextlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"contextlib\",\"names\":[\"asynccontextmanager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['asynccontextmanager']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"contextlib\",\"names\":[\"asynccontextmanager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:enum", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['Enum']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"AsyncIterator\",\"Dict\",\"Iterator\",\"Optional\",\"Tuple\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['AsyncGenerator', 'AsyncIterator', 'Dict', 'Iterator', 'Optional', 'Tuple', 'Union', 'overload']", "target": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"AsyncGenerator\",\"AsyncIterator\",\"Dict\",\"Iterator\",\"Optional\",\"Tuple\",\"Union\",\"overload\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:urllib.parse", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlsplit\",\"urlunsplit\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['urlencode', 'urlsplit', 'urlunsplit']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urlencode\",\"urlsplit\",\"urlunsplit\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:aiohttp", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:requests", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.Import\",\"tokens\":[\"requests\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:sys.version_info", "target": "{\"lineno\":30,\"end_lineno\":33,\"type_name\":\"ast.If\",\"tokens\":[\"sys.version_info\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:logging", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.Import\",\"tokens\":[\"logging\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:openai", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.Import\",\"tokens\":[\"openai\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:module:openai", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"version\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/general_api_base.py:names:['version']", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai\",\"names\":[\"version\"]}}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLMProviderRegistry:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:register_provider", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:register_provider", "target": "{\"lineno\":24,\"end_lineno\":31,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_provider\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:create_llm_instance", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:create_llm_instance", "target": "{\"lineno\":34,\"end_lineno\":36,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"create_llm_instance\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/provider/llm_provider_registry.py:LLM_REGISTRY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:LLM_REGISTRY", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"LLM_REGISTRY\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:ast.Constant:\n@Time : 2023/12/19 17:26\n@Author : alexanderwu\n@File : llm_provider_registry.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19 17:26\\n@Author : alexanderwu\\n@File : llm_provider_registry.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/llm_provider_registry.py:names:['BaseLLM']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:ast.Constant:\n@Time : 2023/5/5 23:08\n@Author : alexanderwu\n@File : metagpt_api.py\n@Desc : MetaGPT LLM provider.\n", "target": "{\"lineno\":2,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/5 23:08\\n@Author : alexanderwu\\n@File : metagpt_api.py\\n@Desc : MetaGPT LLM provider.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:names:['LLMType']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:module:metagpt.provider", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:names:['OpenAILLM']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/metagpt_api.py:names:['register_provider']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:_make_client_kwargs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:_calc_usage", "target": "class_method"}, {"predicate": "is", "source": "metagpt/provider/open_llm_api.py:OpenLLM:_update_costs", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:openai.types", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['CompletionUsage']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"openai.types\",\"names\":[\"CompletionUsage\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['LLMConfig', 'LLMType']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\",\"LLMType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.logs", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['logger']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.provider.llm_provider_registry", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['register_provider']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.llm_provider_registry\",\"names\":[\"register_provider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.provider.openai_api", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['OpenAILLM']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.openai_api\",\"names\":[\"OpenAILLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.utils.cost_manager", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"Costs\",\"TokenCostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['Costs', 'TokenCostManager']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.cost_manager\",\"names\":[\"Costs\",\"TokenCostManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/open_llm_api.py:names:['count_message_tokens', 'count_string_tokens']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"predicate": "is", "source": "metagpt/provider/human_provider.py:HumanProvider:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:ast.Constant:\nFilename: MetaGPT/metagpt/provider/human_provider.py\nCreated Date: Wednesday, November 8th 2023, 11:55:46 pm\nAuthor: garylin2099\n", "target": "{\"lineno\":1,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\nFilename: MetaGPT/metagpt/provider/human_provider.py\\nCreated Date: Wednesday, November 8th 2023, 11:55:46 pm\\nAuthor: garylin2099\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:names:['Optional']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:module:metagpt.configs.llm_config", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:names:['LLMConfig']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.llm_config\",\"names\":[\"LLMConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:module:metagpt.logs", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:names:['logger']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/human_provider.py:names:['BaseLLM']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/async_sse_client.py:AsyncSSEClient:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/async_sse_client.py:json", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/async_sse_client.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/async_sse_client.py:names:['Any', 'Iterator']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterator\"]}}"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/zhipuai/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:json", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:module:zhipuai", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai\",\"names\":[\"ZhipuAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['ZhipuAI']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai\",\"names\":[\"ZhipuAI\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:module:zhipuai.core._http_client", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai.core._http_client\",\"names\":[\"ZHIPUAI_DEFAULT_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['ZHIPUAI_DEFAULT_TIMEOUT']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"zhipuai.core._http_client\",\"names\":[\"ZHIPUAI_DEFAULT_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:module:metagpt.provider.general_api_requestor", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['GeneralAPIRequestor']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.general_api_requestor\",\"names\":[\"GeneralAPIRequestor\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:module:metagpt.provider.zhipuai.async_sse_client", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.async_sse_client\",\"names\":[\"AsyncSSEClient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/zhipuai/zhipu_model_api.py:names:['AsyncSSEClient']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.zhipuai.async_sse_client\",\"names\":[\"AsyncSSEClient\"]}}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/postprocess/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:module:typing", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:names:['Union']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:module:metagpt.utils.repair_llm_raw_output", "target": "{\"lineno\":7,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"RepairType\",\"extract_content_from_output\",\"repair_llm_raw_output\",\"retry_parse_json_text\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/base_postprocess_plugin.py:names:['RepairType', 'extract_content_from_output', 'repair_llm_raw_output', 'retry_parse_json_text']", "target": "{\"lineno\":7,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"RepairType\",\"extract_content_from_output\",\"repair_llm_raw_output\",\"retry_parse_json_text\"]}}"}, {"predicate": "is", "source": "metagpt/provider/postprocess/llm_output_postprocess.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/provider/postprocess/llm_output_postprocess.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/provider/postprocess/llm_output_postprocess.py", "target": "metagpt/provider/postprocess/llm_output_postprocess.py:llm_output_postprocess"}, {"predicate": "is", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:llm_output_postprocess", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:llm_output_postprocess", "target": "{\"lineno\":10,\"end_lineno\":20,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"llm_output_postprocess\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:module:typing", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:names:['Union']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:module:metagpt.provider.postprocess.base_postprocess_plugin", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.base_postprocess_plugin\",\"names\":[\"BasePostProcessPlugin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/provider/postprocess/llm_output_postprocess.py:names:['BasePostProcessPlugin']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.base_postprocess_plugin\",\"names\":[\"BasePostProcessPlugin\"]}}"}, {"predicate": "is", "source": "metagpt/management/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/management/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/management/__init__.py:ast.Constant:\n@Time : 2023/4/30 20:58\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/30 20:58\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:SkillManager:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/management/skill_manager.py:Skill", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:Skill", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Assign\",\"tokens\":[\"Skill\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:ast.Constant:\n@Time : 2023/6/5 01:44\n@Author : alexanderwu\n@File : skill_manager.py\n@Modified By: mashenquan, 2023/8/20. Remove useless `llm`\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/5 01:44\\n@Author : alexanderwu\\n@File : skill_manager.py\\n@Modified By: mashenquan, 2023/8/20. Remove useless `llm`\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:module:metagpt.actions", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:names:['Action']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:module:metagpt.const", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PROMPT_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:names:['PROMPT_PATH']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PROMPT_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:module:metagpt.document_store.chromadb_store", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.chromadb_store\",\"names\":[\"ChromaStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:names:['ChromaStore']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.chromadb_store\",\"names\":[\"ChromaStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:module:metagpt.logs", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:names:['logger']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/management/skill_manager.py:__name__:__main__", "target": "{\"lineno\":77,\"end_lineno\":79,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_parse_tasks", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act_sp_with_cr", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act_write_code", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act_summarize", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_act_code_plan_and_change", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_is_pass", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_coding_context", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_coding_doc", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_code_actions", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_summarize_actions", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:Engineer:_new_code_plan_and_change_action", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/engineer.py:IS_PASS_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:IS_PASS_PROMPT", "target": "{\"lineno\":52,\"end_lineno\":59,\"type_name\":\"ast.Assign\",\"tokens\":[\"IS_PASS_PROMPT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : engineer.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116:\n 1. Modify the data type of the `cause_by` value in the `Message` to a string, and utilize the new message\n distribution feature for message filtering.\n 2. Consolidate message reception and processing logic within `_observe`.\n 3. Fix bug: Add logic for handling asynchronous message processing when messages are not ready.\n 4. Supplemented the external transmission of internal messages.\n@Modified By: mashenquan, 2023-11-27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.5 of RFC 135, add incremental iteration functionality.\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\n of SummarizeCode.\n", "target": "{\"lineno\":3,\"end_lineno\":18,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : engineer.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116:\\n 1. Modify the data type of the `cause_by` value in the `Message` to a string, and utilize the new message\\n distribution feature for message filtering.\\n 2. Consolidate message reception and processing logic within `_observe`.\\n 3. Fix bug: Add logic for handling asynchronous message processing when messages are not ready.\\n 4. Supplemented the external transmission of internal messages.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.5 of RFC 135, add incremental iteration functionality.\\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\\n of SummarizeCode.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:__future__", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['annotations']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:json", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:os", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:collections", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['defaultdict']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:pathlib", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['Path']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:typing", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['Set']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"WriteCode\",\"WriteCodeReview\",\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['Action', 'WriteCode', 'WriteCodeReview', 'WriteTasks']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"WriteCode\",\"WriteCodeReview\",\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions.fix_bug", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['FixBug']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions.project_management_an", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['REFINED_TASK_LIST', 'TASK_LIST']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions.summarize_code", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['SummarizeCode']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.actions.write_code_plan_and_change_an", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"WriteCodePlanAndChange\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['WriteCodePlanAndChange']", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"WriteCodePlanAndChange\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.const", "target": "{\"lineno\":33,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_FILENAME\",\"REQUIREMENT_FILENAME\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['CODE_PLAN_AND_CHANGE_FILE_REPO', 'CODE_PLAN_AND_CHANGE_FILENAME', 'REQUIREMENT_FILENAME', 'SYSTEM_DESIGN_FILE_REPO', 'TASK_FILE_REPO']", "target": "{\"lineno\":33,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_FILENAME\",\"REQUIREMENT_FILENAME\",\"SYSTEM_DESIGN_FILE_REPO\",\"TASK_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.logs", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['logger']", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.roles", "target": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['Role']", "target": "{\"lineno\":41,\"end_lineno\":41,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.schema", "target": "{\"lineno\":42,\"end_lineno\":49,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['CodePlanAndChangeContext', 'CodeSummarizeContext', 'CodingContext', 'Document', 'Documents', 'Message']", "target": "{\"lineno\":42,\"end_lineno\":49,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:module:metagpt.utils.common", "target": "{\"lineno\":50,\"end_lineno\":50,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"any_to_str_set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/engineer.py:names:['any_to_name', 'any_to_str', 'any_to_str_set']", "target": "{\"lineno\":50,\"end_lineno\":50,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"any_to_str_set\"]}}"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_write_test", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_run_code", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_debug_error", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_act", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/qa_engineer.py:QaEngineer:_observe", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : qa_engineer.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, modify the data\n type of the `cause_by` value in the `Message` to a string, and utilize the new message filtering feature.\n@Modified By: mashenquan, 2023-11-27.\n 1. Following the think-act principle, solidify the task parameters when creating the\n WriteTest/RunCode/DebugError object, rather than passing them in when calling the run function.\n 2. According to Section 2.2.3.5.7 of RFC 135, change the method of transferring files from using the Message\n to using file references.\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\n of SummarizeCode.\n", "target": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : qa_engineer.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, modify the data\\n type of the `cause_by` value in the `Message` to a string, and utilize the new message filtering feature.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. Following the think-act principle, solidify the task parameters when creating the\\n WriteTest/RunCode/DebugError object, rather than passing them in when calling the run function.\\n 2. According to Section 2.2.3.5.7 of RFC 135, change the method of transferring files from using the Message\\n to using file references.\\n@Modified By: mashenquan, 2023-12-5. Enhance the workflow to navigate to WriteCode or QaEngineer based on the results\\n of SummarizeCode.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.actions", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"DebugError\",\"RunCode\",\"WriteTest\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['DebugError', 'RunCode', 'WriteTest']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"DebugError\",\"RunCode\",\"WriteTest\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.actions.summarize_code", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['SummarizeCode']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.summarize_code\",\"names\":[\"SummarizeCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.const", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_NONE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['MESSAGE_ROUTE_TO_NONE']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_NONE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.logs", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['logger']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.roles", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['Role']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.schema", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Message\",\"RunCodeContext\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['Document', 'Message', 'RunCodeContext', 'TestingContext']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Message\",\"RunCodeContext\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:module:metagpt.utils.common", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str_set\",\"parse_recipient\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/qa_engineer.py:names:['any_to_str_set', 'parse_recipient']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str_set\",\"parse_recipient\"]}}"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/teacher.py:Teacher:_react", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:ast.Constant:\n@Time : 2023/7/27\n@Author : mashenquan\n@File : teacher.py\n@Desc : Used by Agent Store\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/27\\n@Author : mashenquan\\n@File : teacher.py\\n@Desc : Used by Agent Store\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:re", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.actions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['UserRequirement']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.actions.write_teaching_plan", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_teaching_plan\",\"names\":[\"TeachingPlanBlock\",\"WriteTeachingPlanPart\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['TeachingPlanBlock', 'WriteTeachingPlanPart']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_teaching_plan\",\"names\":[\"TeachingPlanBlock\",\"WriteTeachingPlanPart\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.roles", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['Role']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.schema", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['Message']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:module:metagpt.utils.common", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/teacher.py:names:['any_to_str', 'awrite']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_str\",\"awrite\"]}}"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/product_manager.py:ProductManager:_observe", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : product_manager.py\n@Modified By: mashenquan, 2023/11/27. Add `PrepareDocuments` action according to Section 2.2.3.5.1 of RFC 135.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : product_manager.py\\n@Modified By: mashenquan, 2023/11/27. Add `PrepareDocuments` action according to Section 2.2.3.5.1 of RFC 135.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\",\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:names:['UserRequirement', 'WritePRD']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\",\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:module:metagpt.actions.prepare_documents", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.prepare_documents\",\"names\":[\"PrepareDocuments\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:names:['PrepareDocuments']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.prepare_documents\",\"names\":[\"PrepareDocuments\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:module:metagpt.roles.role", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:names:['Role']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:module:metagpt.utils.common", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/product_manager.py:names:['any_to_name']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\"]}}"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/sales.py:Sales:_set_store", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:ast.Constant:\n@Time : 2023/5/25 17:21\n@Author : alexanderwu\n@File : sales.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 17:21\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['Field']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:metagpt.actions", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\",\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['SearchAndSummarize', 'UserRequirement']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\",\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:metagpt.document_store.base_store", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['BaseStore']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:metagpt.roles", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['Role']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:module:metagpt.tools", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sales.py:names:['SearchEngineType']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:_act_sp", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/searcher.py:Searcher:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:ast.Constant:\n@Time : 2023/5/23 17:25\n@Author : alexanderwu\n@File : searcher.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 17:25\\n@Author : alexanderwu\\n@File : searcher.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['Field']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.actions", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['SearchAndSummarize']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"SearchAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.actions.action_node", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['ActionNode']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.actions.action_output", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['ActionOutput']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.roles", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['Role']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.schema", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['Message']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:module:metagpt.tools", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/searcher.py:names:['SearchEngineType']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/assistant.py:Assistant:_plan", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:ast.Constant:\n@Time : 2023/8/7\n@Author : mashenquan\n@File : assistant.py\n@Desc : I am attempting to incorporate certain symbol concepts from UML into MetaGPT, enabling it to have the\n ability to freely construct flows through symbol concatenation. Simultaneously, I am also striving to\n make these symbols configurable and standardized, making the process of building flows more convenient.\n For more about `fork` node in activity diagrams, see: `https://www.uml-diagrams.org/activity-diagrams.html`\n This file defines a `fork` style meta role capable of generating arbitrary roles at runtime based on a\n configuration file.\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false\n indicates that further reasoning cannot continue.\n\n", "target": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/7\\n@Author : mashenquan\\n@File : assistant.py\\n@Desc : I am attempting to incorporate certain symbol concepts from UML into MetaGPT, enabling it to have the\\n ability to freely construct flows through symbol concatenation. Simultaneously, I am also striving to\\n make these symbols configurable and standardized, making the process of building flows more convenient.\\n For more about `fork` node in activity diagrams, see: `https://www.uml-diagrams.org/activity-diagrams.html`\\n This file defines a `fork` style meta role capable of generating arbitrary roles at runtime based on a\\n configuration file.\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false\\n indicates that further reasoning cannot continue.\\n\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:enum", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Enum']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:pathlib", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Path']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:typing", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Optional']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:pydantic", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Field']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.actions.skill_action", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.skill_action\",\"names\":[\"ArgumentsParingAction\",\"SkillAction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['ArgumentsParingAction', 'SkillAction']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.skill_action\",\"names\":[\"ArgumentsParingAction\",\"SkillAction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.actions.talk_action", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.talk_action\",\"names\":[\"TalkAction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['TalkAction']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.talk_action\",\"names\":[\"TalkAction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.learn.skill_loader", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"SkillsDeclaration\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['SkillsDeclaration']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"SkillsDeclaration\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.logs", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['logger']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.memory.brain_memory", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.brain_memory\",\"names\":[\"BrainMemory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['BrainMemory']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory.brain_memory\",\"names\":[\"BrainMemory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.roles", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Role']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:module:metagpt.schema", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/assistant.py:names:['Message']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/roles/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/roles/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/roles/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:__all__", "target": "{\"lineno\":20,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.role", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Role']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.architect", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.architect\",\"names\":[\"Architect\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Architect']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.architect\",\"names\":[\"Architect\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.project_manager", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.project_manager\",\"names\":[\"ProjectManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['ProjectManager']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.project_manager\",\"names\":[\"ProjectManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.product_manager", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.product_manager\",\"names\":[\"ProductManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['ProductManager']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.product_manager\",\"names\":[\"ProductManager\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.engineer", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.engineer\",\"names\":[\"Engineer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Engineer']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.engineer\",\"names\":[\"Engineer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.qa_engineer", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.qa_engineer\",\"names\":[\"QaEngineer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['QaEngineer']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.qa_engineer\",\"names\":[\"QaEngineer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.searcher", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.searcher\",\"names\":[\"Searcher\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Searcher']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.searcher\",\"names\":[\"Searcher\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.sales", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.sales\",\"names\":[\"Sales\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['Sales']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.sales\",\"names\":[\"Sales\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:module:metagpt.roles.customer_service", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.customer_service\",\"names\":[\"CustomerService\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/__init__.py:names:['CustomerService']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.customer_service\",\"names\":[\"CustomerService\"]}}"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_reset", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_setting", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_check_actions", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_init_action", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_set_react_mode", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_watch", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_set_state", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_get_prefix", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_act", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_observe", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_react", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_act_by_order", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:Role:_plan_and_act", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/role.py:PREFIX_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:PREFIX_TEMPLATE", "target": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"PREFIX_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/role.py:CONSTRAINT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:CONSTRAINT_TEMPLATE", "target": "{\"lineno\":43,\"end_lineno\":43,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONSTRAINT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/role.py:STATE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:STATE_TEMPLATE", "target": "{\"lineno\":45,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"STATE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/role.py:ROLE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:ROLE_TEMPLATE", "target": "{\"lineno\":62,\"end_lineno\":70,\"type_name\":\"ast.Assign\",\"tokens\":[\"ROLE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:ast.Constant:\n@Time : 2023/5/11 14:42\n@Author : alexanderwu\n@File : role.py\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116:\n 1. Merge the `recv` functionality into the `_observe` function. Future message reading operations will be\n consolidated within the `_observe` function.\n 2. Standardize the message filtering for string label matching. Role objects can access the message labels\n they've subscribed to through the `subscribed_tags` property.\n 3. Move the message receive buffer from the global variable `self.rc.env.memory` to the role's private variable\n `self.rc.msg_buffer` for easier message identification and asynchronous appending of messages.\n 4. Standardize the way messages are passed: `publish_message` sends messages out, while `put_message` places\n messages into the Role object's private message receive buffer. There are no other message transmit methods.\n 5. Standardize the parameters for the `run` function: the `test_message` parameter is used for testing purposes\n only. In the normal workflow, you should use `publish_message` or `put_message` to transmit messages.\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\n functionality is to be consolidated into the `Environment` class.\n", "target": "{\"lineno\":3,\"end_lineno\":21,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:42\\n@Author : alexanderwu\\n@File : role.py\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116:\\n 1. Merge the `recv` functionality into the `_observe` function. Future message reading operations will be\\n consolidated within the `_observe` function.\\n 2. Standardize the message filtering for string label matching. Role objects can access the message labels\\n they've subscribed to through the `subscribed_tags` property.\\n 3. Move the message receive buffer from the global variable `self.rc.env.memory` to the role's private variable\\n `self.rc.msg_buffer` for easier message identification and asynchronous appending of messages.\\n 4. Standardize the way messages are passed: `publish_message` sends messages out, while `put_message` places\\n messages into the Role object's private message receive buffer. There are no other message transmit methods.\\n 5. Standardize the parameters for the `run` function: the `test_message` parameter is used for testing purposes\\n only. In the normal workflow, you should use `publish_message` or `put_message` to transmit messages.\\n@Modified By: mashenquan, 2023-11-4. According to the routing feature plan in Chapter 2.2.3.2 of RFC 113, the routing\\n functionality is to be consolidated into the `Environment` class.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:__future__", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['annotations']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:enum", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Enum']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:typing", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterable\",\"Optional\",\"Set\",\"Type\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Any', 'Iterable', 'Optional', 'Set', 'Type', 'Union']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Iterable\",\"Optional\",\"Set\",\"Type\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:pydantic", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['BaseModel', 'ConfigDict', 'Field', 'SerializeAsAny', 'model_validator']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"SerializeAsAny\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.actions", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Action', 'ActionOutput']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.actions.action_node", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['ActionNode']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.actions.add_requirement", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['UserRequirement']", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.context_mixin", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['ContextMixin']", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.logs", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['logger']", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.memory", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Memory']", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.memory\",\"names\":[\"Memory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.provider", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"HumanProvider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['HumanProvider']", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider\",\"names\":[\"HumanProvider\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.schema", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"MessageQueue\",\"SerializationMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['Message', 'MessageQueue', 'SerializationMixin']", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\",\"MessageQueue\",\"SerializationMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.utils.common", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"role_raise_decorator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['any_to_name', 'any_to_str', 'role_raise_decorator']", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"any_to_name\",\"any_to_str\",\"role_raise_decorator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['ProjectRepo']", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:module:metagpt.utils.repair_llm_raw_output", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"extract_state_value_from_output\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/role.py:names:['extract_state_value_from_output']", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.repair_llm_raw_output\",\"names\":[\"extract_state_value_from_output\"]}}"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/invoice_ocr_assistant.py:InvoiceOCRAssistant:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:ast.Constant:\n@Time : 2023/9/21 14:10:05\n@Author : Stitch-z\n@File : invoice_ocr_assistant.py\n", "target": "{\"lineno\":4,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 14:10:05\\n@Author : Stitch-z\\n@File : invoice_ocr_assistant.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:json", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:pathlib", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['Path']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:typing", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['Optional']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:pandas as pd", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:pydantic", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['BaseModel']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.actions.invoice_ocr", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.invoice_ocr\",\"names\":[\"GenerateTable\",\"InvoiceOCR\",\"ReplyQuestion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['GenerateTable', 'InvoiceOCR', 'ReplyQuestion']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.invoice_ocr\",\"names\":[\"GenerateTable\",\"InvoiceOCR\",\"ReplyQuestion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.prompts.invoice_ocr", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"INVOICE_OCR_SUCCESS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['INVOICE_OCR_SUCCESS']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"INVOICE_OCR_SUCCESS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.roles.role", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['Role', 'RoleReactMode']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:module:metagpt.schema", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/invoice_ocr_assistant.py:names:['Message']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/roles/architect.py:Architect:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : architect.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : architect.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:module:metagpt.actions", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:names:['WritePRD']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:module:metagpt.actions.design_api", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:names:['WriteDesign']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:module:metagpt.roles.role", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/architect.py:names:['Role']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "is", "source": "metagpt/roles/customer_service.py:DESC", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:DESC", "target": "{\"lineno\":15,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"DESC\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:ast.Constant:\n@Time : 2023/5/25 17:21\n@Author : alexanderwu\n@File : sales.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/25 17:21\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:names:['Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:module:metagpt.document_store.base_store", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:names:['BaseStore']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.document_store.base_store\",\"names\":[\"BaseStore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:module:metagpt.roles", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Sales\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/customer_service.py:names:['Sales']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Sales\"]}}"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/sk_agent.py:SkAgent:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:ast.Constant:\n@Time : 2023/9/13 12:23\n@Author : femto Zheng\n@File : sk_agent.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, utilize the new message\n distribution feature for message filtering.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:23\\n@Author : femto Zheng\\n@File : sk_agent.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.2.1 and 2.2.2 of RFC 116, utilize the new message\\n distribution feature for message filtering.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Any', 'Callable', 'Union']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Field']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:semantic_kernel", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel\",\"names\":[\"Kernel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Kernel']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel\",\"names\":[\"Kernel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning\",\"names\":[\"SequentialPlanner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['SequentialPlanner']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning\",\"names\":[\"SequentialPlanner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning.action_planner.action_planner", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.action_planner.action_planner\",\"names\":[\"ActionPlanner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['ActionPlanner']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.action_planner.action_planner\",\"names\":[\"ActionPlanner\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:semantic_kernel.planning.basic_planner", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.basic_planner\",\"names\":[\"BasicPlanner\",\"Plan\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['BasicPlanner', 'Plan']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.planning.basic_planner\",\"names\":[\"BasicPlanner\",\"Plan\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.actions", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['UserRequirement']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.actions.execute_task", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.execute_task\",\"names\":[\"ExecuteTask\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['ExecuteTask']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.execute_task\",\"names\":[\"ExecuteTask\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.roles", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Role']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.schema", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['Message']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:module:metagpt.utils.make_sk_kernel", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.make_sk_kernel\",\"names\":[\"make_sk_kernel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/sk_agent.py:names:['make_sk_kernel']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.make_sk_kernel\",\"names\":[\"make_sk_kernel\"]}}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:PREFIX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:PREFIX", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Assign\",\"tokens\":[\"PREFIX\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:FORMAT_INSTRUCTIONS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:FORMAT_INSTRUCTIONS", "target": "{\"lineno\":11,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_INSTRUCTIONS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/roles/prompt.py:SUFFIX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:SUFFIX", "target": "{\"lineno\":21,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUFFIX\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:ast.Constant:\n@Time : 2023/5/18 22:43\n@Author : alexanderwu\n@File : prompt.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/18 22:43\\n@Author : alexanderwu\\n@File : prompt.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:module:enum", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/prompt.py:names:['Enum']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_handle_directory", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/tutorial_assistant.py:TutorialAssistant:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:datetime", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['datetime']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['Dict']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.actions.write_tutorial", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_tutorial\",\"names\":[\"WriteContent\",\"WriteDirectory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['WriteContent', 'WriteDirectory']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_tutorial\",\"names\":[\"WriteContent\",\"WriteDirectory\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.const", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TUTORIAL_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['TUTORIAL_PATH']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TUTORIAL_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.roles.role", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['Role', 'RoleReactMode']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.schema", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['Message']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:module:metagpt.utils.file", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/tutorial_assistant.py:names:['File']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"predicate": "is", "source": "metagpt/roles/project_manager.py:ProjectManager:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:ast.Constant:\n@Time : 2023/5/11 15:04\n@Author : alexanderwu\n@File : project_manager.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 15:04\\n@Author : alexanderwu\\n@File : project_manager.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:module:metagpt.actions", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:names:['WriteTasks']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:module:metagpt.actions.design_api", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:names:['WriteDesign']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:module:metagpt.roles.role", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/project_manager.py:names:['Role']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\"]}}"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:_think", "target": "class_method"}, {"predicate": "is", "source": "metagpt/roles/researcher.py:Researcher:_act", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:ast.Constant:\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\n", "target": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Modified By: mashenquan, 2023/8/22. A definition has been provided for the return value of _think: returning false indicates that further reasoning cannot continue.\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.1 and 2.2.2 of RFC 116, change the data type of\\n the `cause_by` value in the `Message` to a string to support the new message distribution feature.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:asyncio", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:re", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['BaseModel']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.actions", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"CollectLinks\",\"ConductResearch\",\"WebBrowseAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['Action', 'CollectLinks', 'ConductResearch', 'WebBrowseAndSummarize']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"CollectLinks\",\"ConductResearch\",\"WebBrowseAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.actions.research", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"get_research_system_text\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['get_research_system_text']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"get_research_system_text\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.const", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"RESEARCH_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['RESEARCH_PATH']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"RESEARCH_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.roles.role", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['Role', 'RoleReactMode']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.roles.role\",\"names\":[\"Role\",\"RoleReactMode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:module:metagpt.schema", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:names:['Message']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/roles/researcher.py:__name__:__main__", "target": "{\"lineno\":119,\"end_lineno\":126,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/serialize.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:actionoutout_schema_to_mapping"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:actionoutput_mapping_to_str"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:actionoutput_str_to_mapping"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:serialize_message"}, {"predicate": "has_function", "source": "metagpt/utils/serialize.py", "target": "metagpt/utils/serialize.py:deserialize_message"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:actionoutout_schema_to_mapping", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:actionoutout_schema_to_mapping", "target": "{\"lineno\":11,\"end_lineno\":40,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutout_schema_to_mapping\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:actionoutput_mapping_to_str", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:actionoutput_mapping_to_str", "target": "{\"lineno\":43,\"end_lineno\":47,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutput_mapping_to_str\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:actionoutput_str_to_mapping", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:actionoutput_str_to_mapping", "target": "{\"lineno\":50,\"end_lineno\":57,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"actionoutput_str_to_mapping\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:serialize_message", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:serialize_message", "target": "{\"lineno\":60,\"end_lineno\":71,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"serialize_message\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/serialize.py:deserialize_message", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:deserialize_message", "target": "{\"lineno\":74,\"end_lineno\":83,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"deserialize_message\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:copy", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"copy\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:pickle", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Import\",\"tokens\":[\"pickle\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:module:metagpt.utils.common", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/serialize.py:names:['import_class']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:DocFileRepositories:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ResourceFileRepositories:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/project_repo.py:ProjectRepo:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:ast.Constant:\n@Time : 2024/1/8\n@Author : mashenquan\n@File : project_repo.py\n@Desc : Wrapper for GitRepository and FileRepository of project.\n Implementation of Chapter 4.6 of https://deepwisdom.feishu.cn/wiki/CUK4wImd7id9WlkQBNscIe9cnqh\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/8\\n@Author : mashenquan\\n@File : project_repo.py\\n@Desc : Wrapper for GitRepository and FileRepository of project.\\n Implementation of Chapter 4.6 of https://deepwisdom.feishu.cn/wiki/CUK4wImd7id9WlkQBNscIe9cnqh\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:__future__", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['annotations']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:pathlib", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['Path']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CLASS_VIEW_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\",\"CODE_SUMMARIES_FILE_REPO\",\"CODE_SUMMARIES_PDF_FILE_REPO\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"DATA_API_DESIGN_FILE_REPO\",\"DOCS_FILE_REPO\",\"GRAPH_REPO_FILE_REPO\",\"PRD_PDF_FILE_REPO\",\"PRDS_FILE_REPO\",\"REQUIREMENT_FILENAME\",\"RESOURCES_FILE_REPO\",\"SD_OUTPUT_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"SYSTEM_DESIGN_PDF_FILE_REPO\",\"TASK_FILE_REPO\",\"TASK_PDF_FILE_REPO\",\"TEST_CODES_FILE_REPO\",\"TEST_OUTPUTS_FILE_REPO\",\"VISUAL_GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['CLASS_VIEW_FILE_REPO', 'CODE_PLAN_AND_CHANGE_FILE_REPO', 'CODE_PLAN_AND_CHANGE_PDF_FILE_REPO', 'CODE_SUMMARIES_FILE_REPO', 'CODE_SUMMARIES_PDF_FILE_REPO', 'COMPETITIVE_ANALYSIS_FILE_REPO', 'DATA_API_DESIGN_FILE_REPO', 'DOCS_FILE_REPO', 'GRAPH_REPO_FILE_REPO', 'PRD_PDF_FILE_REPO', 'PRDS_FILE_REPO', 'REQUIREMENT_FILENAME', 'RESOURCES_FILE_REPO', 'SD_OUTPUT_FILE_REPO', 'SEQ_FLOW_FILE_REPO', 'SYSTEM_DESIGN_FILE_REPO', 'SYSTEM_DESIGN_PDF_FILE_REPO', 'TASK_FILE_REPO', 'TASK_PDF_FILE_REPO', 'TEST_CODES_FILE_REPO', 'TEST_OUTPUTS_FILE_REPO', 'VISUAL_GRAPH_REPO_FILE_REPO']", "target": "{\"lineno\":14,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CLASS_VIEW_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_FILE_REPO\",\"CODE_PLAN_AND_CHANGE_PDF_FILE_REPO\",\"CODE_SUMMARIES_FILE_REPO\",\"CODE_SUMMARIES_PDF_FILE_REPO\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"DATA_API_DESIGN_FILE_REPO\",\"DOCS_FILE_REPO\",\"GRAPH_REPO_FILE_REPO\",\"PRD_PDF_FILE_REPO\",\"PRDS_FILE_REPO\",\"REQUIREMENT_FILENAME\",\"RESOURCES_FILE_REPO\",\"SD_OUTPUT_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\",\"SYSTEM_DESIGN_FILE_REPO\",\"SYSTEM_DESIGN_PDF_FILE_REPO\",\"TASK_FILE_REPO\",\"TASK_PDF_FILE_REPO\",\"TEST_CODES_FILE_REPO\",\"TEST_OUTPUTS_FILE_REPO\",\"VISUAL_GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:metagpt.utils.file_repository", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['FileRepository']", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:module:metagpt.utils.git_repository", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/project_repo.py:names:['GitRepository']", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "is", "source": "metagpt/utils/mmdc_playwright.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/mmdc_playwright.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/mmdc_playwright.py", "target": "metagpt/utils/mmdc_playwright.py:mermaid_to_file"}, {"predicate": "is", "source": "metagpt/utils/mmdc_playwright.py:mermaid_to_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:mermaid_to_file", "target": "{\"lineno\":17,\"end_lineno\":121,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : Steven Lee\n@File : mmdc_playwright.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : Steven Lee\\n@File : mmdc_playwright.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:os", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:module:urllib.parse", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:names:['urljoin']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:module:playwright.async_api", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:names:['async_playwright']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"playwright.async_api\",\"names\":[\"async_playwright\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_playwright.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/dependency_file.py:DependencyFile:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:ast.Constant:\n@Time : 2023/11/22\n@Author : mashenquan\n@File : dependency_file.py\n@Desc: Implementation of the dependency file described in Section 2.2.3.2 of RFC 135.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/22\\n@Author : mashenquan\\n@File : dependency_file.py\\n@Desc: Implementation of the dependency file described in Section 2.2.3.2 of RFC 135.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:re", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['Set']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:aiofiles", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:metagpt.utils.common", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['aread']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/dependency_file.py:names:['handle_exception']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/utils/make_sk_kernel.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/make_sk_kernel.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/make_sk_kernel.py", "target": "metagpt/utils/make_sk_kernel.py:make_sk_kernel"}, {"predicate": "is", "source": "metagpt/utils/make_sk_kernel.py:make_sk_kernel", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:make_sk_kernel", "target": "{\"lineno\":19,\"end_lineno\":32,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"make_sk_kernel\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:ast.Constant:\n@Time : 2023/9/13 12:29\n@Author : femto Zheng\n@File : make_sk_kernel.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:29\\n@Author : femto Zheng\\n@File : make_sk_kernel.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:semantic_kernel as sk", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"semantic_kernel as sk\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:module:semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion", "target": "{\"lineno\":9,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion\",\"names\":[\"AzureChatCompletion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:names:['AzureChatCompletion']", "target": "{\"lineno\":9,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.azure_chat_completion\",\"names\":[\"AzureChatCompletion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:module:semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion", "target": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion\",\"names\":[\"OpenAIChatCompletion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:names:['OpenAIChatCompletion']", "target": "{\"lineno\":12,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion\",\"names\":[\"OpenAIChatCompletion\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:module:metagpt.config2", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/make_sk_kernel.py:names:['config']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/token_counter.py", "target": "metagpt/utils/token_counter.py:count_message_tokens"}, {"predicate": "has_function", "source": "metagpt/utils/token_counter.py", "target": "metagpt/utils/token_counter.py:count_string_tokens"}, {"predicate": "has_function", "source": "metagpt/utils/token_counter.py", "target": "metagpt/utils/token_counter.py:get_max_completion_tokens"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:count_message_tokens", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:count_message_tokens", "target": "{\"lineno\":64,\"end_lineno\":119,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"count_message_tokens\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:count_string_tokens", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:count_string_tokens", "target": "{\"lineno\":122,\"end_lineno\":138,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"count_string_tokens\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:get_max_completion_tokens", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:get_max_completion_tokens", "target": "{\"lineno\":141,\"end_lineno\":153,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_max_completion_tokens\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:TOKEN_COSTS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:TOKEN_COSTS", "target": "{\"lineno\":15,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOKEN_COSTS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/token_counter.py:TOKEN_MAX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:TOKEN_MAX", "target": "{\"lineno\":40,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"TOKEN_MAX\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:ast.Constant:\n@Time : 2023/5/18 00:40\n@Author : alexanderwu\n@File : token_counter.py\nref1: https://openai.com/pricing\nref2: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\nref3: https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/llm/token_counter.py\nref4: https://github.com/hwchase17/langchain/blob/master/langchain/chat_models/openai.py\nref5: https://ai.google.dev/models/gemini\n", "target": "{\"lineno\":3,\"end_lineno\":12,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/18 00:40\\n@Author : alexanderwu\\n@File : token_counter.py\\nref1: https://openai.com/pricing\\nref2: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb\\nref3: https://github.com/Significant-Gravitas/Auto-GPT/blob/master/autogpt/llm/token_counter.py\\nref4: https://github.com/hwchase17/langchain/blob/master/langchain/chat_models/openai.py\\nref5: https://ai.google.dev/models/gemini\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/token_counter.py:tiktoken", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"tiktoken\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/embedding.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/embedding.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/embedding.py", "target": "metagpt/utils/embedding.py:get_embedding"}, {"predicate": "is", "source": "metagpt/utils/embedding.py:get_embedding", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:get_embedding", "target": "{\"lineno\":13,\"end_lineno\":16,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_embedding\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:ast.Constant:\n@Time : 2024/1/4 20:58\n@Author : alexanderwu\n@File : embedding.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 20:58\\n@Author : alexanderwu\\n@File : embedding.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:module:langchain_community.embeddings", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_community.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:names:['OpenAIEmbeddings']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"langchain_community.embeddings\",\"names\":[\"OpenAIEmbeddings\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:module:metagpt.config2", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/embedding.py:names:['config']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_case_sensitivity", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_case_sensitivity", "target": "{\"lineno\":24,\"end_lineno\":41,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_case_sensitivity\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_special_character_missing", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_special_character_missing", "target": "{\"lineno\":44,\"end_lineno\":64,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_special_character_missing\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_required_key_pair_missing", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_required_key_pair_missing", "target": "{\"lineno\":67,\"end_lineno\":105,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_required_key_pair_missing\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_json_format", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_json_format", "target": "{\"lineno\":108,\"end_lineno\":132,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_json_format\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:_repair_llm_raw_output", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:_repair_llm_raw_output", "target": "{\"lineno\":135,\"end_lineno\":146,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_repair_llm_raw_output\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_llm_raw_output", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_llm_raw_output", "target": "{\"lineno\":149,\"end_lineno\":170,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_llm_raw_output\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:repair_invalid_json", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:repair_invalid_json", "target": "{\"lineno\":173,\"end_lineno\":220,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"repair_invalid_json\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:run_after_exp_and_passon_next_retry", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:run_after_exp_and_passon_next_retry", "target": "{\"lineno\":223,\"end_lineno\":257,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"run_after_exp_and_passon_next_retry\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:retry_parse_json_text", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:retry_parse_json_text", "target": "{\"lineno\":265,\"end_lineno\":279,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"retry_parse_json_text\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:extract_content_from_output", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:extract_content_from_output", "target": "{\"lineno\":282,\"end_lineno\":312,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"extract_content_from_output\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/repair_llm_raw_output.py:extract_state_value_from_output", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:extract_state_value_from_output", "target": "{\"lineno\":315,\"end_lineno\":328,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"extract_state_value_from_output\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:copy", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"copy\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:enum", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['Enum']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['Callable', 'Union']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:regex as re", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"regex as re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:tenacity", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"retry\",\"stop_after_attempt\",\"wait_fixed\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['RetryCallState', 'retry', 'stop_after_attempt', 'wait_fixed']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"retry\",\"stop_after_attempt\",\"wait_fixed\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.config2", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['config']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:module:metagpt.utils.custom_decoder", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.custom_decoder\",\"names\":[\"CustomDecoder\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/repair_llm_raw_output.py:names:['CustomDecoder']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.custom_decoder\",\"names\":[\"CustomDecoder\"]}}"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/mermaid.py", "target": "metagpt/utils/mermaid.py:mermaid_to_file"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py:mermaid_to_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:mermaid_to_file", "target": "{\"lineno\":19,\"end_lineno\":90,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py:MMC1", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:MMC1", "target": "{\"lineno\":93,\"end_lineno\":125,\"type_name\":\"ast.Assign\",\"tokens\":[\"MMC1\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/mermaid.py:MMC2", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:MMC2", "target": "{\"lineno\":127,\"end_lineno\":145,\"type_name\":\"ast.Assign\",\"tokens\":[\"MMC2\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:ast.Constant:\n@Time : 2023/7/4 10:53\n@Author : alexanderwu alitrack\n@File : mermaid.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/4 10:53\\n@Author : alexanderwu alitrack\\n@File : mermaid.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:asyncio", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:os", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:module:pathlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:names:['Path']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:aiofiles", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:module:metagpt.config2", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:names:['config']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:module:metagpt.logs", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:module:metagpt.utils.common", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"check_cmd_exists\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mermaid.py:names:['check_cmd_exists']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"check_cmd_exists\"]}}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:get_html_content", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:get_html_content", "target": "{\"lineno\":42,\"end_lineno\":45,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_html_content\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/parse_html.py:_get_soup", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:_get_soup", "target": "{\"lineno\":48,\"end_lineno\":54,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_get_soup\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:__future__", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['annotations']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:typing", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['Generator', 'Optional']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:urllib.parse", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\",\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['urljoin', 'urlparse']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\",\"urlparse\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:bs4", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"bs4\",\"names\":[\"BeautifulSoup\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['BeautifulSoup']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"bs4\",\"names\":[\"BeautifulSoup\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:module:pydantic", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"PrivateAttr\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/parse_html.py:names:['BaseModel', 'PrivateAttr']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"PrivateAttr\"]}}"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualGraphRepo:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_get_class_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/visual_graph_repo.py:VisualDiGraphRepo:_refine_name", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : visualize_graph.py\n@Desc : Visualize the graph.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : visualize_graph.py\\n@Desc : Visualize the graph.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:re", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:abc", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['ABC']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['List', 'Optional']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:pydantic", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.const", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['AGGREGATION', 'COMPOSITION', 'GENERALIZATION']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"GENERALIZATION\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.schema", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['UMLClassView']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.common", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['split_namespace']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.di_graph_repository", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['DiGraphRepository']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:module:metagpt.utils.graph_repository", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/visual_graph_repo.py:names:['GraphKeyword', 'GraphRepository']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "is", "source": "metagpt/utils/special_tokens.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/special_tokens.py", "target": "python"}, {"predicate": "is", "source": "metagpt/utils/special_tokens.py:MSG_SEP", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/special_tokens.py:MSG_SEP", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Assign\",\"tokens\":[\"MSG_SEP\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/special_tokens.py:FILENAME_CODE_SEP", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/special_tokens.py:FILENAME_CODE_SEP", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Assign\",\"tokens\":[\"FILENAME_CODE_SEP\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/ahttp_client.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/ahttp_client.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/ahttp_client.py", "target": "metagpt/utils/ahttp_client.py:apost"}, {"predicate": "has_function", "source": "metagpt/utils/ahttp_client.py", "target": "metagpt/utils/ahttp_client.py:apost_stream"}, {"predicate": "is", "source": "metagpt/utils/ahttp_client.py:apost", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:apost", "target": "{\"lineno\":11,\"end_lineno\":28,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"apost\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/ahttp_client.py:apost_stream", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:apost_stream", "target": "{\"lineno\":31,\"end_lineno\":49,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"apost_stream\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:module:typing", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Mapping\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:names:['Any', 'Mapping', 'Optional', 'Union']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Mapping\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:aiohttp", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"aiohttp\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:module:aiohttp.client", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp.client\",\"names\":[\"DEFAULT_TIMEOUT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/ahttp_client.py:names:['DEFAULT_TIMEOUT']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp.client\",\"names\":[\"DEFAULT_TIMEOUT\"]}}"}, {"predicate": "is", "source": "metagpt/utils/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/utils/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:__all__", "target": "{\"lineno\":18,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:ast.Constant:\n@Time : 2023/4/29 15:50\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:50\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:module:metagpt.utils.read_document", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.read_document\",\"names\":[\"read_docx\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:names:['read_docx']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.read_document\",\"names\":[\"read_docx\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:module:metagpt.utils.singleton", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.singleton\",\"names\":[\"Singleton\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:names:['Singleton']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.singleton\",\"names\":[\"Singleton\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\",\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/__init__.py:names:['TOKEN_COSTS', 'count_message_tokens', 'count_string_tokens']", "target": "{\"lineno\":11,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\",\"count_message_tokens\",\"count_string_tokens\"]}}"}, {"predicate": "is", "source": "metagpt/utils/mmdc_ink.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/mmdc_ink.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/mmdc_ink.py", "target": "metagpt/utils/mmdc_ink.py:mermaid_to_file"}, {"predicate": "is", "source": "metagpt/utils/mmdc_ink.py:mermaid_to_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:mermaid_to_file", "target": "{\"lineno\":15,\"end_lineno\":41,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : alitrack\n@File : mermaid.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : alitrack\\n@File : mermaid.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:base64", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:module:aiohttp", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp\",\"names\":[\"ClientError\",\"ClientSession\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:names:['ClientError', 'ClientSession']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"aiohttp\",\"names\":[\"ClientError\",\"ClientSession\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:module:metagpt.logs", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_ink.py:names:['logger']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/di_graph_repository.py:DiGraphRepository:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : di_graph_repository.py\n@Desc : Graph repository based on DiGraph\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : di_graph_repository.py\\n@Desc : Graph repository based on DiGraph\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:pathlib", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['Path']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['List']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:networkx", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"networkx\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:metagpt.utils.common", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['aread', 'awrite']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:module:metagpt.utils.graph_repository", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/di_graph_repository.py:names:['SPO', 'GraphRepository']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:ast.Constant:\n@Time : 2024/1/4 10:18\n@Author : alexanderwu\n@File : YamlModel.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 10:18\\n@Author : alexanderwu\\n@File : YamlModel.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:module:pathlib", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:names:['Path']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:names:['Dict', 'Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:yaml", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"yaml\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/yaml_model.py:names:['BaseModel', 'model_validator']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : openai.py\n@Desc : mashenquan, 2023/8/28. Separate the `CostManager` class to support user-level cost accounting.\n", "target": "{\"lineno\":2,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : openai.py\\n@Desc : mashenquan, 2023/8/28. Separate the `CostManager` class to support user-level cost accounting.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"NamedTuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:names:['NamedTuple']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"NamedTuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:names:['BaseModel']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/cost_manager.py:names:['TOKEN_COSTS']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_COSTS\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : file.py\n@Describe : General file operations.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : file.py\\n@Describe : General file operations.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:aiofiles", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file.py:names:['handle_exception']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/common.py:NoMoneyException:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/common.py:check_cmd_exists", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:check_cmd_exists", "target": "{\"lineno\":38,\"end_lineno\":48,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"check_cmd_exists\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:require_python_version", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:require_python_version", "target": "{\"lineno\":51,\"end_lineno\":54,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"require_python_version\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:print_members", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:print_members", "target": "{\"lineno\":319,\"end_lineno\":335,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"print_members\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:parse_recipient", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:parse_recipient", "target": "{\"lineno\":338,\"end_lineno\":348,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_recipient\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:get_class_name", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:get_class_name", "target": "{\"lineno\":351,\"end_lineno\":353,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_class_name\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:any_to_str", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:any_to_str", "target": "{\"lineno\":356,\"end_lineno\":363,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_str\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:any_to_str_set", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:any_to_str_set", "target": "{\"lineno\":366,\"end_lineno\":381,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_str_set\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:is_send_to", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:is_send_to", "target": "{\"lineno\":384,\"end_lineno\":392,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"is_send_to\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:any_to_name", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:any_to_name", "target": "{\"lineno\":395,\"end_lineno\":403,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"any_to_name\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:concat_namespace", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:concat_namespace", "target": "{\"lineno\":406,\"end_lineno\":407,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"concat_namespace\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:split_namespace", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:split_namespace", "target": "{\"lineno\":410,\"end_lineno\":411,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"split_namespace\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:general_after_log", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:general_after_log", "target": "{\"lineno\":414,\"end_lineno\":444,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"general_after_log\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:read_json_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:read_json_file", "target": "{\"lineno\":447,\"end_lineno\":456,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_json_file\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:write_json_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:write_json_file", "target": "{\"lineno\":459,\"end_lineno\":465,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"write_json_file\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:import_class", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:import_class", "target": "{\"lineno\":468,\"end_lineno\":471,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"import_class\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:import_class_inst", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:import_class_inst", "target": "{\"lineno\":474,\"end_lineno\":477,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"import_class_inst\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:format_trackback_info", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:format_trackback_info", "target": "{\"lineno\":480,\"end_lineno\":481,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"format_trackback_info\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:serialize_decorator", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:serialize_decorator", "target": "{\"lineno\":484,\"end_lineno\":495,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"serialize_decorator\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:role_raise_decorator", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:role_raise_decorator", "target": "{\"lineno\":498,\"end_lineno\":525,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"role_raise_decorator\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:aread", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:aread", "target": "{\"lineno\":529,\"end_lineno\":533,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"aread\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:awrite", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:awrite", "target": "{\"lineno\":536,\"end_lineno\":541,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"awrite\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:read_file_block", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:read_file_block", "target": "{\"lineno\":544,\"end_lineno\":558,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"read_file_block\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:list_files", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:list_files", "target": "{\"lineno\":561,\"end_lineno\":575,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"list_files\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/common.py:parse_json_code_block", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:parse_json_code_block", "target": "{\"lineno\":578,\"end_lineno\":580,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"parse_json_code_block\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:ast.Constant:\n@Time : 2023/4/29 16:07\n@Author : alexanderwu\n@File : common.py\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\n Add generic class-to-string and object-to-string conversion functionality.\n@Modified By: mashenquan, 2023/11/27. Bug fix: `parse_recipient` failed to parse the recipient in certain GPT-3.5\n responses.\n", "target": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 16:07\\n@Author : alexanderwu\\n@File : common.py\\n@Modified By: mashenquan, 2023-11-1. According to Chapter 2.2.2 of RFC 116:\\n Add generic class-to-string and object-to-string conversion functionality.\\n@Modified By: mashenquan, 2023/11/27. Bug fix: `parse_recipient` failed to parse the recipient in certain GPT-3.5\\n responses.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:__future__", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['annotations']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:ast", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:contextlib", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.Import\",\"tokens\":[\"contextlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:importlib", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:inspect", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"inspect\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:json", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:os", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:platform", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.Import\",\"tokens\":[\"platform\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:re", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:sys", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.Import\",\"tokens\":[\"sys\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:traceback", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:typing", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.Import\",\"tokens\":[\"typing\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:pathlib", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['Path']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:typing", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"List\",\"Tuple\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['Any', 'List', 'Tuple', 'Union']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"List\",\"Tuple\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:aiofiles", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:loguru", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.Import\",\"tokens\":[\"loguru\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:pydantic_core", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic_core\",\"names\":[\"to_jsonable_python\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['to_jsonable_python']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic_core\",\"names\":[\"to_jsonable_python\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:tenacity", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"RetryError\",\"_utils\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['RetryCallState', 'RetryError', '_utils']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"RetryCallState\",\"RetryError\",\"_utils\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:metagpt.const", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['MESSAGE_ROUTE_TO_ALL']", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"MESSAGE_ROUTE_TO_ALL\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:metagpt.logs", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['logger']", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/common.py:names:['handle_exception']", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/redis.py:Redis:_connect", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:ast.Constant:\n@Time : 2023/12/27\n@Author : mashenquan\n@File : redis.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/27\\n@Author : mashenquan\\n@File : redis.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:module:__future__", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:names:['annotations']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:traceback", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:module:datetime", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"timedelta\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:names:['timedelta']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"timedelta\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:aioredis", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aioredis\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:module:metagpt.configs.redis_config", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:names:['RedisConfig']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.configs.redis_config\",\"names\":[\"RedisConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/redis.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/text.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/text.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:reduce_message_length"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:generate_prompt_chunk"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:split_paragraph"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:decode_unicode_escape"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:_split_by_count"}, {"predicate": "has_function", "source": "metagpt/utils/text.py", "target": "metagpt/utils/text.py:_split_text_with_ends"}, {"predicate": "is", "source": "metagpt/utils/text.py:reduce_message_length", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:reduce_message_length", "target": "{\"lineno\":6,\"end_lineno\":31,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"reduce_message_length\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:generate_prompt_chunk", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:generate_prompt_chunk", "target": "{\"lineno\":34,\"end_lineno\":76,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"generate_prompt_chunk\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:split_paragraph", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:split_paragraph", "target": "{\"lineno\":79,\"end_lineno\":96,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"split_paragraph\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:decode_unicode_escape", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:decode_unicode_escape", "target": "{\"lineno\":99,\"end_lineno\":108,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"decode_unicode_escape\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:_split_by_count", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:_split_by_count", "target": "{\"lineno\":111,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_split_by_count\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/text.py:_split_text_with_ends", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:_split_text_with_ends", "target": "{\"lineno\":121,\"end_lineno\":129,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_split_text_with_ends\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:module:typing", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Sequence\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:names:['Generator', 'Sequence']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Generator\",\"Sequence\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:module:metagpt.utils.token_counter", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_MAX\",\"count_string_tokens\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/text.py:names:['TOKEN_MAX', 'count_string_tokens']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.token_counter\",\"names\":[\"TOKEN_MAX\",\"count_string_tokens\"]}}"}, {"predicate": "is", "source": "metagpt/utils/graph_repository.py:GraphRepository:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : graph_repository.py\n@Desc : Superclass for graph repository.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : graph_repository.py\\n@Desc : Superclass for graph repository.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:abc", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['ABC', 'abstractmethod']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\",\"abstractmethod\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:collections", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['defaultdict']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"collections\",\"names\":[\"defaultdict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:pathlib", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['Path']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['List']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:pydantic", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['BaseModel']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:metagpt.repo_parser", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"DotClassRelationship\",\"RepoFileInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['DotClassInfo', 'DotClassRelationship', 'RepoFileInfo']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"DotClassRelationship\",\"RepoFileInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:module:metagpt.utils.common", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/graph_repository.py:names:['concat_namespace', 'split_namespace']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"predicate": "is", "source": "metagpt/utils/singleton.py:Singleton:__call__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/singleton.py:ast.Constant:\n@Time : 2023/5/11 16:15\n@Author : alexanderwu\n@File : singleton.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 16:15\\n@Author : alexanderwu\\n@File : singleton.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/singleton.py:abc", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"abc\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/file_repository.py:FileRepository:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : git_repository.py\n@Desc: File repository management. RFC 135 2.2.3.2, 2.2.3.4 and 2.2.3.13.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : git_repository.py\\n@Desc: File repository management. RFC 135 2.2.3.2, 2.2.3.4 and 2.2.3.13.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:os", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:datetime", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['datetime']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:pathlib", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['Path']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['Dict', 'List', 'Set']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\",\"Set\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:aiofiles", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:metagpt.schema", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['Document']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:metagpt.utils.common", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['aread']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:module:metagpt.utils.json_to_markdown", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.json_to_markdown\",\"names\":[\"json_to_markdown\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/file_repository.py:names:['json_to_markdown']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.json_to_markdown\",\"names\":[\"json_to_markdown\"]}}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringCollector:_leave", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringTransformer:_leave", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:get_docstring_statement", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:get_docstring_statement", "target": "{\"lineno\":11,\"end_lineno\":49,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_docstring_statement\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:has_decorator", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:has_decorator", "target": "{\"lineno\":52,\"end_lineno\":57,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"has_decorator\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:merge_docstring", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:merge_docstring", "target": "{\"lineno\":159,\"end_lineno\":176,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"merge_docstring\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/pycst.py:DocstringNode", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:DocstringNode", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"DocstringNode\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:module:__future__", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:names:['annotations']", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:module:typing", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:names:['Union']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:libcst as cst", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"libcst as cst\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:module:libcst._nodes.module", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"libcst._nodes.module\",\"names\":[\"Module\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/pycst.py:names:['Module']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"libcst._nodes.module\",\"names\":[\"Module\"]}}"}, {"predicate": "is", "source": "metagpt/utils/exceptions.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/exceptions.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/exceptions.py", "target": "metagpt/utils/exceptions.py:handle_exception"}, {"predicate": "is", "source": "metagpt/utils/exceptions.py:handle_exception", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:handle_exception", "target": "{\"lineno\":20,\"end_lineno\":61,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"handle_exception\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/exceptions.py:ReturnType", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:ReturnType", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"ReturnType\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:ast.Constant:\n@Time : 2023/12/19 14:46\n@Author : alexanderwu\n@File : exceptions.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19 14:46\\n@Author : alexanderwu\\n@File : exceptions.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:asyncio", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:functools", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"functools\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:traceback", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Tuple\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:names:['Any', 'Callable', 'Tuple', 'Type', 'TypeVar', 'Union']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Callable\",\"Tuple\",\"Type\",\"TypeVar\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:module:metagpt.logs", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/exceptions.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:json", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Tuple\",\"Type\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:names:['Any', 'Tuple', 'Type']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Tuple\",\"Type\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:module:pydantic", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:names:['BaseModel']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:module:metagpt.logs", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:names:['logger']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:module:metagpt.utils.common", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/human_interaction.py:names:['import_class']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"import_class\"]}}"}, {"predicate": "is", "source": "metagpt/utils/highlight.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/highlight.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/highlight.py", "target": "metagpt/utils/highlight.py:highlight"}, {"predicate": "is", "source": "metagpt/utils/highlight.py:highlight", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:highlight", "target": "{\"lineno\":7,\"end_lineno\":25,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"highlight\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:module:pygments", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments\",\"names\":[\"highlight as highlight_\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:names:['highlight as highlight_']", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments\",\"names\":[\"highlight as highlight_\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:module:pygments.formatters", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.formatters\",\"names\":[\"HtmlFormatter\",\"TerminalFormatter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:names:['HtmlFormatter', 'TerminalFormatter']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.formatters\",\"names\":[\"HtmlFormatter\",\"TerminalFormatter\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:module:pygments.lexers", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.lexers\",\"names\":[\"PythonLexer\",\"SqlLexer\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/highlight.py:names:['PythonLexer', 'SqlLexer']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pygments.lexers\",\"names\":[\"PythonLexer\",\"SqlLexer\"]}}"}, {"predicate": "is", "source": "metagpt/utils/mmdc_pyppeteer.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/mmdc_pyppeteer.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/mmdc_pyppeteer.py", "target": "metagpt/utils/mmdc_pyppeteer.py:mermaid_to_file"}, {"predicate": "is", "source": "metagpt/utils/mmdc_pyppeteer.py:mermaid_to_file", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:mermaid_to_file", "target": "{\"lineno\":17,\"end_lineno\":128,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"mermaid_to_file\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:ast.Constant:\n@Time : 2023/9/4 16:12\n@Author : alitrack\n@File : mmdc_pyppeteer.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 16:12\\n@Author : alitrack\\n@File : mmdc_pyppeteer.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:module:urllib.parse", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:names:['urljoin']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"urllib.parse\",\"names\":[\"urljoin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:module:pyppeteer", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pyppeteer\",\"names\":[\"launch\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:names:['launch']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pyppeteer\",\"names\":[\"launch\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:module:metagpt.config2", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:names:['config']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/mmdc_pyppeteer.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/s3.py:S3:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:base64", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"base64\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:os.path", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"os.path\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:traceback", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:uuid", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.Import\",\"tokens\":[\"uuid\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:pathlib", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['Path']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['Optional']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:aioboto3", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"aioboto3\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:aiofiles", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:metagpt.config2", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"S3Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['S3Config']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"S3Config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:metagpt.const", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['BASE64_FORMAT']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BASE64_FORMAT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/s3.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/utils/json_to_markdown.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/json_to_markdown.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/json_to_markdown.py", "target": "metagpt/utils/json_to_markdown.py:json_to_markdown"}, {"predicate": "is", "source": "metagpt/utils/json_to_markdown.py:json_to_markdown", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/json_to_markdown.py:json_to_markdown", "target": "{\"lineno\":11,\"end_lineno\":42,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"json_to_markdown\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/json_to_markdown.py:ast.Constant:\n@Time : 2023/9/11 11:50\n@Author : femto Zheng\n@File : json_to_markdown.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/11 11:50\\n@Author : femto Zheng\\n@File : json_to_markdown.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:CustomDecoder:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:py_make_scanner", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:py_make_scanner", "target": "{\"lineno\":9,\"end_lineno\":69,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"py_make_scanner\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:JSONObject", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:JSONObject", "target": "{\"lineno\":91,\"end_lineno\":192,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"JSONObject\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:py_scanstring", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:py_scanstring", "target": "{\"lineno\":195,\"end_lineno\":267,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"py_scanstring\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:NUMBER_RE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:NUMBER_RE", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.Assign\",\"tokens\":[\"NUMBER_RE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:FLAGS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:FLAGS", "target": "{\"lineno\":72,\"end_lineno\":72,\"type_name\":\"ast.Assign\",\"tokens\":[\"FLAGS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK", "target": "{\"lineno\":73,\"end_lineno\":73,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_SINGLEQUOTE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_SINGLEQUOTE", "target": "{\"lineno\":74,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_SINGLEQUOTE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_DOUBLE_QUOTE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_DOUBLE_QUOTE", "target": "{\"lineno\":75,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_TRIPLE_DOUBLE_QUOTE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_SINGLEQUOTE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:STRINGCHUNK_TRIPLE_SINGLEQUOTE", "target": "{\"lineno\":76,\"end_lineno\":76,\"type_name\":\"ast.Assign\",\"tokens\":[\"STRINGCHUNK_TRIPLE_SINGLEQUOTE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:BACKSLASH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:BACKSLASH", "target": "{\"lineno\":77,\"end_lineno\":86,\"type_name\":\"ast.Assign\",\"tokens\":[\"BACKSLASH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:WHITESPACE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:WHITESPACE", "target": "{\"lineno\":87,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"WHITESPACE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:WHITESPACE_STR", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:WHITESPACE_STR", "target": "{\"lineno\":88,\"end_lineno\":88,\"type_name\":\"ast.Assign\",\"tokens\":[\"WHITESPACE_STR\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/utils/custom_decoder.py:scanstring", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:scanstring", "target": "{\"lineno\":270,\"end_lineno\":270,\"type_name\":\"ast.Assign\",\"tokens\":[\"scanstring\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:json", "target": "{\"lineno\":1,\"end_lineno\":1,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:re", "target": "{\"lineno\":2,\"end_lineno\":2,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:module:json", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:names:['JSONDecodeError']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json\",\"names\":[\"JSONDecodeError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:module:json.decoder", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json.decoder\",\"names\":[\"_decode_uXXXX\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/custom_decoder.py:names:['_decode_uXXXX']", "target": "{\"lineno\":4,\"end_lineno\":4,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"json.decoder\",\"names\":[\"_decode_uXXXX\"]}}"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/utils/git_repository.py:GitRepository:_init", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : git_repository.py\n@Desc: Git repository management. RFC 135 2.2.3.3.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : git_repository.py\\n@Desc: Git repository management. RFC 135 2.2.3.3.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:shutil", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:enum", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['Enum']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['Dict', 'List']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:git.repo", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo\",\"names\":[\"Repo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['Repo']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo\",\"names\":[\"Repo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:git.repo.fun", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo.fun\",\"names\":[\"is_git_dir\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['is_git_dir']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"git.repo.fun\",\"names\":[\"is_git_dir\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:gitignore_parser", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"gitignore_parser\",\"names\":[\"parse_gitignore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['parse_gitignore']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"gitignore_parser\",\"names\":[\"parse_gitignore\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:metagpt.utils.dependency_file", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.dependency_file\",\"names\":[\"DependencyFile\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['DependencyFile']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.dependency_file\",\"names\":[\"DependencyFile\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:module:metagpt.utils.file_repository", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/git_repository.py:names:['FileRepository']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "is", "source": "metagpt/utils/read_document.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/utils/read_document.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/utils/read_document.py", "target": "metagpt/utils/read_document.py:read_docx"}, {"predicate": "is", "source": "metagpt/utils/read_document.py:read_docx", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/utils/read_document.py:read_docx", "target": "{\"lineno\":12,\"end_lineno\":23,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"read_docx\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/read_document.py:ast.Constant:\n@Time : 2023/4/29 15:45\n@Author : alexanderwu\n@File : read_document.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/4/29 15:45\\n@Author : alexanderwu\\n@File : read_document.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/utils/read_document.py:docx", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.Import\",\"tokens\":[\"docx\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/s3_config.py:ast.Constant:\n@Time : 2024/1/4 19:07\n@Author : alexanderwu\n@File : s3_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:07\\n@Author : alexanderwu\\n@File : s3_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/s3_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/s3_config.py:names:['YamlModelWithoutDefault']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : browser_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : browser_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:names:['Literal']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:module:metagpt.tools", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:names:['WebBrowserEngineType']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/browser_config.py:names:['YamlModel']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:ast.Constant:\n@Time : 2024/1/4 19:09\n@Author : alexanderwu\n@File : workspace_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:09\\n@Author : alexanderwu\\n@File : workspace_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:datetime", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['datetime']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:pathlib", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['Path']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:uuid", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['uuid4']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"uuid\",\"names\":[\"uuid4\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:pydantic", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['field_validator', 'model_validator']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_WORKSPACE_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['DEFAULT_WORKSPACE_ROOT']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DEFAULT_WORKSPACE_ROOT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/workspace_config.py:names:['YamlModel']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:ast.Constant:\n@Time : 2024/1/4 19:07\n@Author : alexanderwu\n@File : mermaid_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:07\\n@Author : alexanderwu\\n@File : mermaid_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:names:['Literal']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/mermaid_config.py:names:['YamlModel']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "is", "source": "metagpt/configs/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/configs/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/configs/__init__.py:ast.Constant:\n@Time : 2024/1/4 16:33\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:33\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/configs/llm_config.py:LLMType:__missing__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:ast.Constant:\n@Time : 2024/1/4 16:33\n@Author : alexanderwu\n@File : llm_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 16:33\\n@Author : alexanderwu\\n@File : llm_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:module:enum", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:names:['Enum']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:names:['field_validator']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"field_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/llm_config.py:names:['YamlModel']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/redis_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : redis_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : redis_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/redis_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/redis_config.py:names:['YamlModelWithoutDefault']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModelWithoutDefault\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:ast.Constant:\n@Time : 2024/1/4 19:06\n@Author : alexanderwu\n@File : search_config.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4 19:06\\n@Author : alexanderwu\\n@File : search_config.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:module:metagpt.tools", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:names:['SearchEngineType']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:module:metagpt.utils.yaml_model", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/configs/search_config.py:names:['YamlModel']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.yaml_model\",\"names\":[\"YamlModel\"]}}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class_views", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_class", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_create_mermaid_relationship", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_diff_path", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_class_view.py:RebuildClassView:_align_root", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:ast.Constant:\n@Time : 2023/12/19\n@Author : mashenquan\n@File : rebuild_class_view.py\n@Desc : Rebuild class view info\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/19\\n@Author : mashenquan\\n@File : rebuild_class_view.py\\n@Desc : Rebuild class view info\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:pathlib", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['Path']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['Optional']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:aiofiles", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"aiofiles\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.actions", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['Action']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.config2", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['config']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.const", "target": "{\"lineno\":17,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"DATA_API_DESIGN_FILE_REPO\",\"GENERALIZATION\",\"GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['AGGREGATION', 'COMPOSITION', 'DATA_API_DESIGN_FILE_REPO', 'GENERALIZATION', 'GRAPH_REPO_FILE_REPO']", "target": "{\"lineno\":17,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"AGGREGATION\",\"COMPOSITION\",\"DATA_API_DESIGN_FILE_REPO\",\"GENERALIZATION\",\"GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.logs", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['logger']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.repo_parser", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"RepoParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['DotClassInfo', 'RepoParser']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"DotClassInfo\",\"RepoParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.schema", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['UMLClassView']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.common", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['concat_namespace', 'split_namespace']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"concat_namespace\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.di_graph_repository", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['DiGraphRepository']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:module:metagpt.utils.graph_repository", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_class_view.py:names:['GraphKeyword', 'GraphRepository']", "target": "{\"lineno\":29,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_main_sequence_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_sequence_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_main_entry", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_use_case", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_rebuild_sequence_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_participants", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_use_cases", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_class_detail", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_uml_class_view", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_source_code", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_get_full_filename", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_search_new_participant", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/rebuild_sequence_view.py:RebuildSequenceView:_merge_participant", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:ast.Constant:\n@Time : 2024/1/4\n@Author : mashenquan\n@File : rebuild_sequence_view.py\n@Desc : Rebuild sequence view info\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2024/1/4\\n@Author : mashenquan\\n@File : rebuild_sequence_view.py\\n@Desc : Rebuild sequence view info\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:re", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:datetime", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['datetime']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['List', 'Optional']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:pydantic", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['BaseModel']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:tenacity", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.actions", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['Action']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.config2", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['config']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.const", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['GRAPH_REPO_FILE_REPO']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"GRAPH_REPO_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.logs", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['logger']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.repo_parser", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"CodeBlockInfo\",\"DotClassInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['CodeBlockInfo', 'DotClassInfo']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.repo_parser\",\"names\":[\"CodeBlockInfo\",\"DotClassInfo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.schema", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['UMLClassView']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"UMLClassView\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.common", "target": "{\"lineno\":25,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\",\"concat_namespace\",\"general_after_log\",\"list_files\",\"parse_json_code_block\",\"read_file_block\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['aread', 'concat_namespace', 'general_after_log', 'list_files', 'parse_json_code_block', 'read_file_block', 'split_namespace']", "target": "{\"lineno\":25,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"aread\",\"concat_namespace\",\"general_after_log\",\"list_files\",\"parse_json_code_block\",\"read_file_block\",\"split_namespace\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.di_graph_repository", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['DiGraphRepository']", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.di_graph_repository\",\"names\":[\"DiGraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:module:metagpt.utils.graph_repository", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/rebuild_sequence_view.py:names:['SPO', 'GraphKeyword', 'GraphRepository']", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.graph_repository\",\"names\":[\"SPO\",\"GraphKeyword\",\"GraphRepository\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_code.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:PROMPT_TEMPLATE", "target": "{\"lineno\":36,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_code.py\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.1.3 of RFC 116, modify the data type of the `cause_by`\n value of the `Message` object.\n@Modified By: mashenquan, 2023-11-27.\n 1. Mark the location of Design, Tasks, Legacy Code and Debug logs in the PROMPT_TEMPLATE with markdown\n code-block formatting to enhance the understanding for the LLM.\n 2. Following the think-act principle, solidify the task parameters when creating the WriteCode object, rather\n than passing them in when calling the run function.\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\n", "target": "{\"lineno\":3,\"end_lineno\":16,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_code.py\\n@Modified By: mashenquan, 2023-11-1. In accordance with Chapter 2.1.3 of RFC 116, modify the data type of the `cause_by`\\n value of the `Message` object.\\n@Modified By: mashenquan, 2023-11-27.\\n 1. Mark the location of Design, Tasks, Legacy Code and Debug logs in the PROMPT_TEMPLATE with markdown\\n code-block formatting to enhance the understanding for the LLM.\\n 2. Following the think-act principle, solidify the task parameters when creating the WriteCode object, rather\\n than passing them in when calling the run function.\\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:json", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:pydantic", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['Field']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:tenacity", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.actions.action", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['Action']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.actions.project_management_an", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['REFINED_TASK_LIST', 'TASK_LIST']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"REFINED_TASK_LIST\",\"TASK_LIST\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.actions.write_code_plan_and_change_an", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"REFINED_TEMPLATE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['REFINED_TEMPLATE']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_plan_and_change_an\",\"names\":[\"REFINED_TEMPLATE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.const", "target": "{\"lineno\":26,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"CODE_PLAN_AND_CHANGE_FILENAME\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['BUGFIX_FILENAME', 'CODE_PLAN_AND_CHANGE_FILENAME', 'REQUIREMENT_FILENAME']", "target": "{\"lineno\":26,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"CODE_PLAN_AND_CHANGE_FILENAME\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.logs", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['logger']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.schema", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\",\"Document\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['CodingContext', 'Document', 'RunCodeResult']", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\",\"Document\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.utils.common", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['CodeParser']", "target": "{\"lineno\":33,\"end_lineno\":33,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code.py:names:['ProjectRepo']", "target": "{\"lineno\":34,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py", "target": "python"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:LANGUAGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:LANGUAGE", "target": "{\"lineno\":12,\"end_lineno\":17,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANGUAGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:PROGRAMMING_LANGUAGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:PROGRAMMING_LANGUAGE", "target": "{\"lineno\":19,\"end_lineno\":24,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROGRAMMING_LANGUAGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:ORIGINAL_REQUIREMENTS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:ORIGINAL_REQUIREMENTS", "target": "{\"lineno\":26,\"end_lineno\":31,\"type_name\":\"ast.Assign\",\"tokens\":[\"ORIGINAL_REQUIREMENTS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENTS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENTS", "target": "{\"lineno\":33,\"end_lineno\":38,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENTS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:PROJECT_NAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:PROJECT_NAME", "target": "{\"lineno\":40,\"end_lineno\":46,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROJECT_NAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:PRODUCT_GOALS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:PRODUCT_GOALS", "target": "{\"lineno\":48,\"end_lineno\":53,\"type_name\":\"ast.Assign\",\"tokens\":[\"PRODUCT_GOALS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_PRODUCT_GOALS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_PRODUCT_GOALS", "target": "{\"lineno\":55,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PRODUCT_GOALS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:USER_STORIES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:USER_STORIES", "target": "{\"lineno\":67,\"end_lineno\":78,\"type_name\":\"ast.Assign\",\"tokens\":[\"USER_STORIES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_USER_STORIES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_USER_STORIES", "target": "{\"lineno\":80,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_USER_STORIES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:COMPETITIVE_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:COMPETITIVE_ANALYSIS", "target": "{\"lineno\":94,\"end_lineno\":103,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:COMPETITIVE_QUADRANT_CHART", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:COMPETITIVE_QUADRANT_CHART", "target": "{\"lineno\":105,\"end_lineno\":124,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMPETITIVE_QUADRANT_CHART\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REQUIREMENT_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REQUIREMENT_ANALYSIS", "target": "{\"lineno\":126,\"end_lineno\":131,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_ANALYSIS", "target": "{\"lineno\":133,\"end_lineno\":140,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENT_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REQUIREMENT_POOL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REQUIREMENT_POOL", "target": "{\"lineno\":142,\"end_lineno\":147,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIREMENT_POOL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_POOL", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_REQUIREMENT_POOL", "target": "{\"lineno\":149,\"end_lineno\":155,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_REQUIREMENT_POOL\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:UI_DESIGN_DRAFT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:UI_DESIGN_DRAFT", "target": "{\"lineno\":157,\"end_lineno\":162,\"type_name\":\"ast.Assign\",\"tokens\":[\"UI_DESIGN_DRAFT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:ANYTHING_UNCLEAR", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:ANYTHING_UNCLEAR", "target": "{\"lineno\":164,\"end_lineno\":169,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:ISSUE_TYPE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:ISSUE_TYPE", "target": "{\"lineno\":171,\"end_lineno\":176,\"type_name\":\"ast.Assign\",\"tokens\":[\"ISSUE_TYPE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:IS_RELATIVE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:IS_RELATIVE", "target": "{\"lineno\":178,\"end_lineno\":183,\"type_name\":\"ast.Assign\",\"tokens\":[\"IS_RELATIVE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REASON", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REASON", "target": "{\"lineno\":185,\"end_lineno\":187,\"type_name\":\"ast.Assign\",\"tokens\":[\"REASON\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:NODES", "target": "{\"lineno\":190,\"end_lineno\":203,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_NODES", "target": "{\"lineno\":205,\"end_lineno\":218,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:WRITE_PRD_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:WRITE_PRD_NODE", "target": "{\"lineno\":220,\"end_lineno\":220,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_PRD_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:REFINED_PRD_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:REFINED_PRD_NODE", "target": "{\"lineno\":221,\"end_lineno\":221,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PRD_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:WP_ISSUE_TYPE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:WP_ISSUE_TYPE_NODE", "target": "{\"lineno\":222,\"end_lineno\":222,\"type_name\":\"ast.Assign\",\"tokens\":[\"WP_ISSUE_TYPE_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd_an.py:WP_IS_RELATIVE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:WP_IS_RELATIVE_NODE", "target": "{\"lineno\":223,\"end_lineno\":223,\"type_name\":\"ast.Assign\",\"tokens\":[\"WP_IS_RELATIVE_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:ast.Constant:\n@Time : 2023/12/14 11:40\n@Author : alexanderwu\n@File : write_prd_an.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/14 11:40\\n@Author : alexanderwu\\n@File : write_prd_an.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:names:['List']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:module:metagpt.actions.action_node", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_an.py:names:['ActionNode']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:PROMPT_TEMPLATE", "target": "{\"lineno\":17,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/summarize_code.py:FORMAT_EXAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:FORMAT_EXAMPLE", "target": "{\"lineno\":46,\"end_lineno\":87,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_EXAMPLE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:ast.Constant:\n@Author : alexanderwu\n@File : summarize_code.py\n@Modified By: mashenquan, 2023/12/5. Archive the summarization content of issue discovery for use in WriteCode.\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : summarize_code.py\\n@Modified By: mashenquan, 2023/12/5. Archive the summarization content of issue discovery for use in WriteCode.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:pathlib", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['Path']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:tenacity", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:metagpt.actions.action", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['Action']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:module:metagpt.schema", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodeSummarizeContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/summarize_code.py:names:['CodeSummarizeContext']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodeSummarizeContext\"]}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CollectLinks:_search_and_rank_urls", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/research.py:WebBrowseAndSummarize:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/research.py:ConductResearch:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/research.py:get_research_system_text", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:get_research_system_text", "target": "{\"lineno\":268,\"end_lineno\":278,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"get_research_system_text\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:LANG_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:LANG_PROMPT", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANG_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:RESEARCH_BASE_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:RESEARCH_BASE_SYSTEM", "target": "{\"lineno\":20,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_BASE_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:RESEARCH_TOPIC_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:RESEARCH_TOPIC_SYSTEM", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.Assign\",\"tokens\":[\"RESEARCH_TOPIC_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:SEARCH_TOPIC_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:SEARCH_TOPIC_PROMPT", "target": "{\"lineno\":25,\"end_lineno\":26,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_TOPIC_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:SUMMARIZE_SEARCH_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:SUMMARIZE_SEARCH_PROMPT", "target": "{\"lineno\":28,\"end_lineno\":35,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_SEARCH_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:COLLECT_AND_RANKURLS_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:COLLECT_AND_RANKURLS_PROMPT", "target": "{\"lineno\":37,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"COLLECT_AND_RANKURLS_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:WEB_BROWSE_AND_SUMMARIZE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:WEB_BROWSE_AND_SUMMARIZE_PROMPT", "target": "{\"lineno\":51,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"WEB_BROWSE_AND_SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/research.py:CONDUCT_RESEARCH_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:CONDUCT_RESEARCH_PROMPT", "target": "{\"lineno\":63,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONDUCT_RESEARCH_PROMPT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:__future__", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['annotations']", "target": "{\"lineno\":3,\"end_lineno\":3,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:asyncio", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['Callable', 'Optional', 'Union']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Callable\",\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:pydantic", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\",\"parse_obj_as\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['Field', 'parse_obj_as']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\",\"parse_obj_as\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.config2", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['config']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.logs", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['logger']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.tools.search_engine", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['SearchEngine']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.tools.web_browser_engine", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.web_browser_engine\",\"names\":[\"WebBrowserEngine\",\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['WebBrowserEngine', 'WebBrowserEngineType']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.web_browser_engine\",\"names\":[\"WebBrowserEngine\",\"WebBrowserEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.utils.common", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['OutputParser']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:module:metagpt.utils.text", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.text\",\"names\":[\"generate_prompt_chunk\",\"reduce_message_length\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/research.py:names:['generate_prompt_chunk', 'reduce_message_length']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.text\",\"names\":[\"generate_prompt_chunk\",\"reduce_message_length\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : skill_action.py\n@Desc : Call learned skill\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : skill_action.py\\n@Desc : Call learned skill\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:ast", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:importlib", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"importlib\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:traceback", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"traceback\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:copy", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['deepcopy']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"copy\",\"names\":[\"deepcopy\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['Dict', 'Optional']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:metagpt.actions", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['Action']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:metagpt.learn.skill_loader", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"Skill\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['Skill']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.learn.skill_loader\",\"names\":[\"Skill\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:metagpt.logs", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['logger']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:module:metagpt.schema", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/skill_action.py:names:['Message']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_test.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:PROMPT_TEMPLATE", "target": "{\"lineno\":19,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:ast.Constant:\n@Time : 2023/5/11 22:12\n@Author : alexanderwu\n@File : write_test.py\n@Modified By: mashenquan, 2023-11-27. Following the think-act principle, solidify the task parameters when creating the\n WriteTest object, rather than passing them in when calling the run function.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 22:12\\n@Author : alexanderwu\\n@File : write_test.py\\n@Modified By: mashenquan, 2023-11-27. Following the think-act principle, solidify the task parameters when creating the\\n WriteTest object, rather than passing them in when calling the run function.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['Optional']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.actions.action", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['Action']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.const", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TEST_CODES_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['TEST_CODES_FILE_REPO']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"TEST_CODES_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.logs", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['logger']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.schema", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['Document', 'TestingContext']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:module:metagpt.utils.common", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_test.py:names:['CodeParser']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "is", "source": "metagpt/actions/debug_error.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:PROMPT_TEMPLATE", "target": "{\"lineno\":20,\"end_lineno\":45,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:ast.Constant:\n@Time : 2023/5/11 17:46\n@Author : alexanderwu\n@File : debug_error.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Divide the context into three components: legacy code, unit test code, and console log.\n 2. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:46\\n@Author : alexanderwu\\n@File : debug_error.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Divide the context into three components: legacy code, unit test code, and console log.\\n 2. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:re", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"re\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:pydantic", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['Field']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:metagpt.actions.action", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['Action']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:metagpt.logs", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['logger']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:metagpt.schema", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['RunCodeContext', 'RunCodeResult']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:module:metagpt.utils.common", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/debug_error.py:names:['CodeParser']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_new_system_design", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_merge", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_update_system_design", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_save_data_api_design", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_save_seq_flow", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:WriteDesign:_save_mermaid_file", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/design_api.py:NEW_REQ_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:NEW_REQ_TEMPLATE", "target": "{\"lineno\":30,\"end_lineno\":36,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:ast.Constant:\n@Time : 2023/5/11 19:26\n@Author : alexanderwu\n@File : design_api.py\n@Modified By: mashenquan, 2023/11/27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.3 of RFC 135, add incremental iteration functionality.\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\n", "target": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:26\\n@Author : alexanderwu\\n@File : design_api.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.3 of RFC 135, add incremental iteration functionality.\\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:json", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:pathlib", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['Path']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['Optional']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.actions", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['Action', 'ActionOutput']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.actions.design_api_an", "target": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_an\",\"names\":[\"DATA_STRUCTURES_AND_INTERFACES\",\"DESIGN_API_NODE\",\"PROGRAM_CALL_FLOW\",\"REFINED_DATA_STRUCTURES_AND_INTERFACES\",\"REFINED_DESIGN_NODE\",\"REFINED_PROGRAM_CALL_FLOW\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['DATA_STRUCTURES_AND_INTERFACES', 'DESIGN_API_NODE', 'PROGRAM_CALL_FLOW', 'REFINED_DATA_STRUCTURES_AND_INTERFACES', 'REFINED_DESIGN_NODE', 'REFINED_PROGRAM_CALL_FLOW']", "target": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_an\",\"names\":[\"DATA_STRUCTURES_AND_INTERFACES\",\"DESIGN_API_NODE\",\"PROGRAM_CALL_FLOW\",\"REFINED_DATA_STRUCTURES_AND_INTERFACES\",\"REFINED_DESIGN_NODE\",\"REFINED_PROGRAM_CALL_FLOW\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.const", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_API_DESIGN_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['DATA_API_DESIGN_FILE_REPO', 'SEQ_FLOW_FILE_REPO']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"DATA_API_DESIGN_FILE_REPO\",\"SEQ_FLOW_FILE_REPO\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.logs", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['logger']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.schema", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['Document', 'Documents', 'Message']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:module:metagpt.utils.mermaid", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api.py:names:['mermaid_to_file']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/actions/design_api_an.py", "target": "metagpt/actions/design_api_an.py:main"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:main", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:main", "target": "{\"lineno\":114,\"end_lineno\":118,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:IMPLEMENTATION_APPROACH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:IMPLEMENTATION_APPROACH", "target": "{\"lineno\":14,\"end_lineno\":19,\"type_name\":\"ast.Assign\",\"tokens\":[\"IMPLEMENTATION_APPROACH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_IMPLEMENTATION_APPROACH", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_IMPLEMENTATION_APPROACH", "target": "{\"lineno\":21,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_IMPLEMENTATION_APPROACH\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:PROJECT_NAME", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:PROJECT_NAME", "target": "{\"lineno\":30,\"end_lineno\":32,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROJECT_NAME\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:FILE_LIST", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:FILE_LIST", "target": "{\"lineno\":34,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"FILE_LIST\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_FILE_LIST", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_FILE_LIST", "target": "{\"lineno\":41,\"end_lineno\":47,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_FILE_LIST\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:DATA_STRUCTURES_AND_INTERFACES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:DATA_STRUCTURES_AND_INTERFACES", "target": "{\"lineno\":49,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"DATA_STRUCTURES_AND_INTERFACES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_DATA_STRUCTURES_AND_INTERFACES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_DATA_STRUCTURES_AND_INTERFACES", "target": "{\"lineno\":58,\"end_lineno\":66,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_DATA_STRUCTURES_AND_INTERFACES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:PROGRAM_CALL_FLOW", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:PROGRAM_CALL_FLOW", "target": "{\"lineno\":68,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROGRAM_CALL_FLOW\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_PROGRAM_CALL_FLOW", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_PROGRAM_CALL_FLOW", "target": "{\"lineno\":76,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PROGRAM_CALL_FLOW\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:ANYTHING_UNCLEAR", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:ANYTHING_UNCLEAR", "target": "{\"lineno\":86,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:NODES", "target": "{\"lineno\":93,\"end_lineno\":100,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_NODES", "target": "{\"lineno\":102,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:DESIGN_API_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:DESIGN_API_NODE", "target": "{\"lineno\":110,\"end_lineno\":110,\"type_name\":\"ast.Assign\",\"tokens\":[\"DESIGN_API_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/design_api_an.py:REFINED_DESIGN_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:REFINED_DESIGN_NODE", "target": "{\"lineno\":111,\"end_lineno\":111,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_DESIGN_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:ast.Constant:\n@Time : 2023/12/12 22:24\n@Author : alexanderwu\n@File : design_api_an.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/12 22:24\\n@Author : alexanderwu\\n@File : design_api_an.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:names:['List']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:module:metagpt.actions.action_node", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:names:['ActionNode']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:module:metagpt.logs", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:names:['logger']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:module:metagpt.utils.mermaid", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"MMC1\",\"MMC2\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:names:['MMC1', 'MMC2']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"MMC1\",\"MMC2\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_an.py:__name__:__main__", "target": "{\"lineno\":121,\"end_lineno\":122,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_output.py:ActionOutput:__init__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_output.py:ast.Constant:\n@Time : 2023/7/11 10:03\n@Author : chengmaoyu\n@File : action_output\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/11 10:03\\n@Author : chengmaoyu\\n@File : action_output\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_output.py:module:pydantic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_output.py:names:['BaseModel']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "is", "source": "metagpt/actions/action_outcls_registry.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/action_outcls_registry.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/actions/action_outcls_registry.py", "target": "metagpt/actions/action_outcls_registry.py:register_action_outcls"}, {"predicate": "is", "source": "metagpt/actions/action_outcls_registry.py:register_action_outcls", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_outcls_registry.py:register_action_outcls", "target": "{\"lineno\":11,\"end_lineno\":42,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"register_action_outcls\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_outcls_registry.py:action_outcls_registry", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_outcls_registry.py:action_outcls_registry", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Assign\",\"tokens\":[\"action_outcls_registry\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_outcls_registry.py:module:functools", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"wraps\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_outcls_registry.py:names:['wraps']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"functools\",\"names\":[\"wraps\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/add_requirement.py:ast.Constant:\n@Time : 2023/5/20 17:46\n@Author : alexanderwu\n@File : add_requirement.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/20 17:46\\n@Author : alexanderwu\\n@File : add_requirement.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/add_requirement.py:module:metagpt.actions", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/add_requirement.py:names:['Action']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "is", "source": "metagpt/actions/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/__init__.py", "target": "python"}, {"predicate": "has_class", "source": "metagpt/actions/__init__.py", "target": "metagpt/actions/__init__.py:ActionType"}, {"predicate": "is", "source": "metagpt/actions/__init__.py:ActionType", "target": "class"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:ActionType", "target": "{\"lineno\":27,\"end_lineno\":44,\"type_name\":\"ast.ClassDef\",\"tokens\":[\"ActionType\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/__init__.py:__all__", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:__all__", "target": "{\"lineno\":47,\"end_lineno\":51,\"type_name\":\"ast.Assign\",\"tokens\":[\"__all__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:ast.Constant:\n@Time : 2023/5/11 17:44\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:44\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:enum", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['Enum']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.action", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.action_output", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['ActionOutput']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.add_requirement", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['UserRequirement']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.add_requirement\",\"names\":[\"UserRequirement\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.debug_error", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.debug_error\",\"names\":[\"DebugError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['DebugError']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.debug_error\",\"names\":[\"DebugError\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.design_api", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteDesign']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api\",\"names\":[\"WriteDesign\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.design_api_review", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_review\",\"names\":[\"DesignReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['DesignReview']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.design_api_review\",\"names\":[\"DesignReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.project_management", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management\",\"names\":[\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteTasks']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management\",\"names\":[\"WriteTasks\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.research", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"CollectLinks\",\"WebBrowseAndSummarize\",\"ConductResearch\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['CollectLinks', 'WebBrowseAndSummarize', 'ConductResearch']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.research\",\"names\":[\"CollectLinks\",\"WebBrowseAndSummarize\",\"ConductResearch\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.run_code", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.run_code\",\"names\":[\"RunCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['RunCode']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.run_code\",\"names\":[\"RunCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.search_and_summarize", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.search_and_summarize\",\"names\":[\"SearchAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['SearchAndSummarize']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.search_and_summarize\",\"names\":[\"SearchAndSummarize\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_code", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code\",\"names\":[\"WriteCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteCode']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code\",\"names\":[\"WriteCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_code_review", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_review\",\"names\":[\"WriteCodeReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteCodeReview']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_code_review\",\"names\":[\"WriteCodeReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_prd", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd\",\"names\":[\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WritePRD']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd\",\"names\":[\"WritePRD\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_prd_review", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_review\",\"names\":[\"WritePRDReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WritePRDReview']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_review\",\"names\":[\"WritePRDReview\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:module:metagpt.actions.write_test", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_test\",\"names\":[\"WriteTest\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/__init__.py:names:['WriteTest']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_test\",\"names\":[\"WriteTest\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:REVIEW", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:REVIEW", "target": "{\"lineno\":12,\"end_lineno\":20,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:LGTM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:LGTM", "target": "{\"lineno\":22,\"end_lineno\":28,\"type_name\":\"ast.Assign\",\"tokens\":[\"LGTM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_review.py:WRITE_REVIEW_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:WRITE_REVIEW_NODE", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_REVIEW_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:ast.Constant:\n@Author : alexanderwu\n@File : write_review.py\n", "target": "{\"lineno\":3,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : write_review.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:module:typing", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:names:['List']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:module:metagpt.actions", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:names:['Action']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:module:metagpt.actions.action_node", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_review.py:names:['ActionNode']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:_init_with_instruction", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:__repr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:_aask", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action.py:Action:_run_action_node", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:ast.Constant:\n@Time : 2023/5/11 14:43\n@Author : alexanderwu\n@File : action.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 14:43\\n@Author : alexanderwu\\n@File : action.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:__future__", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['annotations']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:typing", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['Optional', 'Union']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:pydantic", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['BaseModel', 'ConfigDict', 'Field', 'model_validator']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:metagpt.actions.action_node", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['ActionNode']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:metagpt.context_mixin", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['ContextMixin']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context_mixin\",\"names\":[\"ContextMixin\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:metagpt.schema", "target": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"SerializationMixin\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['CodePlanAndChangeContext', 'CodeSummarizeContext', 'CodingContext', 'RunCodeContext', 'SerializationMixin', 'TestingContext']", "target": "{\"lineno\":17,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\",\"CodeSummarizeContext\",\"CodingContext\",\"RunCodeContext\",\"SerializationMixin\",\"TestingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action.py:names:['ProjectRepo']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:ast.Constant:\n@Time : 2023/9/13 12:26\n@Author : femto Zheng\n@File : execute_task.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/13 12:26\\n@Author : femto Zheng\\n@File : execute_task.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:module:metagpt.schema", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/execute_task.py:names:['Message']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_handle_bugfix", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_handle_new_requirement", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_handle_requirement_update", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_is_bugfix", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_is_related", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_merge", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_update_prd", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_save_competitive_analysis", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:WritePRD:_rename_workspace", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:CONTEXT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:CONTEXT_TEMPLATE", "target": "{\"lineno\":41,\"end_lineno\":50,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONTEXT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_prd.py:NEW_REQ_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:NEW_REQ_TEMPLATE", "target": "{\"lineno\":52,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_prd.py\n@Modified By: mashenquan, 2023/11/27.\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\n 2. According to the design in Section 2.2.3.5.2 of RFC 135, add incremental iteration functionality.\n 3. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\n", "target": "{\"lineno\":3,\"end_lineno\":12,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_prd.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. According to Section 2.2.3.1 of RFC 135, replace file data in the message with the file name.\\n 2. According to the design in Section 2.2.3.5.2 of RFC 135, add incremental iteration functionality.\\n 3. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\\n@Modified By: mashenquan, 2023/12/5. Move the generation logic of the project name to WritePRD.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:__future__", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['annotations']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:json", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:pathlib", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['Path']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.actions", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['Action', 'ActionOutput']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.actions.action_node", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['ActionNode']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.actions.fix_bug", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['FixBug']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.fix_bug\",\"names\":[\"FixBug\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.actions.write_prd_an", "target": "{\"lineno\":22,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_an\",\"names\":[\"COMPETITIVE_QUADRANT_CHART\",\"PROJECT_NAME\",\"REFINED_PRD_NODE\",\"WP_IS_RELATIVE_NODE\",\"WP_ISSUE_TYPE_NODE\",\"WRITE_PRD_NODE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['COMPETITIVE_QUADRANT_CHART', 'PROJECT_NAME', 'REFINED_PRD_NODE', 'WP_IS_RELATIVE_NODE', 'WP_ISSUE_TYPE_NODE', 'WRITE_PRD_NODE']", "target": "{\"lineno\":22,\"end_lineno\":29,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.write_prd_an\",\"names\":[\"COMPETITIVE_QUADRANT_CHART\",\"PROJECT_NAME\",\"REFINED_PRD_NODE\",\"WP_IS_RELATIVE_NODE\",\"WP_ISSUE_TYPE_NODE\",\"WRITE_PRD_NODE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.const", "target": "{\"lineno\":30,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['BUGFIX_FILENAME', 'COMPETITIVE_ANALYSIS_FILE_REPO', 'REQUIREMENT_FILENAME']", "target": "{\"lineno\":30,\"end_lineno\":34,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"BUGFIX_FILENAME\",\"COMPETITIVE_ANALYSIS_FILE_REPO\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.logs", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['logger']", "target": "{\"lineno\":35,\"end_lineno\":35,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.schema", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"BugFixContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['BugFixContext', 'Document', 'Documents', 'Message']", "target": "{\"lineno\":36,\"end_lineno\":36,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"BugFixContext\",\"Document\",\"Documents\",\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.utils.common", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['CodeParser']", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.utils.file_repository", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['FileRepository']", "target": "{\"lineno\":38,\"end_lineno\":38,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:module:metagpt.utils.mermaid", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd.py:names:['mermaid_to_file']", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.mermaid\",\"names\":[\"mermaid_to_file\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:_simplify_python_code", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:_simplify_python_code", "target": "{\"lineno\":199,\"end_lineno\":212,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"_simplify_python_code\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_SYSTEM", "target": "{\"lineno\":34,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_GOOGLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_GOOGLE", "target": "{\"lineno\":58,\"end_lineno\":84,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_GOOGLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_NUMPY", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_NUMPY", "target": "{\"lineno\":86,\"end_lineno\":122,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_NUMPY\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_SPHINX", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:PYTHON_DOCSTRING_EXAMPLE_SPHINX", "target": "{\"lineno\":124,\"end_lineno\":147,\"type_name\":\"ast.Assign\",\"tokens\":[\"PYTHON_DOCSTRING_EXAMPLE_SPHINX\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_docstring.py:_python_docstring_style", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:_python_docstring_style", "target": "{\"lineno\":149,\"end_lineno\":153,\"type_name\":\"ast.Assign\",\"tokens\":[\"_python_docstring_style\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:ast.Constant:Code Docstring Generator.\n\nThis script provides a tool to automatically generate docstrings for Python code. It uses the specified style to create\ndocstrings for the given code and system text.\n\nUsage:\n python3 -m metagpt.actions.write_docstring [--overwrite] [--style=]\n\nArguments:\n filename The path to the Python file for which you want to generate docstrings.\n\nOptions:\n --overwrite If specified, overwrite the original file with the code containing docstrings.\n --style= Specify the style of the generated docstrings.\n Valid values: 'google', 'numpy', or 'sphinx'.\n Default: 'google'\n\nExample:\n python3 -m metagpt.actions.write_docstring ./metagpt/startup.py --overwrite False --style=numpy\n\nThis script uses the 'fire' library to create a command-line interface. It generates docstrings for the given Python code using\nthe specified docstring style and adds them to the code.\n", "target": "{\"lineno\":1,\"end_lineno\":23,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"Code Docstring Generator.\\n\\nThis script provides a tool to automatically generate docstrings for Python code. It uses the specified style to create\\ndocstrings for the given code and system text.\\n\\nUsage:\\n python3 -m metagpt.actions.write_docstring [--overwrite] [--style=]\\n\\nArguments:\\n filename The path to the Python file for which you want to generate docstrings.\\n\\nOptions:\\n --overwrite If specified, overwrite the original file with the code containing docstrings.\\n --style= Specify the style of the generated docstrings.\\n Valid values: 'google', 'numpy', or 'sphinx'.\\n Default: 'google'\\n\\nExample:\\n python3 -m metagpt.actions.write_docstring ./metagpt/startup.py --overwrite False --style=numpy\\n\\nThis script uses the 'fire' library to create a command-line interface. It generates docstrings for the given Python code using\\nthe specified docstring style and adds them to the code.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:__future__", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['annotations']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:ast", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.Import\",\"tokens\":[\"ast\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:pathlib", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['Path']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:typing", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['Literal', 'Optional']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Literal\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:metagpt.actions.action", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['Action']", "target": "{\"lineno\":30,\"end_lineno\":30,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:metagpt.utils.common", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"aread\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['OutputParser', 'aread', 'awrite']", "target": "{\"lineno\":31,\"end_lineno\":31,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"aread\",\"awrite\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:module:metagpt.utils.pycst", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.pycst\",\"names\":[\"merge_docstring\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:names:['merge_docstring']", "target": "{\"lineno\":32,\"end_lineno\":32,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.pycst\",\"names\":[\"merge_docstring\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_docstring.py:__name__:__main__", "target": "{\"lineno\":215,\"end_lineno\":218,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/fix_bug.py:ast.Constant:\n@Time : 2023-12-12\n@Author : mashenquan\n@File : fix_bug.py\n", "target": "{\"lineno\":2,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023-12-12\\n@Author : mashenquan\\n@File : fix_bug.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/fix_bug.py:module:metagpt.actions", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/fix_bug.py:names:['Action']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "is", "source": "metagpt/actions/prepare_interview.py:QUESTIONS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:QUESTIONS", "target": "{\"lineno\":11,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"QUESTIONS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:ast.Constant:\n@Time : 2023/9/19 15:02\n@Author : DevXiaolan\n@File : prepare_interview.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/19 15:02\\n@Author : DevXiaolan\\n@File : prepare_interview.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:module:metagpt.actions", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:names:['Action']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:module:metagpt.actions.action_node", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_interview.py:names:['ActionNode']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:_install_via_subprocess", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:_install_requirements", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:_install_pytest", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:RunCode:_install_dependencies", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:PROMPT_TEMPLATE", "target": "{\"lineno\":29,\"end_lineno\":49,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/run_code.py:TEMPLATE_CONTEXT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:TEMPLATE_CONTEXT", "target": "{\"lineno\":51,\"end_lineno\":75,\"type_name\":\"ast.Assign\",\"tokens\":[\"TEMPLATE_CONTEXT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:ast.Constant:\n@Time : 2023/5/11 17:46\n@Author : alexanderwu\n@File : run_code.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Mark the location of Console logs in the PROMPT_TEMPLATE with markdown code-block formatting to enhance\n the understanding for the LLM.\n 2. Fix bug: Add the \"install dependency\" operation.\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\n 4. According to section 2.2.3.5.7 of RFC 135, change the method of transferring file content\n (code files, unit test files, log files) from using the message to using the file name.\n 5. Merged the `Config` class of send18:dev branch to take over the set/get operations of the Environment\n class.\n", "target": "{\"lineno\":3,\"end_lineno\":17,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:46\\n@Author : alexanderwu\\n@File : run_code.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Mark the location of Console logs in the PROMPT_TEMPLATE with markdown code-block formatting to enhance\\n the understanding for the LLM.\\n 2. Fix bug: Add the \\\"install dependency\\\" operation.\\n 3. Encapsulate the input of RunCode into RunCodeContext and encapsulate the output of RunCode into\\n RunCodeResult to standardize and unify parameter passing between WriteCode, RunCode, and DebugError.\\n 4. According to section 2.2.3.5.7 of RFC 135, change the method of transferring file content\\n (code files, unit test files, log files) from using the message to using the file name.\\n 5. Merged the `Config` class of send18:dev branch to take over the set/get operations of the Environment\\n class.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:subprocess", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.Import\",\"tokens\":[\"subprocess\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:pathlib", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['Path']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:typing", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['Tuple']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Tuple\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:pydantic", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['Field']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:metagpt.actions.action", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['Action']", "target": "{\"lineno\":24,\"end_lineno\":24,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:metagpt.logs", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['logger']", "target": "{\"lineno\":25,\"end_lineno\":25,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:metagpt.schema", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['RunCodeContext', 'RunCodeResult']", "target": "{\"lineno\":26,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"RunCodeContext\",\"RunCodeResult\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:module:metagpt.utils.exceptions", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/run_code.py:names:['handle_exception']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.exceptions\",\"names\":[\"handle_exception\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:main", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:main", "target": "{\"lineno\":584,\"end_lineno\":585,\"type_name\":\"ast.AsyncFunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:REVIEW", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:REVIEW", "target": "{\"lineno\":13,\"end_lineno\":22,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:REVIEW_RESULT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:REVIEW_RESULT", "target": "{\"lineno\":24,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW_RESULT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:NEXT_STEPS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:NEXT_STEPS", "target": "{\"lineno\":31,\"end_lineno\":61,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEXT_STEPS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WRITE_DRAFT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WRITE_DRAFT", "target": "{\"lineno\":63,\"end_lineno\":68,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_DRAFT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WRITE_FUNCTION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WRITE_FUNCTION", "target": "{\"lineno\":71,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_FUNCTION\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:REWRITE_CODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:REWRITE_CODE", "target": "{\"lineno\":83,\"end_lineno\":94,\"type_name\":\"ast.Assign\",\"tokens\":[\"REWRITE_CODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_CONTEXT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_CONTEXT", "target": "{\"lineno\":97,\"end_lineno\":416,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_CONTEXT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SMALLEST_CONTEXT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SMALLEST_CONTEXT", "target": "{\"lineno\":419,\"end_lineno\":489,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_SMALLEST_CONTEXT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:CODE_REVIEW_SAMPLE", "target": "{\"lineno\":492,\"end_lineno\":554,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_REVIEW_SAMPLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WRITE_CODE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WRITE_CODE_NODE", "target": "{\"lineno\":557,\"end_lineno\":557,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_CODE_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:WRITE_MOVE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:WRITE_MOVE_NODE", "target": "{\"lineno\":558,\"end_lineno\":558,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_MOVE_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_an_draft.py:CR_FOR_MOVE_FUNCTION_BY_3", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:CR_FOR_MOVE_FUNCTION_BY_3", "target": "{\"lineno\":561,\"end_lineno\":573,\"type_name\":\"ast.Assign\",\"tokens\":[\"CR_FOR_MOVE_FUNCTION_BY_3\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:ast.Constant:\n@Author : alexanderwu\n@File : write_review.py\n", "target": "{\"lineno\":3,\"end_lineno\":6,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Author : alexanderwu\\n@File : write_review.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:asyncio", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:names:['List', 'Literal']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\",\"Literal\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:module:metagpt.actions.action_node", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:names:['ActionNode']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_an_draft.py:__name__:__main__", "target": "{\"lineno\":588,\"end_lineno\":589,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:ast.Constant:\n@Time : 2023/8/28\n@Author : mashenquan\n@File : talk_action.py\n@Desc : Act as it\u2019s a talk\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/8/28\\n@Author : mashenquan\\n@File : talk_action.py\\n@Desc : Act as it\u2019s a talk\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:metagpt.actions", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['Action']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:metagpt.config2", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['config']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.config2\",\"names\":[\"config\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:module:metagpt.schema", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/talk_action.py:names:['Message']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n@Describe : Actions of the tutorial assistant, including writing directories and document content.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n@Describe : Actions of the tutorial assistant, including writing directories and document content.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:module:typing", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:names:['Dict']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Dict\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:module:metagpt.actions", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:names:['Action']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:module:metagpt.prompts.tutorial_assistant", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.tutorial_assistant\",\"names\":[\"CONTENT_PROMPT\",\"DIRECTORY_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:names:['CONTENT_PROMPT', 'DIRECTORY_PROMPT']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.tutorial_assistant\",\"names\":[\"CONTENT_PROMPT\",\"DIRECTORY_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:module:metagpt.utils.common", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_tutorial.py:names:['OutputParser']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_prd_review.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_prd_review.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:module:metagpt.actions.action", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_prd_review.py:names:['Action']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "is", "source": "metagpt/actions/generate_questions.py:QUESTIONS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:QUESTIONS", "target": "{\"lineno\":9,\"end_lineno\":15,\"type_name\":\"ast.Assign\",\"tokens\":[\"QUESTIONS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:ast.Constant:\n@File : generate_questions.py\n", "target": "{\"lineno\":3,\"end_lineno\":5,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@File : generate_questions.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:module:metagpt.actions", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:names:['Action']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:module:metagpt.actions.action_node", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/generate_questions.py:names:['ActionNode']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "is", "source": "metagpt/actions/prepare_documents.py:PrepareDocuments:_init_repo", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:ast.Constant:\n@Time : 2023/11/20\n@Author : mashenquan\n@File : prepare_documents.py\n@Desc: PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt.\n RFC 135 2.2.3.5.1.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/11/20\\n@Author : mashenquan\\n@File : prepare_documents.py\\n@Desc: PrepareDocuments Action: initialize project folder and add new requirements to docs/requirements.txt.\\n RFC 135 2.2.3.5.1.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:shutil", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"shutil\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:pathlib", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['Path']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:typing", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['Optional']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.actions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['Action', 'ActionOutput']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\",\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.const", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['REQUIREMENT_FILENAME']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.utils.file_repository", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['FileRepository']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file_repository\",\"names\":[\"FileRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.utils.git_repository", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['GitRepository']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.git_repository\",\"names\":[\"GitRepository\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:module:metagpt.utils.project_repo", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/prepare_documents.py:names:['ProjectRepo']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.project_repo\",\"names\":[\"ProjectRepo\"]}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM", "target": "{\"lineno\":19,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM_EN_US", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SYSTEM_EN_US", "target": "{\"lineno\":42,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SYSTEM_EN_US\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_PROMPT", "target": "{\"lineno\":44,\"end_lineno\":58,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_SYSTEM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_SYSTEM", "target": "{\"lineno\":60,\"end_lineno\":80,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SALES_SYSTEM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_AND_SUMMARIZE_SALES_PROMPT", "target": "{\"lineno\":82,\"end_lineno\":91,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_AND_SUMMARIZE_SALES_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/search_and_summarize.py:SEARCH_FOOD", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:SEARCH_FOOD", "target": "{\"lineno\":93,\"end_lineno\":102,\"type_name\":\"ast.Assign\",\"tokens\":[\"SEARCH_FOOD\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:ast.Constant:\n@Time : 2023/5/23 17:26\n@Author : alexanderwu\n@File : search_google.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/23 17:26\\n@Author : alexanderwu\\n@File : search_google.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['Any', 'Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.Import\",\"tokens\":[\"pydantic\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['model_validator']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:metagpt.actions", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['Action']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:metagpt.logs", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['logger']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:metagpt.schema", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['Message']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Message\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:metagpt.tools", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['SearchEngineType']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools\",\"names\":[\"SearchEngineType\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:module:metagpt.tools.search_engine", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/search_and_summarize.py:names:['SearchEngine']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.tools.search_engine\",\"names\":[\"SearchEngine\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:PROMPT_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:PROMPT_TEMPLATE", "target": "{\"lineno\":21,\"end_lineno\":34,\"type_name\":\"ast.Assign\",\"tokens\":[\"PROMPT_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:EXAMPLE_AND_INSTRUCTION", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:EXAMPLE_AND_INSTRUCTION", "target": "{\"lineno\":36,\"end_lineno\":56,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXAMPLE_AND_INSTRUCTION\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:FORMAT_EXAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:FORMAT_EXAMPLE", "target": "{\"lineno\":58,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_EXAMPLE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_review.py:REWRITE_CODE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:REWRITE_CODE_TEMPLATE", "target": "{\"lineno\":111,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"REWRITE_CODE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:ast.Constant:\n@Time : 2023/5/11 17:45\n@Author : alexanderwu\n@File : write_code_review.py\n@Modified By: mashenquan, 2023/11/27. Following the think-act principle, solidify the task parameters when creating the\n WriteCode object, rather than passing them in when calling the run function.\n", "target": "{\"lineno\":3,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 17:45\\n@Author : alexanderwu\\n@File : write_code_review.py\\n@Modified By: mashenquan, 2023/11/27. Following the think-act principle, solidify the task parameters when creating the\\n WriteCode object, rather than passing them in when calling the run function.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:pydantic", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['Field']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:tenacity", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.actions", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['WriteCode']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"WriteCode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.actions.action", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['Action']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.const", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILENAME\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['CODE_PLAN_AND_CHANGE_FILENAME', 'REQUIREMENT_FILENAME']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"CODE_PLAN_AND_CHANGE_FILENAME\",\"REQUIREMENT_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.logs", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['logger']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.schema", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['CodingContext']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodingContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:module:metagpt.utils.common", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_review.py:names:['CodeParser']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:_set_result", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/write_teaching_plan.py:WriteTeachingPlanPart:__repr__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:ast.Constant:\n@Time : 2023/7/27\n@Author : mashenquan\n@File : write_teaching_plan.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/7/27\\n@Author : mashenquan\\n@File : write_teaching_plan.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:names:['Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:module:metagpt.actions", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:names:['Action']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:module:metagpt.context", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:names:['Context']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.context\",\"names\":[\"Context\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:module:metagpt.logs", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_teaching_plan.py:names:['logger']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py", "target": "python"}, {"predicate": "has_function", "source": "metagpt/actions/project_management_an.py", "target": "metagpt/actions/project_management_an.py:main"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:main", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:main", "target": "{\"lineno\":124,\"end_lineno\":128,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"main\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REQUIRED_PYTHON_PACKAGES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REQUIRED_PYTHON_PACKAGES", "target": "{\"lineno\":13,\"end_lineno\":18,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIRED_PYTHON_PACKAGES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REQUIRED_OTHER_LANGUAGE_PACKAGES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REQUIRED_OTHER_LANGUAGE_PACKAGES", "target": "{\"lineno\":20,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"REQUIRED_OTHER_LANGUAGE_PACKAGES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:LOGIC_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:LOGIC_ANALYSIS", "target": "{\"lineno\":27,\"end_lineno\":36,\"type_name\":\"ast.Assign\",\"tokens\":[\"LOGIC_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_LOGIC_ANALYSIS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_LOGIC_ANALYSIS", "target": "{\"lineno\":38,\"end_lineno\":50,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_LOGIC_ANALYSIS\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:TASK_LIST", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:TASK_LIST", "target": "{\"lineno\":52,\"end_lineno\":57,\"type_name\":\"ast.Assign\",\"tokens\":[\"TASK_LIST\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_TASK_LIST", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_TASK_LIST", "target": "{\"lineno\":59,\"end_lineno\":66,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_TASK_LIST\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:FULL_API_SPEC", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:FULL_API_SPEC", "target": "{\"lineno\":68,\"end_lineno\":74,\"type_name\":\"ast.Assign\",\"tokens\":[\"FULL_API_SPEC\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:SHARED_KNOWLEDGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:SHARED_KNOWLEDGE", "target": "{\"lineno\":76,\"end_lineno\":81,\"type_name\":\"ast.Assign\",\"tokens\":[\"SHARED_KNOWLEDGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_SHARED_KNOWLEDGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_SHARED_KNOWLEDGE", "target": "{\"lineno\":83,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_SHARED_KNOWLEDGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:ANYTHING_UNCLEAR_PM", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:ANYTHING_UNCLEAR_PM", "target": "{\"lineno\":93,\"end_lineno\":98,\"type_name\":\"ast.Assign\",\"tokens\":[\"ANYTHING_UNCLEAR_PM\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:NODES", "target": "{\"lineno\":100,\"end_lineno\":108,\"type_name\":\"ast.Assign\",\"tokens\":[\"NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_NODES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_NODES", "target": "{\"lineno\":110,\"end_lineno\":118,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_NODES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:PM_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:PM_NODE", "target": "{\"lineno\":120,\"end_lineno\":120,\"type_name\":\"ast.Assign\",\"tokens\":[\"PM_NODE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management_an.py:REFINED_PM_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:REFINED_PM_NODE", "target": "{\"lineno\":121,\"end_lineno\":121,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_PM_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:ast.Constant:\n@Time : 2023/12/14 15:28\n@Author : alexanderwu\n@File : project_management_an.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/14 15:28\\n@Author : alexanderwu\\n@File : project_management_an.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:names:['List']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:module:metagpt.actions.action_node", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:names:['ActionNode']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:module:metagpt.logs", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:names:['logger']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management_an.py:__name__:__main__", "target": "{\"lineno\":131,\"end_lineno\":132,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:_update_tasks", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:_run_new_tasks", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:_merge", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:WriteTasks:_update_requirements", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/project_management.py:NEW_REQ_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:NEW_REQ_TEMPLATE", "target": "{\"lineno\":23,\"end_lineno\":29,\"type_name\":\"ast.Assign\",\"tokens\":[\"NEW_REQ_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:ast.Constant:\n@Time : 2023/5/11 19:12\n@Author : alexanderwu\n@File : project_management.py\n@Modified By: mashenquan, 2023/11/27.\n 1. Divide the context into three components: legacy code, unit test code, and console log.\n 2. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\n 3. According to the design in Section 2.2.3.5.4 of RFC 135, add incremental iteration functionality.\n", "target": "{\"lineno\":3,\"end_lineno\":11,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:12\\n@Author : alexanderwu\\n@File : project_management.py\\n@Modified By: mashenquan, 2023/11/27.\\n 1. Divide the context into three components: legacy code, unit test code, and console log.\\n 2. Move the document storage operations related to WritePRD from the save operation of WriteDesign.\\n 3. According to the design in Section 2.2.3.5.4 of RFC 135, add incremental iteration functionality.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:json", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:typing", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['Optional']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.actions.action", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['Action']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.actions.action_output", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['ActionOutput']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_output\",\"names\":[\"ActionOutput\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.actions.project_management_an", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"PM_NODE\",\"REFINED_PM_NODE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['PM_NODE', 'REFINED_PM_NODE']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.project_management_an\",\"names\":[\"PM_NODE\",\"REFINED_PM_NODE\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.const", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PACKAGE_REQUIREMENTS_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['PACKAGE_REQUIREMENTS_FILENAME']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"PACKAGE_REQUIREMENTS_FILENAME\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:module:metagpt.schema", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/project_management.py:names:['Document', 'Documents']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"Document\",\"Documents\"]}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:__str__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:__repr__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_compile_f", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_aask_v1", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_req", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:ActionNode:_makeup_nodes_output_with_comment", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:dict_to_markdown", "target": "function"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:dict_to_markdown", "target": "{\"lineno\":115,\"end_lineno\":119,\"type_name\":\"ast.FunctionDef\",\"tokens\":[\"dict_to_markdown\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:TAG", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:TAG", "target": "{\"lineno\":37,\"end_lineno\":37,\"type_name\":\"ast.Assign\",\"tokens\":[\"TAG\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:LANGUAGE_CONSTRAINT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:LANGUAGE_CONSTRAINT", "target": "{\"lineno\":39,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"LANGUAGE_CONSTRAINT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:FORMAT_CONSTRAINT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:FORMAT_CONSTRAINT", "target": "{\"lineno\":40,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"FORMAT_CONSTRAINT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:SIMPLE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:SIMPLE_TEMPLATE", "target": "{\"lineno\":43,\"end_lineno\":60,\"type_name\":\"ast.Assign\",\"tokens\":[\"SIMPLE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:REVIEW_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:REVIEW_TEMPLATE", "target": "{\"lineno\":62,\"end_lineno\":90,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVIEW_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/action_node.py:REVISE_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:REVISE_TEMPLATE", "target": "{\"lineno\":92,\"end_lineno\":112,\"type_name\":\"ast.Assign\",\"tokens\":[\"REVISE_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:ast.Constant:\n@Time : 2023/12/11 18:45\n@Author : alexanderwu\n@File : action_node.py\n\nNOTE: You should use typing.List instead of list to do type annotation. Because in the markdown extraction process,\n we can use typing to extract the type of the node, but we cannot use built-in list to extract.\n", "target": "{\"lineno\":3,\"end_lineno\":10,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/11 18:45\\n@Author : alexanderwu\\n@File : action_node.py\\n\\nNOTE: You should use typing.List instead of list to do type annotation. Because in the markdown extraction process,\\n we can use typing to extract the type of the node, but we cannot use built-in list to extract.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:json", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"json\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:enum", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['Enum']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:typing", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"List\",\"Optional\",\"Tuple\",\"Type\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['Any', 'Dict', 'List', 'Optional', 'Tuple', 'Type', 'Union']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"Dict\",\"List\",\"Optional\",\"Tuple\",\"Type\",\"Union\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:pydantic", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"create_model\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['BaseModel', 'Field', 'create_model', 'model_validator']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\",\"create_model\",\"model_validator\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:tenacity", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['retry', 'stop_after_attempt', 'wait_random_exponential']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"tenacity\",\"names\":[\"retry\",\"stop_after_attempt\",\"wait_random_exponential\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.actions.action_outcls_registry", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_outcls_registry\",\"names\":[\"register_action_outcls\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['register_action_outcls']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_outcls_registry\",\"names\":[\"register_action_outcls\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.llm", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['BaseLLM']", "target": "{\"lineno\":19,\"end_lineno\":19,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.logs", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['logger']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.provider.postprocess.llm_output_postprocess", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.llm_output_postprocess\",\"names\":[\"llm_output_postprocess\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['llm_output_postprocess']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.postprocess.llm_output_postprocess\",\"names\":[\"llm_output_postprocess\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.utils.common", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"general_after_log\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['OutputParser', 'general_after_log']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\",\"general_after_log\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:module:metagpt.utils.human_interaction", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.human_interaction\",\"names\":[\"HumanInteraction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:names:['HumanInteraction']", "target": "{\"lineno\":23,\"end_lineno\":23,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.human_interaction\",\"names\":[\"HumanInteraction\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/action_node.py:__name__:__main__", "target": "{\"lineno\":684,\"end_lineno\":693,\"type_name\":\"ast.If\",\"tokens\":[\"__name__\",\"__main__\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE", "target": "{\"lineno\":16,\"end_lineno\":109,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE_CONTEXT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:CODE_PLAN_AND_CHANGE_CONTEXT", "target": "{\"lineno\":111,\"end_lineno\":126,\"type_name\":\"ast.Assign\",\"tokens\":[\"CODE_PLAN_AND_CHANGE_CONTEXT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:REFINED_TEMPLATE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:REFINED_TEMPLATE", "target": "{\"lineno\":128,\"end_lineno\":180,\"type_name\":\"ast.Assign\",\"tokens\":[\"REFINED_TEMPLATE\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/actions/write_code_plan_and_change_an.py:WRITE_CODE_PLAN_AND_CHANGE_NODE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:WRITE_CODE_PLAN_AND_CHANGE_NODE", "target": "{\"lineno\":182,\"end_lineno\":182,\"type_name\":\"ast.Assign\",\"tokens\":[\"WRITE_CODE_PLAN_AND_CHANGE_NODE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:ast.Constant:\n@Time : 2023/12/26\n@Author : mannaandpoem\n@File : write_code_plan_and_change_an.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/12/26\\n@Author : mannaandpoem\\n@File : write_code_plan_and_change_an.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:os", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:names:['Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.actions.action", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:names:['Action']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.actions.action_node", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:names:['ActionNode']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action_node\",\"names\":[\"ActionNode\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:module:metagpt.schema", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/write_code_plan_and_change_an.py:names:['CodePlanAndChangeContext']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.schema\",\"names\":[\"CodePlanAndChangeContext\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:ast.Constant:\n@Time : 2023/5/11 19:31\n@Author : alexanderwu\n@File : design_api_review.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/11 19:31\\n@Author : alexanderwu\\n@File : design_api_review.py\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:module:typing", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:names:['Optional']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:module:metagpt.actions.action", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/design_api_review.py:names:['Action']", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions.action\",\"names\":[\"Action\"]}}"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_check_file_type", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_unzip", "target": "class_method"}, {"predicate": "is", "source": "metagpt/actions/invoice_ocr.py:InvoiceOCR:_ocr", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:ast.Constant:\n@Time : 2023/9/21 18:10:20\n@Author : Stitch-z\n@File : invoice_ocr.py\n@Describe : Actions of the invoice ocr assistant.\n", "target": "{\"lineno\":4,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 18:10:20\\n@Author : Stitch-z\\n@File : invoice_ocr.py\\n@Describe : Actions of the invoice ocr assistant.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:os", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Import\",\"tokens\":[\"os\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:zipfile", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.Import\",\"tokens\":[\"zipfile\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:datetime", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['datetime']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"datetime\",\"names\":[\"datetime\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:pathlib", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['Path']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pathlib\",\"names\":[\"Path\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:typing", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['Optional']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:pandas as pd", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.Import\",\"tokens\":[\"pandas as pd\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:paddleocr", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"paddleocr\",\"names\":[\"PaddleOCR\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['PaddleOCR']", "target": "{\"lineno\":18,\"end_lineno\":18,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"paddleocr\",\"names\":[\"PaddleOCR\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.actions", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['Action']", "target": "{\"lineno\":20,\"end_lineno\":20,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.actions\",\"names\":[\"Action\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.const", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"INVOICE_OCR_TABLE_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['INVOICE_OCR_TABLE_PATH']", "target": "{\"lineno\":21,\"end_lineno\":21,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.const\",\"names\":[\"INVOICE_OCR_TABLE_PATH\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.logs", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['logger']", "target": "{\"lineno\":22,\"end_lineno\":22,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.prompts.invoice_ocr", "target": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\",\"REPLY_OCR_QUESTION_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['EXTRACT_OCR_MAIN_INFO_PROMPT', 'REPLY_OCR_QUESTION_PROMPT']", "target": "{\"lineno\":23,\"end_lineno\":26,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.prompts.invoice_ocr\",\"names\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\",\"REPLY_OCR_QUESTION_PROMPT\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.utils.common", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['OutputParser']", "target": "{\"lineno\":27,\"end_lineno\":27,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"OutputParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:module:metagpt.utils.file", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/actions/invoice_ocr.py:names:['File']", "target": "{\"lineno\":28,\"end_lineno\":28,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.file\",\"names\":[\"File\"]}}"}, {"predicate": "is", "source": "metagpt/prompts/sales.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/sales.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/sales.py:SALES_ASSISTANT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/sales.py:SALES_ASSISTANT", "target": "{\"lineno\":10,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"SALES_ASSISTANT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/sales.py:SALES", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/sales.py:SALES", "target": "{\"lineno\":33,\"end_lineno\":55,\"type_name\":\"ast.Assign\",\"tokens\":[\"SALES\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/sales.py:conversation_stages", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/sales.py:conversation_stages", "target": "{\"lineno\":57,\"end_lineno\":65,\"type_name\":\"ast.Assign\",\"tokens\":[\"conversation_stages\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/sales.py:ast.Constant:\n@Time : 2023/5/8 15:29\n@Author : alexanderwu\n@File : sales.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/8 15:29\\n@Author : alexanderwu\\n@File : sales.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/__init__.py", "target": "python"}, {"predicate": "has_page_info", "source": "metagpt/prompts/__init__.py:ast.Constant:\n@Time : 2023/5/30 09:51\n@Author : alexanderwu\n@File : __init__.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/5/30 09:51\\n@Author : alexanderwu\\n@File : __init__.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT", "target": "{\"lineno\":11,\"end_lineno\":21,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_2", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_2", "target": "{\"lineno\":28,\"end_lineno\":40,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_2\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_3", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_3", "target": "{\"lineno\":43,\"end_lineno\":54,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_3\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_4", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_4", "target": "{\"lineno\":57,\"end_lineno\":69,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_4\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_5", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:SUMMARIZE_PROMPT_5", "target": "{\"lineno\":72,\"end_lineno\":92,\"type_name\":\"ast.Assign\",\"tokens\":[\"SUMMARIZE_PROMPT_5\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/summarize.py:ast.Constant:\n@Time : 2023/6/19 23:07\n@Author : alexanderwu\n@File : summarize.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/19 23:07\\n@Author : alexanderwu\\n@File : summarize.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/metagpt_sample.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/metagpt_sample.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/metagpt_sample.py:METAGPT_SAMPLE", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/metagpt_sample.py:METAGPT_SAMPLE", "target": "{\"lineno\":9,\"end_lineno\":39,\"type_name\":\"ast.Assign\",\"tokens\":[\"METAGPT_SAMPLE\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/metagpt_sample.py:ast.Constant:\n@Time : 2023/6/7 20:29\n@Author : alexanderwu\n@File : metagpt_sample.py\n", "target": "{\"lineno\":3,\"end_lineno\":7,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/6/7 20:29\\n@Author : alexanderwu\\n@File : metagpt_sample.py\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py:COMMON_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tutorial_assistant.py:COMMON_PROMPT", "target": "{\"lineno\":10,\"end_lineno\":13,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMON_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py:DIRECTORY_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tutorial_assistant.py:DIRECTORY_PROMPT", "target": "{\"lineno\":15,\"end_lineno\":25,\"type_name\":\"ast.Assign\",\"tokens\":[\"DIRECTORY_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/tutorial_assistant.py:CONTENT_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tutorial_assistant.py:CONTENT_PROMPT", "target": "{\"lineno\":27,\"end_lineno\":45,\"type_name\":\"ast.Assign\",\"tokens\":[\"CONTENT_PROMPT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/tutorial_assistant.py:ast.Constant:\n@Time : 2023/9/4 15:40:40\n@Author : Stitch-z\n@File : tutorial_assistant.py\n@Describe : Tutorial Assistant's prompt templates.\n", "target": "{\"lineno\":3,\"end_lineno\":8,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/4 15:40:40\\n@Author : Stitch-z\\n@File : tutorial_assistant.py\\n@Describe : Tutorial Assistant's prompt templates.\\n\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py", "target": "python"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py:COMMON_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:COMMON_PROMPT", "target": "{\"lineno\":11,\"end_lineno\":11,\"type_name\":\"ast.Assign\",\"tokens\":[\"COMMON_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py:EXTRACT_OCR_MAIN_INFO_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:EXTRACT_OCR_MAIN_INFO_PROMPT", "target": "{\"lineno\":13,\"end_lineno\":27,\"type_name\":\"ast.Assign\",\"tokens\":[\"EXTRACT_OCR_MAIN_INFO_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py:REPLY_OCR_QUESTION_PROMPT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:REPLY_OCR_QUESTION_PROMPT", "target": "{\"lineno\":29,\"end_lineno\":42,\"type_name\":\"ast.Assign\",\"tokens\":[\"REPLY_OCR_QUESTION_PROMPT\"],\"properties\":{}}"}, {"predicate": "is", "source": "metagpt/prompts/invoice_ocr.py:INVOICE_OCR_SUCCESS", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:INVOICE_OCR_SUCCESS", "target": "{\"lineno\":44,\"end_lineno\":44,\"type_name\":\"ast.Assign\",\"tokens\":[\"INVOICE_OCR_SUCCESS\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/prompts/invoice_ocr.py:ast.Constant:\n@Time : 2023/9/21 16:30:25\n@Author : Stitch-z\n@File : invoice_ocr.py\n@Describe : Prompts of the invoice ocr assistant.\n", "target": "{\"lineno\":4,\"end_lineno\":9,\"type_name\":\"ast.Expr\",\"tokens\":[\"ast.Constant\",\"\\n@Time : 2023/9/21 16:30:25\\n@Author : Stitch-z\\n@File : invoice_ocr.py\\n@Describe : Prompts of the invoice ocr assistant.\\n\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:module:enum", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:names:['Enum']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"enum\",\"names\":[\"Enum\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:module:pydantic", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:names:['BaseModel', 'Field']", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:module:metagpt.strategy.base", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"BaseEvaluator\",\"BaseParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot_schema.py:names:['BaseEvaluator', 'BaseParser']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"BaseEvaluator\",\"BaseParser\"]}}"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:ThoughtSolverBase:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:BFSSolver:_bfs_build", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:DFSSolver:_dfs", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:__init__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:TreeofThought:_initialize_solver", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/tot.py:OUTPUT_FORMAT", "target": "global_variable"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:OUTPUT_FORMAT", "target": "{\"lineno\":19,\"end_lineno\":30,\"type_name\":\"ast.Assign\",\"tokens\":[\"OUTPUT_FORMAT\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:__future__", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['annotations']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"__future__\",\"names\":[\"annotations\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:asyncio", "target": "{\"lineno\":7,\"end_lineno\":7,\"type_name\":\"ast.Import\",\"tokens\":[\"asyncio\"],\"properties\":{}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:typing", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['Any', 'List', 'Optional']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"Any\",\"List\",\"Optional\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:pydantic", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['BaseModel', 'ConfigDict', 'Field']", "target": "{\"lineno\":10,\"end_lineno\":10,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\",\"ConfigDict\",\"Field\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.llm", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['LLM']", "target": "{\"lineno\":12,\"end_lineno\":12,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.llm\",\"names\":[\"LLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.logs", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['logger']", "target": "{\"lineno\":13,\"end_lineno\":13,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.logs\",\"names\":[\"logger\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.provider.base_llm", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['BaseLLM']", "target": "{\"lineno\":14,\"end_lineno\":14,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.provider.base_llm\",\"names\":[\"BaseLLM\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.strategy.base", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"ThoughtNode\",\"ThoughtTree\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['ThoughtNode', 'ThoughtTree']", "target": "{\"lineno\":15,\"end_lineno\":15,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.base\",\"names\":[\"ThoughtNode\",\"ThoughtTree\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.strategy.tot_schema", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.tot_schema\",\"names\":[\"MethodSelect\",\"Strategy\",\"ThoughtSolverConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['MethodSelect', 'Strategy', 'ThoughtSolverConfig']", "target": "{\"lineno\":16,\"end_lineno\":16,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.strategy.tot_schema\",\"names\":[\"MethodSelect\",\"Strategy\",\"ThoughtSolverConfig\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:module:metagpt.utils.common", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/tot.py:names:['CodeParser']", "target": "{\"lineno\":17,\"end_lineno\":17,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"metagpt.utils.common\",\"names\":[\"CodeParser\"]}}"}, {"predicate": "is", "source": "metagpt/strategy/__init__.py", "target": "source_code"}, {"predicate": "is", "source": "metagpt/strategy/__init__.py", "target": "python"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseParser:__call__", "target": "class_method"}, {"predicate": "is", "source": "metagpt/strategy/base.py:BaseEvaluator:__call__", "target": "class_method"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:module:abc", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:names:['ABC']", "target": "{\"lineno\":5,\"end_lineno\":5,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"abc\",\"names\":[\"ABC\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:module:typing", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:names:['List']", "target": "{\"lineno\":6,\"end_lineno\":6,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"typing\",\"names\":[\"List\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:module:anytree", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anytree\",\"names\":[\"Node\",\"RenderTree\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:names:['Node', 'RenderTree']", "target": "{\"lineno\":8,\"end_lineno\":8,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"anytree\",\"names\":[\"Node\",\"RenderTree\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:module:pydantic", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}, {"predicate": "has_page_info", "source": "metagpt/strategy/base.py:names:['BaseModel']", "target": "{\"lineno\":9,\"end_lineno\":9,\"type_name\":\"ast.ImportFrom\",\"tokens\":[],\"properties\":{\"module\":\"pydantic\",\"names\":[\"BaseModel\"]}}"}]} \ No newline at end of file diff --git a/tests/metagpt/actions/di/test_ask_review.py b/tests/metagpt/actions/di/test_ask_review.py index d49ad176a4..77fb06ae1d 100644 --- a/tests/metagpt/actions/di/test_ask_review.py +++ b/tests/metagpt/actions/di/test_ask_review.py @@ -1,6 +1,6 @@ import pytest -from metagpt.actions.di.ask_review import AskReview +from metagpt.actions.ask_review import AskReview @pytest.mark.asyncio diff --git a/tests/metagpt/actions/di/test_execute_nb_code.py b/tests/metagpt/actions/di/test_execute_nb_code.py index b206046d7c..ef74e876e5 100644 --- a/tests/metagpt/actions/di/test_execute_nb_code.py +++ b/tests/metagpt/actions/di/test_execute_nb_code.py @@ -1,6 +1,6 @@ import pytest -from metagpt.actions.di.execute_nb_code import ExecuteNbCode +from metagpt.actions.execute_nb_code import ExecuteNbCode @pytest.mark.asyncio diff --git a/tests/metagpt/actions/di/test_write_analysis_code.py b/tests/metagpt/actions/di/test_write_analysis_code.py index 2996f31f70..a5ba64c191 100644 --- a/tests/metagpt/actions/di/test_write_analysis_code.py +++ b/tests/metagpt/actions/di/test_write_analysis_code.py @@ -1,7 +1,7 @@ import pytest -from metagpt.actions.di.write_analysis_code import WriteAnalysisCode -from metagpt.schema import Message +from metagpt.actions.write_analysis_code import WriteAnalysisCode +from metagpt.core.schema import Message @pytest.mark.asyncio diff --git a/tests/metagpt/actions/di/test_write_plan.py b/tests/metagpt/actions/di/test_write_plan.py index cad0c8a71d..bb681487f9 100644 --- a/tests/metagpt/actions/di/test_write_plan.py +++ b/tests/metagpt/actions/di/test_write_plan.py @@ -1,12 +1,12 @@ import pytest -from metagpt.actions.di.write_plan import ( +from metagpt.actions.write_plan import ( Plan, Task, WritePlan, precheck_update_plan_from_rsp, ) -from metagpt.schema import Message +from metagpt.core.schema import Message def test_precheck_update_plan_from_rsp(): diff --git a/tests/metagpt/actions/requirement_analysis/requirement/test_pic2txt.py b/tests/metagpt/actions/requirement_analysis/requirement/test_pic2txt.py index e5875b6aca..b644ca776b 100644 --- a/tests/metagpt/actions/requirement_analysis/requirement/test_pic2txt.py +++ b/tests/metagpt/actions/requirement_analysis/requirement/test_pic2txt.py @@ -1,8 +1,8 @@ import pytest from metagpt.actions.requirement_analysis.requirement.pic2txt import Pic2Txt -from metagpt.const import TEST_DATA_PATH -from metagpt.utils.common import aread +from metagpt.core.const import TEST_DATA_PATH +from metagpt.core.utils.common import aread @pytest.mark.asyncio diff --git a/tests/metagpt/actions/test_action.py b/tests/metagpt/actions/test_action.py index 97818ca225..87786c40b9 100644 --- a/tests/metagpt/actions/test_action.py +++ b/tests/metagpt/actions/test_action.py @@ -7,7 +7,10 @@ """ import pytest -from metagpt.actions import Action, ActionType, WritePRD, WriteTest +from metagpt.actions import ActionType +from metagpt.actions.write_prd import WritePRD +from metagpt.actions.write_test import WriteTest +from metagpt.core.actions import Action def test_action_repr(): diff --git a/tests/metagpt/actions/test_action_multi_llm.py b/tests/metagpt/actions/test_action_multi_llm.py index fe8c4462f4..f36add2727 100644 --- a/tests/metagpt/actions/test_action_multi_llm.py +++ b/tests/metagpt/actions/test_action_multi_llm.py @@ -1,9 +1,9 @@ -from metagpt.actions.action import Action -from metagpt.config2 import Config -from metagpt.const import TEST_DATA_PATH -from metagpt.context import Context -from metagpt.provider.llm_provider_registry import create_llm_instance -from metagpt.roles.role import Role +from metagpt.core.actions import Action +from metagpt.core.config2 import Config +from metagpt.core.const import TEST_DATA_PATH +from metagpt.core.context import Context +from metagpt.core.provider.llm_provider_registry import create_llm_instance +from metagpt.core.roles.role import Role def test_set_llm(): diff --git a/tests/metagpt/actions/test_action_node.py b/tests/metagpt/actions/test_action_node.py index 3c0f3bbe9d..bd597edc6b 100644 --- a/tests/metagpt/actions/test_action_node.py +++ b/tests/metagpt/actions/test_action_node.py @@ -11,14 +11,14 @@ import pytest from pydantic import BaseModel, Field, ValidationError -from metagpt.actions import Action -from metagpt.actions.action_node import ActionNode, ReviewMode, ReviseMode +from metagpt.core.actions import Action +from metagpt.core.actions.action_node import ActionNode, ReviewMode, ReviseMode +from metagpt.core.llm import LLM +from metagpt.core.roles import Role +from metagpt.core.schema import Message +from metagpt.core.utils.common import encode_image from metagpt.environment import Environment -from metagpt.llm import LLM -from metagpt.roles import Role -from metagpt.schema import Message from metagpt.team import Team -from metagpt.utils.common import encode_image @pytest.mark.asyncio diff --git a/tests/metagpt/actions/test_action_outcls_registry.py b/tests/metagpt/actions/test_action_outcls_registry.py index eac0ba4d93..1a01a8eba8 100644 --- a/tests/metagpt/actions/test_action_outcls_registry.py +++ b/tests/metagpt/actions/test_action_outcls_registry.py @@ -4,7 +4,7 @@ from typing import List -from metagpt.actions.action_node import ActionNode +from metagpt.core.actions.action_node import ActionNode def test_action_outcls_registry(): diff --git a/tests/metagpt/actions/test_debug_error.py b/tests/metagpt/actions/test_debug_error.py index c88818bbd3..06fe0aa54c 100644 --- a/tests/metagpt/actions/test_debug_error.py +++ b/tests/metagpt/actions/test_debug_error.py @@ -10,8 +10,8 @@ import pytest -from metagpt.actions.debug_error import DebugError -from metagpt.schema import RunCodeContext, RunCodeResult +from metagpt.actions import DebugError +from metagpt.core.schema import RunCodeContext, RunCodeResult CODE_CONTENT = ''' from typing import List diff --git a/tests/metagpt/actions/test_design_api.py b/tests/metagpt/actions/test_design_api.py index 314ff54e7a..83163a2543 100644 --- a/tests/metagpt/actions/test_design_api.py +++ b/tests/metagpt/actions/test_design_api.py @@ -11,9 +11,9 @@ import pytest from metagpt.actions.design_api import WriteDesign -from metagpt.const import DEFAULT_WORKSPACE_ROOT, METAGPT_ROOT -from metagpt.logs import logger -from metagpt.schema import AIMessage, Message +from metagpt.core.const import DEFAULT_WORKSPACE_ROOT, METAGPT_ROOT +from metagpt.core.logs import logger +from metagpt.core.schema import AIMessage, Message from metagpt.utils.project_repo import ProjectRepo from tests.data.incremental_dev_project.mock import DESIGN_SAMPLE, REFINED_PRD_JSON diff --git a/tests/metagpt/actions/test_design_api_an.py b/tests/metagpt/actions/test_design_api_an.py index 4ed3cb3621..e5a3a6598a 100644 --- a/tests/metagpt/actions/test_design_api_an.py +++ b/tests/metagpt/actions/test_design_api_an.py @@ -8,10 +8,10 @@ import pytest from openai._models import BaseModel -from metagpt.actions.action_node import ActionNode, dict_to_markdown from metagpt.actions.design_api import NEW_REQ_TEMPLATE from metagpt.actions.design_api_an import REFINED_DESIGN_NODE -from metagpt.llm import LLM +from metagpt.core.actions.action_node import ActionNode, dict_to_markdown +from metagpt.core.llm import LLM from tests.data.incremental_dev_project.mock import ( DESIGN_SAMPLE, REFINED_DESIGN_JSON, diff --git a/tests/metagpt/actions/test_design_api_review.py b/tests/metagpt/actions/test_design_api_review.py deleted file mode 100644 index a648dba3fb..0000000000 --- a/tests/metagpt/actions/test_design_api_review.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/5/11 19:31 -@Author : alexanderwu -@File : test_design_api_review.py -""" -import pytest - -from metagpt.actions.design_api_review import DesignReview - - -@pytest.mark.asyncio -async def test_design_api_review(context): - prd = "我们需要一个音乐播放器,它应该有播放、暂停、上一曲、下一曲等功能。" - api_design = """ -数据结构: -1. Song: 包含歌曲信息,如标题、艺术家等。 -2. Playlist: 包含一系列歌曲。 - -API列表: -1. play(song: Song): 开始播放指定的歌曲。 -2. pause(): 暂停当前播放的歌曲。 -3. next(): 跳到播放列表的下一首歌曲。 -4. previous(): 跳到播放列表的上一首歌曲。 -""" - _ = "API设计看起来非常合理,满足了PRD中的所有需求。" - - design_api_review = DesignReview(context=context) - - result = await design_api_review.run(prd, api_design) - - _ = f"以下是产品需求文档(PRD):\n\n{prd}\n\n以下是基于这个PRD设计的API列表:\n\n{api_design}\n\n请审查这个API设计是否满足PRD的需求,以及是否符合良好的设计实践。" - # mock_llm.ask.assert_called_once_with(prompt) - assert len(result) > 0 diff --git a/tests/metagpt/actions/test_extract_readme.py b/tests/metagpt/actions/test_extract_readme.py index a3428d4d5e..8b4d658343 100644 --- a/tests/metagpt/actions/test_extract_readme.py +++ b/tests/metagpt/actions/test_extract_readme.py @@ -5,7 +5,7 @@ import pytest from metagpt.actions.extract_readme import ExtractReadMe -from metagpt.llm import LLM +from metagpt.core.llm import LLM @pytest.mark.asyncio diff --git a/tests/metagpt/actions/test_generate_questions.py b/tests/metagpt/actions/test_generate_questions.py deleted file mode 100644 index 6adb2e6172..0000000000 --- a/tests/metagpt/actions/test_generate_questions.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/9/13 00:26 -@Author : fisherdeng -@File : test_generate_questions.py -""" -import pytest - -from metagpt.actions.generate_questions import GenerateQuestions -from metagpt.logs import logger - -msg = """ -## topic -如何做一个生日蛋糕 - -## record -我认为应该先准备好材料,然后再开始做蛋糕。 -""" - - -@pytest.mark.asyncio -async def test_generate_questions(context): - action = GenerateQuestions(context=context) - rsp = await action.run(msg) - logger.info(f"{rsp.content=}") - - assert "Questions" in rsp.content - assert "1." in rsp.content diff --git a/tests/metagpt/actions/test_import_repo.py b/tests/metagpt/actions/test_import_repo.py index d498be0395..13d756f835 100644 --- a/tests/metagpt/actions/test_import_repo.py +++ b/tests/metagpt/actions/test_import_repo.py @@ -4,8 +4,8 @@ import pytest from metagpt.actions.import_repo import ImportRepo -from metagpt.context import Context -from metagpt.utils.common import list_files +from metagpt.core.context import Context +from metagpt.core.utils.common import list_files @pytest.mark.asyncio diff --git a/tests/metagpt/actions/test_invoice_ocr.py b/tests/metagpt/actions/test_invoice_ocr.py deleted file mode 100644 index 4df0cf4f81..0000000000 --- a/tests/metagpt/actions/test_invoice_ocr.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python3 -# _*_ coding: utf-8 _*_ - -""" -@Time : 2023/10/09 18:40:34 -@Author : Stitch-z -@File : test_invoice_ocr.py -""" - -from pathlib import Path - -import pytest - -from metagpt.actions.invoice_ocr import GenerateTable, InvoiceOCR, ReplyQuestion -from metagpt.const import TEST_DATA_PATH - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - "invoice_path", - [ - Path("invoices/invoice-3.jpg"), - Path("invoices/invoice-4.zip"), - ], -) -async def test_invoice_ocr(invoice_path: Path, context): - invoice_path = TEST_DATA_PATH / invoice_path - resp = await InvoiceOCR(context=context).run(file_path=Path(invoice_path)) - assert isinstance(resp, list) - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - ("invoice_path", "expected_result"), - [ - (Path("invoices/invoice-1.pdf"), {"收款人": "小明", "城市": "深圳", "总费用/元": 412.00, "开票日期": "2023年02月03日"}), - ], -) -async def test_generate_table(invoice_path: Path, expected_result: dict): - invoice_path = TEST_DATA_PATH / invoice_path - filename = invoice_path.name - ocr_result = await InvoiceOCR().run(file_path=Path(invoice_path)) - table_data = await GenerateTable().run(ocr_results=ocr_result, filename=filename) - assert isinstance(table_data, list) - table_data = table_data[0] - assert expected_result["收款人"] == table_data["收款人"] - assert expected_result["城市"] in table_data["城市"] - assert float(expected_result["总费用/元"]) == float(table_data["总费用/元"]) - assert expected_result["开票日期"] == table_data["开票日期"] - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - ("invoice_path", "query", "expected_result"), - [(Path("invoices/invoice-1.pdf"), "Invoicing date", "2023年02月03日")], -) -async def test_reply_question(invoice_path: Path, query: dict, expected_result: str): - invoice_path = TEST_DATA_PATH / invoice_path - ocr_result = await InvoiceOCR().run(file_path=Path(invoice_path)) - result = await ReplyQuestion().run(query=query, ocr_result=ocr_result) - assert expected_result in result diff --git a/tests/metagpt/actions/test_prepare_documents.py b/tests/metagpt/actions/test_prepare_documents.py index 7ad0dee4ec..19ecf108a9 100644 --- a/tests/metagpt/actions/test_prepare_documents.py +++ b/tests/metagpt/actions/test_prepare_documents.py @@ -9,9 +9,9 @@ import pytest from metagpt.actions.prepare_documents import PrepareDocuments -from metagpt.const import REQUIREMENT_FILENAME -from metagpt.context import Context -from metagpt.schema import Message +from metagpt.core.const import REQUIREMENT_FILENAME +from metagpt.core.context import Context +from metagpt.core.schema import Message @pytest.mark.asyncio diff --git a/tests/metagpt/actions/test_prepare_interview.py b/tests/metagpt/actions/test_prepare_interview.py deleted file mode 100644 index 111f24d5fb..0000000000 --- a/tests/metagpt/actions/test_prepare_interview.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/9/13 00:26 -@Author : fisherdeng -@File : test_generate_questions.py -""" -import pytest - -from metagpt.actions.prepare_interview import PrepareInterview -from metagpt.logs import logger - - -@pytest.mark.asyncio -async def test_prepare_interview(context): - action = PrepareInterview(context=context) - rsp = await action.run("I just graduated and hope to find a job as a Python engineer") - logger.info(f"{rsp.content=}") - - assert "Questions" in rsp.content - assert "1." in rsp.content diff --git a/tests/metagpt/actions/test_project_management.py b/tests/metagpt/actions/test_project_management.py index 26699dea7d..4bff3e39de 100644 --- a/tests/metagpt/actions/test_project_management.py +++ b/tests/metagpt/actions/test_project_management.py @@ -10,9 +10,9 @@ import pytest from metagpt.actions.project_management import WriteTasks -from metagpt.const import METAGPT_ROOT -from metagpt.logs import logger -from metagpt.schema import AIMessage, Message +from metagpt.core.const import METAGPT_ROOT +from metagpt.core.logs import logger +from metagpt.core.schema import AIMessage, Message from metagpt.utils.project_repo import ProjectRepo from tests.data.incremental_dev_project.mock import ( REFINED_DESIGN_JSON, diff --git a/tests/metagpt/actions/test_project_management_an.py b/tests/metagpt/actions/test_project_management_an.py index 6d41109c93..7977a5230d 100644 --- a/tests/metagpt/actions/test_project_management_an.py +++ b/tests/metagpt/actions/test_project_management_an.py @@ -8,10 +8,10 @@ import pytest from openai._models import BaseModel -from metagpt.actions.action_node import ActionNode, dict_to_markdown from metagpt.actions.project_management import NEW_REQ_TEMPLATE from metagpt.actions.project_management_an import PM_NODE, REFINED_PM_NODE -from metagpt.llm import LLM +from metagpt.core.actions.action_node import ActionNode, dict_to_markdown +from metagpt.core.llm import LLM from tests.data.incremental_dev_project.mock import ( REFINED_DESIGN_JSON, REFINED_TASK_JSON, diff --git a/tests/metagpt/actions/test_rebuild_class_view.py b/tests/metagpt/actions/test_rebuild_class_view.py index 3731cd5981..aa22f1872e 100644 --- a/tests/metagpt/actions/test_rebuild_class_view.py +++ b/tests/metagpt/actions/test_rebuild_class_view.py @@ -11,7 +11,7 @@ import pytest from metagpt.actions.rebuild_class_view import RebuildClassView -from metagpt.llm import LLM +from metagpt.core.llm import LLM @pytest.mark.asyncio diff --git a/tests/metagpt/actions/test_rebuild_sequence_view.py b/tests/metagpt/actions/test_rebuild_sequence_view.py index e2827c3342..df2ec12d7b 100644 --- a/tests/metagpt/actions/test_rebuild_sequence_view.py +++ b/tests/metagpt/actions/test_rebuild_sequence_view.py @@ -11,9 +11,9 @@ import pytest from metagpt.actions.rebuild_sequence_view import RebuildSequenceView -from metagpt.const import GRAPH_REPO_FILE_REPO -from metagpt.llm import LLM -from metagpt.utils.common import aread +from metagpt.core.const import GRAPH_REPO_FILE_REPO +from metagpt.core.llm import LLM +from metagpt.core.utils.common import aread from metagpt.utils.git_repository import ChangeType from metagpt.utils.graph_repository import SPO diff --git a/tests/metagpt/actions/test_research.py b/tests/metagpt/actions/test_research.py index ed83ce58c4..7d611b4b27 100644 --- a/tests/metagpt/actions/test_research.py +++ b/tests/metagpt/actions/test_research.py @@ -27,7 +27,7 @@ async def mock_llm_ask(self, prompt: str, system_msgs): elif "sort the remaining search results" in prompt: return "[1,2]" - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", mock_llm_ask) + mocker.patch("metagpt.core.provider.base_llm.BaseLLM.aask", mock_llm_ask) resp = await research.CollectLinks( search_engine=SearchEngine(engine=SearchEngineType.DUCK_DUCK_GO), context=context ).run("The application of MetaGPT") @@ -48,7 +48,7 @@ def rank_func(results): rank_after.append(results) return results - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", mock_collect_links_llm_ask) + mocker.patch("metagpt.core.provider.base_llm.BaseLLM.aask", mock_collect_links_llm_ask) resp = await research.CollectLinks( search_engine=SearchEngine(engine=SearchEngineType.DUCK_DUCK_GO), rank_func=rank_func, @@ -64,7 +64,7 @@ async def test_web_browse_and_summarize(mocker, context): async def mock_llm_ask(*args, **kwargs): return "metagpt" - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", mock_llm_ask) + mocker.patch("metagpt.core.provider.base_llm.BaseLLM.aask", mock_llm_ask) url = "https://github.com/geekan/MetaGPT" url2 = "https://github.com/trending" query = "What's new in metagpt" @@ -80,7 +80,7 @@ async def mock_llm_ask(*args, **kwargs): async def mock_llm_ask(*args, **kwargs): return "Not relevant." - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", mock_llm_ask) + mocker.patch("metagpt.core.provider.base_llm.BaseLLM.aask", mock_llm_ask) resp = await research.WebBrowseAndSummarize(context=context).run(url, query=query) assert len(resp) == 1 @@ -97,7 +97,7 @@ async def mock_llm_ask(*args, **kwargs): data = f"# Research Report\n## Introduction\n{args} {kwargs}" return data - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", mock_llm_ask) + mocker.patch("metagpt.core.provider.base_llm.BaseLLM.aask", mock_llm_ask) content = ( "MetaGPT takes a one line requirement as input and " "outputs user stories / competitive analysis / requirements / data structures / APIs / documents, etc." diff --git a/tests/metagpt/actions/test_run_code.py b/tests/metagpt/actions/test_run_code.py index 2ec8a7748b..18f152b67a 100644 --- a/tests/metagpt/actions/test_run_code.py +++ b/tests/metagpt/actions/test_run_code.py @@ -9,7 +9,7 @@ import pytest from metagpt.actions.run_code import RunCode -from metagpt.schema import RunCodeContext +from metagpt.core.schema import RunCodeContext @pytest.mark.asyncio diff --git a/tests/metagpt/actions/test_skill_action.py b/tests/metagpt/actions/test_skill_action.py deleted file mode 100644 index d667d6d707..0000000000 --- a/tests/metagpt/actions/test_skill_action.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/9/19 -@Author : mashenquan -@File : test_skill_action.py -@Desc : Unit tests. -""" -import pytest - -from metagpt.actions.skill_action import ArgumentsParingAction, SkillAction -from metagpt.learn.skill_loader import Example, Parameter, Returns, Skill - - -class TestSkillAction: - skill = Skill( - name="text_to_image", - description="Create a drawing based on the text.", - id="text_to_image.text_to_image", - x_prerequisite={ - "configurations": { - "OPENAI_API_KEY": { - "type": "string", - "description": "OpenAI API key, For more details, checkout: `https://platform.openai.com/account/api-keys`", - }, - "metagpt_tti_url": {"type": "string", "description": "Model url."}, - }, - "required": {"oneOf": ["OPENAI_API_KEY", "metagpt_tti_url"]}, - }, - parameters={ - "text": Parameter(type="string", description="The text used for image conversion."), - "size_type": Parameter(type="string", description="size type"), - }, - examples=[ - Example(ask="Draw a girl", answer='text_to_image(text="Draw a girl", size_type="512x512")'), - Example(ask="Draw an apple", answer='text_to_image(text="Draw an apple", size_type="512x512")'), - ], - returns=Returns(type="string", format="base64"), - ) - - @pytest.mark.asyncio - async def test_parser(self): - args = ArgumentsParingAction.parse_arguments( - skill_name="text_to_image", txt='`text_to_image(text="Draw an apple", size_type="512x512")`' - ) - assert args.get("text") == "Draw an apple" - assert args.get("size_type") == "512x512" - - @pytest.mark.asyncio - async def test_parser_action(self, mocker, context): - # mock - mocker.patch("metagpt.learn.text_to_image", return_value="https://mock.com/xxx") - - parser_action = ArgumentsParingAction(skill=self.skill, ask="Draw an apple", context=context) - rsp = await parser_action.run() - assert rsp - assert parser_action.args - assert parser_action.args.get("text") == "Draw an apple" - assert parser_action.args.get("size_type") == "512x512" - - action = SkillAction(skill=self.skill, args=parser_action.args, context=context) - rsp = await action.run() - assert rsp - assert "image/png;base64," in rsp.content or "http" in rsp.content - - @pytest.mark.parametrize( - ("skill_name", "txt", "want"), - [ - ("skill1", 'skill1(a="1", b="2")', {"a": "1", "b": "2"}), - ("skill1", '(a="1", b="2")', None), - ("skill1", 'skill1(a="1", b="2"', None), - ], - ) - def test_parse_arguments(self, skill_name, txt, want): - args = ArgumentsParingAction.parse_arguments(skill_name, txt) - assert args == want - - @pytest.mark.asyncio - async def test_find_and_call_function_error(self): - with pytest.raises(ValueError): - await SkillAction.find_and_call_function("dummy_call", {"a": 1}) - - @pytest.mark.asyncio - async def test_skill_action_error(self, context): - action = SkillAction(skill=self.skill, args={}, context=context) - rsp = await action.run() - assert "Error" in rsp.content - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/actions/test_summarize_code.py b/tests/metagpt/actions/test_summarize_code.py index 89ddab7bc3..e667597644 100644 --- a/tests/metagpt/actions/test_summarize_code.py +++ b/tests/metagpt/actions/test_summarize_code.py @@ -10,8 +10,8 @@ import pytest from metagpt.actions.summarize_code import SummarizeCode -from metagpt.logs import logger -from metagpt.schema import CodeSummarizeContext +from metagpt.core.logs import logger +from metagpt.core.schema import CodeSummarizeContext from tests.mock.mock_llm import MockLLM DESIGN_CONTENT = """ diff --git a/tests/metagpt/actions/test_talk_action.py b/tests/metagpt/actions/test_talk_action.py deleted file mode 100644 index 206abfbae5..0000000000 --- a/tests/metagpt/actions/test_talk_action.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/12/28 -@Author : mashenquan -@File : test_talk_action.py -""" - -import pytest - -from metagpt.actions.talk_action import TalkAction -from metagpt.schema import Message - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - ("agent_description", "language", "talk_context", "knowledge", "history_summary"), - [ - ( - "mathematician", - "English", - "How old is Susie?", - "Susie is a girl born in 2011/11/14. Today is 2023/12/3", - "balabala... (useless words)", - ), - ( - "mathematician", - "Chinese", - "Does Susie have an apple?", - "Susie is a girl born in 2011/11/14. Today is 2023/12/3", - "Susie had an apple, and she ate it right now", - ), - ], -) -async def test_prompt(agent_description, language, talk_context, knowledge, history_summary, context): - # Prerequisites - context.kwargs.agent_description = agent_description - context.kwargs.language = language - - action = TalkAction(i_context=talk_context, knowledge=knowledge, history_summary=history_summary, context=context) - assert "{" not in action.prompt - assert "{" not in action.prompt_gpt4 - - rsp = await action.run() - assert rsp - assert isinstance(rsp, Message) - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/actions/test_write_code.py b/tests/metagpt/actions/test_write_code.py index 1c17720312..07a42c4266 100644 --- a/tests/metagpt/actions/test_write_code.py +++ b/tests/metagpt/actions/test_write_code.py @@ -12,9 +12,9 @@ import pytest from metagpt.actions.write_code import WriteCode -from metagpt.logs import logger -from metagpt.schema import CodingContext, Document -from metagpt.utils.common import CodeParser, aread +from metagpt.core.logs import logger +from metagpt.core.schema import CodingContext, Document +from metagpt.core.utils.common import CodeParser, aread from tests.data.incremental_dev_project.mock import ( CODE_PLAN_AND_CHANGE_SAMPLE, REFINED_CODE_INPUT_SAMPLE, diff --git a/tests/metagpt/actions/test_write_code_plan_and_change_an.py b/tests/metagpt/actions/test_write_code_plan_and_change_an.py index 5bc8604693..8807142b05 100644 --- a/tests/metagpt/actions/test_write_code_plan_and_change_an.py +++ b/tests/metagpt/actions/test_write_code_plan_and_change_an.py @@ -10,15 +10,15 @@ import pytest from openai._models import BaseModel -from metagpt.actions.action_node import ActionNode from metagpt.actions.write_code import WriteCode from metagpt.actions.write_code_plan_and_change_an import ( REFINED_TEMPLATE, WriteCodePlanAndChange, ) -from metagpt.logs import logger -from metagpt.schema import CodePlanAndChangeContext -from metagpt.utils.common import CodeParser +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.logs import logger +from metagpt.core.schema import CodePlanAndChangeContext +from metagpt.core.utils.common import CodeParser from tests.data.incremental_dev_project.mock import ( CODE_PLAN_AND_CHANGE_SAMPLE, DESIGN_SAMPLE, diff --git a/tests/metagpt/actions/test_write_code_review.py b/tests/metagpt/actions/test_write_code_review.py index 047d5e6ca7..6ad4d7887b 100644 --- a/tests/metagpt/actions/test_write_code_review.py +++ b/tests/metagpt/actions/test_write_code_review.py @@ -8,7 +8,7 @@ import pytest from metagpt.actions.write_code_review import WriteCodeReview -from metagpt.schema import CodingContext, Document +from metagpt.core.schema import CodingContext, Document @pytest.mark.asyncio diff --git a/tests/metagpt/actions/test_write_prd.py b/tests/metagpt/actions/test_write_prd.py index fcfa81931f..dd3506b96f 100644 --- a/tests/metagpt/actions/test_write_prd.py +++ b/tests/metagpt/actions/test_write_prd.py @@ -12,12 +12,12 @@ import pytest from metagpt.actions import UserRequirement, WritePRD -from metagpt.const import DEFAULT_WORKSPACE_ROOT, REQUIREMENT_FILENAME -from metagpt.logs import logger +from metagpt.core.const import DEFAULT_WORKSPACE_ROOT, REQUIREMENT_FILENAME +from metagpt.core.logs import logger +from metagpt.core.roles.role import RoleReactMode +from metagpt.core.schema import Message +from metagpt.core.utils.common import any_to_str from metagpt.roles.product_manager import ProductManager -from metagpt.roles.role import RoleReactMode -from metagpt.schema import Message -from metagpt.utils.common import any_to_str from metagpt.utils.project_repo import ProjectRepo from tests.data.incremental_dev_project.mock import NEW_REQUIREMENT_SAMPLE diff --git a/tests/metagpt/actions/test_write_prd_an.py b/tests/metagpt/actions/test_write_prd_an.py index b6e92d3d66..d653f72374 100644 --- a/tests/metagpt/actions/test_write_prd_an.py +++ b/tests/metagpt/actions/test_write_prd_an.py @@ -8,10 +8,10 @@ import pytest from openai._models import BaseModel -from metagpt.actions.action_node import ActionNode from metagpt.actions.write_prd import NEW_REQ_TEMPLATE from metagpt.actions.write_prd_an import REFINED_PRD_NODE -from metagpt.llm import LLM +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.llm import LLM from tests.data.incremental_dev_project.mock import ( NEW_REQUIREMENT_SAMPLE, PRD_SAMPLE, diff --git a/tests/metagpt/actions/test_write_teaching_plan.py b/tests/metagpt/actions/test_write_teaching_plan.py deleted file mode 100644 index bb68d42863..0000000000 --- a/tests/metagpt/actions/test_write_teaching_plan.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/7/28 17:25 -@Author : mashenquan -@File : test_write_teaching_plan.py -""" - -import pytest - -from metagpt.actions.write_teaching_plan import WriteTeachingPlanPart - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - ("topic", "content"), - [("Title", "Lesson 1: Learn to draw an apple."), ("Teaching Content", "Lesson 1: Learn to draw an apple.")], -) -async def test_write_teaching_plan_part(topic, content, context): - action = WriteTeachingPlanPart(topic=topic, i_context=content, context=context) - rsp = await action.run() - assert rsp - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/actions/test_write_test.py b/tests/metagpt/actions/test_write_test.py index 9469dd3126..a7a7b881ac 100644 --- a/tests/metagpt/actions/test_write_test.py +++ b/tests/metagpt/actions/test_write_test.py @@ -8,8 +8,8 @@ import pytest from metagpt.actions.write_test import WriteTest -from metagpt.logs import logger -from metagpt.schema import Document, TestingContext +from metagpt.core.logs import logger +from metagpt.core.schema import Document, TestingContext @pytest.mark.asyncio diff --git a/tests/metagpt/actions/test_write_tutorial.py b/tests/metagpt/actions/test_write_tutorial.py deleted file mode 100644 index a83da1a1c4..0000000000 --- a/tests/metagpt/actions/test_write_tutorial.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env python3 -# _*_ coding: utf-8 _*_ -""" -@Time : 2023/9/6 21:41:34 -@Author : Stitch-z -@File : test_write_tutorial.py -""" -from typing import Dict - -import pytest - -from metagpt.actions.write_tutorial import WriteContent, WriteDirectory - - -@pytest.mark.asyncio -@pytest.mark.parametrize(("language", "topic"), [("English", "Write a tutorial about Python")]) -async def test_write_directory(language: str, topic: str, context): - ret = await WriteDirectory(language=language, context=context).run(topic=topic) - assert isinstance(ret, dict) - assert "title" in ret - assert "directory" in ret - assert isinstance(ret["directory"], list) - assert len(ret["directory"]) - assert isinstance(ret["directory"][0], dict) - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - ("language", "topic", "directory"), - [("English", "Write a tutorial about Python", {"Introduction": ["What is Python?", "Why learn Python?"]})], -) -async def test_write_content(language: str, topic: str, directory: Dict, context): - ret = await WriteContent(language=language, directory=directory, context=context).run(topic=topic) - assert isinstance(ret, str) - assert list(directory.keys())[0] in ret - for value in list(directory.values())[0]: - assert value in ret diff --git a/tests/metagpt/configs/test_models_config.py b/tests/metagpt/configs/test_models_config.py index cfbf1f96bb..baeb6f17a2 100644 --- a/tests/metagpt/configs/test_models_config.py +++ b/tests/metagpt/configs/test_models_config.py @@ -1,9 +1,9 @@ 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 +from metagpt.actions import UserRequirement +from metagpt.core.configs.models_config import ModelsConfig +from metagpt.core.const import METAGPT_ROOT, TEST_DATA_PATH +from metagpt.core.utils.common import aread, awrite @pytest.mark.asyncio @@ -22,7 +22,7 @@ async def test_models_configs(context): 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") + action = UserRequirement(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: diff --git a/tests/metagpt/document_store/test_chromadb_store.py b/tests/metagpt/document_store/test_chromadb_store.py deleted file mode 100644 index 70b30d8143..0000000000 --- a/tests/metagpt/document_store/test_chromadb_store.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/6/6 00:41 -@Author : alexanderwu -@File : test_chromadb_store.py -""" -from metagpt.document_store.chromadb_store import ChromaStore - - -# @pytest.mark.skip() -def test_chroma_store(): - """FIXME:chroma使用感觉很诡异,一用Python就挂,测试用例里也是""" - # 创建 ChromaStore 实例,使用 'sample_collection' 集合 - document_store = ChromaStore("sample_collection_1", get_or_create=True) - - # 使用 write 方法添加多个文档 - document_store.write( - ["This is document1", "This is document2"], [{"source": "google-docs"}, {"source": "notion"}], ["doc1", "doc2"] - ) - - # 使用 add 方法添加一个文档 - document_store.add("This is document3", {"source": "notion"}, "doc3") - - # 搜索文档 - results = document_store.search("This is a query document", n_results=3) - assert len(results) > 0 diff --git a/tests/metagpt/document_store/test_document.py b/tests/metagpt/document_store/test_document.py deleted file mode 100644 index 13c0921a3c..0000000000 --- a/tests/metagpt/document_store/test_document.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/6/11 19:46 -@Author : alexanderwu -@File : test_document.py -""" -import pytest - -from metagpt.const import METAGPT_ROOT -from metagpt.document import IndexableDocument - -CASES = [ - ("requirements.txt", None, None, 0), - # ("cases/faq.csv", "Question", "Answer", 1), - # ("cases/faq.json", "Question", "Answer", 1), - # ("docx/faq.docx", None, None, 1), - # ("cases/faq.pdf", None, None, 0), # 这是因为pdf默认没有分割段落 - # ("cases/faq.txt", None, None, 0), # 这是因为txt按照256分割段落 -] - - -@pytest.mark.parametrize("relative_path, content_col, meta_col, threshold", CASES) -def test_document(relative_path, content_col, meta_col, threshold): - doc = IndexableDocument.from_path(METAGPT_ROOT / relative_path, content_col, meta_col) - rsp = doc.get_docs_and_metadatas() - assert len(rsp[0]) > threshold - assert len(rsp[1]) > threshold diff --git a/tests/metagpt/document_store/test_faiss_store.py b/tests/metagpt/document_store/test_faiss_store.py deleted file mode 100644 index a93b5f1455..0000000000 --- a/tests/metagpt/document_store/test_faiss_store.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/5/27 20:20 -@Author : alexanderwu -@File : test_faiss_store.py -""" - -import numpy as np -import pytest - -from metagpt.const import EXAMPLE_PATH -from metagpt.document_store import FaissStore -from metagpt.logs import logger -from metagpt.roles import Sales - - -def mock_openai_embed_documents(self, texts: list[str], show_progress: bool = False) -> list[list[float]]: - num = len(texts) - embeds = np.random.randint(1, 100, size=(num, 1536)) # 1536: openai embedding dim - embeds = (embeds - embeds.mean(axis=0)) / embeds.std(axis=0) - return embeds.tolist() - - -def mock_openai_embed_document(self, text: str) -> list[float]: - embeds = mock_openai_embed_documents(self, [text]) - return embeds[0] - - -@pytest.mark.asyncio -async def test_search_json(mocker): - mocker.patch("llama_index.embeddings.openai.base.OpenAIEmbedding._get_text_embeddings", mock_openai_embed_documents) - mocker.patch("llama_index.embeddings.openai.base.OpenAIEmbedding._get_text_embedding", mock_openai_embed_document) - - store = FaissStore(EXAMPLE_PATH / "data/search_kb/example.json") - role = Sales(profile="Sales", store=store) - query = "Which facial cleanser is good for oily skin?" - result = await role.run(query) - logger.info(result) - - -@pytest.mark.asyncio -async def test_search_xlsx(mocker): - mocker.patch("llama_index.embeddings.openai.base.OpenAIEmbedding._get_text_embeddings", mock_openai_embed_documents) - mocker.patch("llama_index.embeddings.openai.base.OpenAIEmbedding._get_text_embedding", mock_openai_embed_document) - - store = FaissStore(EXAMPLE_PATH / "data/search_kb/example.xlsx", meta_col="Answer", content_col="Question") - role = Sales(profile="Sales", store=store) - query = "Which facial cleanser is good for oily skin?" - result = await role.run(query) - logger.info(result) - - -@pytest.mark.asyncio -async def test_write(mocker): - mocker.patch("llama_index.embeddings.openai.base.OpenAIEmbedding._get_text_embeddings", mock_openai_embed_documents) - mocker.patch("llama_index.embeddings.openai.base.OpenAIEmbedding._get_text_embedding", mock_openai_embed_document) - - store = FaissStore(EXAMPLE_PATH / "data/search_kb/example.xlsx", meta_col="Answer", content_col="Question") - _faiss_store = store.write() - assert _faiss_store.storage_context.docstore - assert _faiss_store.storage_context.vector_store.client diff --git a/tests/metagpt/document_store/test_lancedb_store.py b/tests/metagpt/document_store/test_lancedb_store.py deleted file mode 100644 index 1b73686208..0000000000 --- a/tests/metagpt/document_store/test_lancedb_store.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/8/9 15:42 -@Author : unkn-wn (Leon Yee) -@File : test_lancedb_store.py -""" -import random - -from metagpt.document_store.lancedb_store import LanceStore - - -def test_lance_store(): - # This simply establishes the connection to the database, so we can drop the table if it exists - store = LanceStore("test") - - store.drop("test") - - store.write( - data=[[random.random() for _ in range(100)] for _ in range(2)], - metadatas=[{"source": "google-docs"}, {"source": "notion"}], - ids=["doc1", "doc2"], - ) - - store.add(data=[random.random() for _ in range(100)], metadata={"source": "notion"}, _id="doc3") - - result = store.search([random.random() for _ in range(100)], n_results=3) - assert len(result) == 3 - - store.delete("doc2") - result = store.search( - [random.random() for _ in range(100)], n_results=3, where="source = 'notion'", metric="cosine" - ) - assert len(result) == 1 diff --git a/tests/metagpt/document_store/test_milvus_store.py b/tests/metagpt/document_store/test_milvus_store.py deleted file mode 100644 index 93d4187f93..0000000000 --- a/tests/metagpt/document_store/test_milvus_store.py +++ /dev/null @@ -1,48 +0,0 @@ -import random - -import pytest - -from metagpt.document_store.milvus_store import MilvusConnection, MilvusStore - -seed_value = 42 -random.seed(seed_value) - -vectors = [[random.random() for _ in range(8)] for _ in range(10)] -ids = [f"doc_{i}" for i in range(10)] -metadata = [{"color": "red", "rand_number": i % 10} for i in range(10)] - - -def assert_almost_equal(actual, expected): - delta = 1e-10 - if isinstance(expected, list): - assert len(actual) == len(expected) - for ac, exp in zip(actual, expected): - assert abs(ac - exp) <= delta, f"{ac} is not within {delta} of {exp}" - else: - assert abs(actual - expected) <= delta, f"{actual} is not within {delta} of {expected}" - - -@pytest.mark.skip() # Skip because the pymilvus dependency is not installed by default -def test_milvus_store(): - milvus_connection = MilvusConnection(uri="./milvus_local.db") - milvus_store = MilvusStore(milvus_connection) - - collection_name = "TestCollection" - milvus_store.create_collection(collection_name, dim=8) - - milvus_store.add(collection_name, ids, vectors, metadata) - - search_results = milvus_store.search(collection_name, query=[1.0] * 8) - assert len(search_results) > 0 - first_result = search_results[0] - assert first_result["id"] == "doc_0" - - search_results_with_filter = milvus_store.search(collection_name, query=[1.0] * 8, filter={"rand_number": 1}) - assert len(search_results_with_filter) > 0 - assert search_results_with_filter[0]["id"] == "doc_1" - - milvus_store.delete(collection_name, _ids=["doc_0"]) - deleted_results = milvus_store.search(collection_name, query=[1.0] * 8, limit=1) - assert deleted_results[0]["id"] != "doc_0" - - milvus_store.client.drop_collection(collection_name) diff --git a/tests/metagpt/document_store/test_qdrant_store.py b/tests/metagpt/document_store/test_qdrant_store.py deleted file mode 100644 index 38d27011d4..0000000000 --- a/tests/metagpt/document_store/test_qdrant_store.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/6/11 21:08 -@Author : hezhaozhao -@File : test_qdrant_store.py -""" -import random - -from qdrant_client.models import ( - Distance, - FieldCondition, - Filter, - PointStruct, - Range, - VectorParams, -) - -from metagpt.document_store.qdrant_store import QdrantConnection, QdrantStore - -seed_value = 42 -random.seed(seed_value) - -vectors = [[random.random() for _ in range(2)] for _ in range(10)] - -points = [ - PointStruct(id=idx, vector=vector, payload={"color": "red", "rand_number": idx % 10}) - for idx, vector in enumerate(vectors) -] - - -def assert_almost_equal(actual, expected): - delta = 1e-10 - if isinstance(expected, list): - assert len(actual) == len(expected) - for ac, exp in zip(actual, expected): - assert abs(ac - exp) <= delta, f"{ac} is not within {delta} of {exp}" - else: - assert abs(actual - expected) <= delta, f"{actual} is not within {delta} of {expected}" - - -def test_qdrant_store(): - qdrant_connection = QdrantConnection(memory=True) - vectors_config = VectorParams(size=2, distance=Distance.COSINE) - qdrant_store = QdrantStore(qdrant_connection) - qdrant_store.create_collection("Book", vectors_config, force_recreate=True) - assert qdrant_store.has_collection("Book") is True - qdrant_store.delete_collection("Book") - assert qdrant_store.has_collection("Book") is False - qdrant_store.create_collection("Book", vectors_config) - assert qdrant_store.has_collection("Book") is True - qdrant_store.add("Book", points) - results = qdrant_store.search("Book", query=[1.0, 1.0]) - assert results[0]["id"] == 2 - assert_almost_equal(results[0]["score"], 0.999106722578389) - assert results[1]["id"] == 7 - assert_almost_equal(results[1]["score"], 0.9961650411397226) - results = qdrant_store.search("Book", query=[1.0, 1.0], return_vector=True) - assert results[0]["id"] == 2 - assert_almost_equal(results[0]["score"], 0.999106722578389) - assert_almost_equal(results[0]["vector"], [0.7363563179969788, 0.6765939593315125]) - assert results[1]["id"] == 7 - assert_almost_equal(results[1]["score"], 0.9961650411397226) - assert_almost_equal(results[1]["vector"], [0.7662628889083862, 0.6425272226333618]) - results = qdrant_store.search( - "Book", - query=[1.0, 1.0], - query_filter=Filter(must=[FieldCondition(key="rand_number", range=Range(gte=8))]), - ) - assert results[0]["id"] == 8 - assert_almost_equal(results[0]["score"], 0.9100373450784073) - assert results[1]["id"] == 9 - assert_almost_equal(results[1]["score"], 0.7127610621127889) - results = qdrant_store.search( - "Book", - query=[1.0, 1.0], - query_filter=Filter(must=[FieldCondition(key="rand_number", range=Range(gte=8))]), - return_vector=True, - ) - assert_almost_equal(results[0]["vector"], [0.35037919878959656, 0.9366079568862915]) - assert_almost_equal(results[1]["vector"], [0.9999677538871765, 0.00802854634821415]) diff --git a/tests/metagpt/environment/android_env/__init__.py b/tests/metagpt/environment/android_env/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/environment/android_env/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : diff --git a/tests/metagpt/environment/android_env/test_android_ext_env.py b/tests/metagpt/environment/android_env/test_android_ext_env.py deleted file mode 100644 index 937cf5f6ef..0000000000 --- a/tests/metagpt/environment/android_env/test_android_ext_env.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : the unittest of AndroidExtEnv - -from pathlib import Path - -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: - return "shape: 720x1080" - - -def mock_device_shape_invalid(self, adb_cmd: str) -> str: - return ADB_EXEC_FAIL - - -def mock_list_devices(self) -> str: - return ["emulator-5554"] - - -def mock_get_screenshot(self, adb_cmd: str) -> str: - return "screenshot_xxxx-xx-xx" - - -def mock_get_xml(self, adb_cmd: str) -> str: - return "xml_xxxx-xx-xx" - - -def mock_write_read_operation(self, adb_cmd: str) -> str: - return "OK" - - -def test_android_ext_env(mocker): - device_id = "emulator-5554" - 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} " - assert ext_env.adb_prefix_shell == f"adb -s {device_id} shell " - assert ext_env.adb_prefix_si == f"adb -s {device_id} shell input " - - assert ext_env.device_shape == (720, 1080) - - mocker.patch( - "metagpt.environment.android.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_device_shape_invalid - ) - assert ext_env.device_shape == (0, 0) - - assert ext_env.list_devices() == [device_id] - - 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.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.android_ext_env.AndroidExtEnv.execute_adb_with_cmd", mock_write_read_operation - ) - res = "OK" - assert ext_env.system_back() == res - assert ext_env.system_tap(10, 10) == res - assert ext_env.user_input("test_input") == res - assert ext_env.user_longpress(10, 10) == res - assert ext_env.user_swipe(10, 10) == res - assert ext_env.user_swipe_to((10, 10), (20, 20)) == res diff --git a/tests/metagpt/environment/mgx_env/run_mgx_env.py b/tests/metagpt/environment/mgx_env/run_mgx_env.py index dd9e7c3e53..6c3fd11aed 100644 --- a/tests/metagpt/environment/mgx_env/run_mgx_env.py +++ b/tests/metagpt/environment/mgx_env/run_mgx_env.py @@ -4,12 +4,12 @@ import threading import time +from metagpt.core.schema import Message from metagpt.environment.mgx.mgx_env import MGXEnv from metagpt.roles import Architect, Engineer, ProductManager, ProjectManager -from metagpt.roles.di.data_analyst import DataAnalyst -from metagpt.roles.di.engineer2 import Engineer2 -from metagpt.roles.di.team_leader import TeamLeader -from metagpt.schema import Message +from metagpt.roles.data_analyst import DataAnalyst +from metagpt.roles.engineer2 import Engineer2 +from metagpt.roles.team_leader import TeamLeader async def main(requirement="", enable_human_input=False, use_fixed_sop=False, allow_idle_time=30): diff --git a/tests/metagpt/environment/minecraft_env/__init__.py b/tests/metagpt/environment/minecraft_env/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/environment/minecraft_env/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : diff --git a/tests/metagpt/environment/minecraft_env/test_minecraft_ext_env.py b/tests/metagpt/environment/minecraft_env/test_minecraft_ext_env.py deleted file mode 100644 index 0ebff22eb6..0000000000 --- a/tests/metagpt/environment/minecraft_env/test_minecraft_ext_env.py +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : the unittest of MinecraftExtEnv - - -from metagpt.environment.minecraft.const import MC_CKPT_DIR -from metagpt.environment.minecraft.minecraft_ext_env import MinecraftExtEnv - - -def test_minecraft_ext_env(): - ext_env = MinecraftExtEnv() - assert ext_env.server, f"{ext_env.server_host}:{ext_env.server_port}" - assert MC_CKPT_DIR.joinpath("skill/code").exists() - assert ext_env.warm_up.get("optional_inventory_items") == 7 diff --git a/tests/metagpt/environment/stanford_town_env/__init__.py b/tests/metagpt/environment/stanford_town_env/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/environment/stanford_town_env/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : 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 deleted file mode 100644 index 282a45dfa4..0000000000 --- a/tests/metagpt/environment/stanford_town_env/test_stanford_town_ext_env.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : the unittest of StanfordTownExtEnv - -from pathlib import Path - -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("..", "..", "..", "..", "metagpt/ext/stanford_town/static_dirs/assets/the_ville") -) - - -def test_stanford_town_ext_env(): - ext_env = StanfordTownExtEnv(maze_asset_path=maze_asset_path) - - tile_coord = ext_env.turn_coordinate_to_tile((64, 64)) - assert tile_coord == (2, 2) - - tile = (58, 9) - assert len(ext_env.get_collision_maze()) == 100 - assert len(ext_env.get_address_tiles()) == 306 - assert ext_env.access_tile(tile=tile)["world"] == "the Ville" - assert ext_env.get_tile_path(tile=tile, level="world") == "the Ville" - 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_event_from_tile(event, tile) - assert len(ext_env.tiles[tile[1]][tile[0]]["events"]) == 1 - - ext_env.turn_event_from_tile_idle(event, tile) - - ext_env.remove_event_from_tile(event, tile) - assert len(ext_env.tiles[tile[1]][tile[0]]["events"]) == 0 - - 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 98d43720ad..8961fa7f8e 100644 --- a/tests/metagpt/environment/test_base_env.py +++ b/tests/metagpt/environment/test_base_env.py @@ -6,7 +6,7 @@ import pytest -from metagpt.base.base_env_space import BaseEnvAction, BaseEnvObsParams +from metagpt.core.base.base_env_space import BaseEnvAction, BaseEnvObsParams from metagpt.environment.api.env_api import EnvAPIAbstract from metagpt.environment.base_env import ( Environment, diff --git a/tests/metagpt/environment/werewolf_env/__init__.py b/tests/metagpt/environment/werewolf_env/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/environment/werewolf_env/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : diff --git a/tests/metagpt/environment/werewolf_env/test_werewolf_ext_env.py b/tests/metagpt/environment/werewolf_env/test_werewolf_ext_env.py deleted file mode 100644 index 986d55e1ae..0000000000 --- a/tests/metagpt/environment/werewolf_env/test_werewolf_ext_env.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : the unittest of 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 = RoleType.WEREWOLF.value - - -class Villager(Role): - profile: str = RoleType.VILLAGER.value - - -class Witch(Role): - profile: str = RoleType.WITCH.value - - -class Guard(Role): - profile: str = RoleType.GUARD.value - - -def test_werewolf_ext_env(): - players_state = { - "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"]) - - assert len(ext_env.living_players) == 5 - assert len(ext_env.special_role_players) == 2 - assert len(ext_env.werewolf_players) == 2 - - curr_instr = ext_env.curr_step_instruction() - assert ext_env.step_idx == 5 - assert "Werewolves, please open your eyes" in curr_instr["content"] - - # current step_idx = 5 - 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 - - for idx in range(13): - _ = ext_env.curr_step_instruction() - - # current step_idx = 18 - assert ext_env.step_idx == 18 - 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 - - player_names = ["Player0", "Player2"] - assert ext_env.get_players_state(player_names) == dict(zip(player_names, [RoleState.ALIVE, RoleState.KILLED])) diff --git a/tests/metagpt/exp_pool/test_context_builders/test_base_context_builder.py b/tests/metagpt/exp_pool/test_context_builders/test_base_context_builder.py index 0a160fb42f..eeee581c39 100644 --- a/tests/metagpt/exp_pool/test_context_builders/test_base_context_builder.py +++ b/tests/metagpt/exp_pool/test_context_builders/test_base_context_builder.py @@ -1,11 +1,11 @@ import pytest -from metagpt.exp_pool.context_builders.base import ( +from metagpt.core.exp_pool.context_builders.base import ( EXP_TEMPLATE, BaseContextBuilder, Experience, ) -from metagpt.exp_pool.schema import Metric, Score +from metagpt.core.exp_pool.schema import Metric, Score class TestBaseContextBuilder: diff --git a/tests/metagpt/exp_pool/test_context_builders/test_rolezero_context_builder.py b/tests/metagpt/exp_pool/test_context_builders/test_rolezero_context_builder.py index 82a3622a5e..89138d9545 100644 --- a/tests/metagpt/exp_pool/test_context_builders/test_rolezero_context_builder.py +++ b/tests/metagpt/exp_pool/test_context_builders/test_rolezero_context_builder.py @@ -1,8 +1,8 @@ import pytest -from metagpt.const import EXPERIENCE_MASK -from metagpt.exp_pool.context_builders.base import BaseContextBuilder -from metagpt.exp_pool.context_builders.role_zero import RoleZeroContextBuilder +from metagpt.core.const import EXPERIENCE_MASK +from metagpt.core.exp_pool.context_builders.base import BaseContextBuilder +from metagpt.core.exp_pool.context_builders.role_zero import RoleZeroContextBuilder class TestRoleZeroContextBuilder: diff --git a/tests/metagpt/exp_pool/test_context_builders/test_simple_context_builder.py b/tests/metagpt/exp_pool/test_context_builders/test_simple_context_builder.py index cf1a42f270..b21490bf1e 100644 --- a/tests/metagpt/exp_pool/test_context_builders/test_simple_context_builder.py +++ b/tests/metagpt/exp_pool/test_context_builders/test_simple_context_builder.py @@ -1,7 +1,7 @@ import pytest -from metagpt.exp_pool.context_builders.base import BaseContextBuilder -from metagpt.exp_pool.context_builders.simple import ( +from metagpt.core.exp_pool.context_builders.base import BaseContextBuilder +from metagpt.core.exp_pool.context_builders.simple import ( SIMPLE_CONTEXT_TEMPLATE, SimpleContextBuilder, ) diff --git a/tests/metagpt/exp_pool/test_decorator.py b/tests/metagpt/exp_pool/test_decorator.py index 9d104fca4c..f32659cec1 100644 --- a/tests/metagpt/exp_pool/test_decorator.py +++ b/tests/metagpt/exp_pool/test_decorator.py @@ -2,14 +2,14 @@ import pytest -from metagpt.config2 import Config -from metagpt.configs.exp_pool_config import ExperiencePoolConfig -from metagpt.exp_pool.context_builders import SimpleContextBuilder -from metagpt.exp_pool.decorator import ExpCacheHandler, exp_cache -from metagpt.exp_pool.manager import ExperienceManager -from metagpt.exp_pool.perfect_judges import SimplePerfectJudge -from metagpt.exp_pool.schema import Experience, QueryType, Score -from metagpt.exp_pool.scorers import SimpleScorer +from metagpt.core.config2 import Config +from metagpt.core.configs.exp_pool_config import ExperiencePoolConfig +from metagpt.core.exp_pool.context_builders import SimpleContextBuilder +from metagpt.core.exp_pool.decorator import ExpCacheHandler, exp_cache +from metagpt.core.exp_pool.manager import ExperienceManager +from metagpt.core.exp_pool.perfect_judges import SimplePerfectJudge +from metagpt.core.exp_pool.schema import Experience, QueryType, Score +from metagpt.core.exp_pool.scorers import SimpleScorer from metagpt.rag.engines import SimpleEngine @@ -156,7 +156,7 @@ def mock_perfect_judge(self, mocker): @pytest.fixture def mock_config(self, mocker): config = Config.default().model_copy(deep=True) - default = mocker.patch("metagpt.config2.Config.default") + default = mocker.patch("metagpt.core.config2.Config.default") default.return_value = config return config diff --git a/tests/metagpt/exp_pool/test_manager.py b/tests/metagpt/exp_pool/test_manager.py index b0e4e8537d..db5c1d2153 100644 --- a/tests/metagpt/exp_pool/test_manager.py +++ b/tests/metagpt/exp_pool/test_manager.py @@ -1,13 +1,13 @@ import pytest -from metagpt.config2 import Config -from metagpt.configs.exp_pool_config import ( +from metagpt.core.config2 import Config +from metagpt.core.configs.exp_pool_config import ( ExperiencePoolConfig, ExperiencePoolRetrievalType, ) -from metagpt.configs.llm_config import LLMConfig -from metagpt.exp_pool.manager import Experience, ExperienceManager -from metagpt.exp_pool.schema import DEFAULT_SIMILARITY_TOP_K, QueryType +from metagpt.core.configs.llm_config import LLMConfig +from metagpt.core.exp_pool.manager import Experience, ExperienceManager +from metagpt.core.exp_pool.schema import DEFAULT_SIMILARITY_TOP_K, QueryType class TestExperienceManager: diff --git a/tests/metagpt/exp_pool/test_perfect_judges/test_simple_perfect_judge.py b/tests/metagpt/exp_pool/test_perfect_judges/test_simple_perfect_judge.py index 5abd04f0db..d284b5c525 100644 --- a/tests/metagpt/exp_pool/test_perfect_judges/test_simple_perfect_judge.py +++ b/tests/metagpt/exp_pool/test_perfect_judges/test_simple_perfect_judge.py @@ -1,7 +1,7 @@ import pytest -from metagpt.exp_pool.perfect_judges import SimplePerfectJudge -from metagpt.exp_pool.schema import MAX_SCORE, Experience, Metric, Score +from metagpt.core.exp_pool.perfect_judges import SimplePerfectJudge +from metagpt.core.exp_pool.schema import MAX_SCORE, Experience, Metric, Score class TestSimplePerfectJudge: diff --git a/tests/metagpt/exp_pool/test_scorers/test_simple_scorer.py b/tests/metagpt/exp_pool/test_scorers/test_simple_scorer.py index e17edfca81..3b254e5cf1 100644 --- a/tests/metagpt/exp_pool/test_scorers/test_simple_scorer.py +++ b/tests/metagpt/exp_pool/test_scorers/test_simple_scorer.py @@ -2,9 +2,9 @@ import pytest -from metagpt.exp_pool.schema import Score -from metagpt.exp_pool.scorers.simple import SIMPLE_SCORER_TEMPLATE, SimpleScorer -from metagpt.llm import BaseLLM +from metagpt.core.exp_pool.schema import Score +from metagpt.core.exp_pool.scorers.simple import SIMPLE_SCORER_TEMPLATE, SimpleScorer +from metagpt.core.llm import BaseLLM class TestSimpleScorer: @@ -32,7 +32,7 @@ async def test_evaluate(self, simple_scorer, mock_llm, mocker): mock_llm.aask.return_value = f"```json\n{mock_llm_response}\n```" # Mock CodeParser.parse_code - mocker.patch("metagpt.utils.common.CodeParser.parse_code", return_value=mock_llm_response) + mocker.patch("metagpt.core.utils.common.CodeParser.parse_code", return_value=mock_llm_response) # Test evaluate method result = await simple_scorer.evaluate(req, resp) @@ -57,7 +57,7 @@ async def test_evaluate_invalid_response(self, simple_scorer, mock_llm, mocker): mock_llm.aask.return_value = f"```json\n{mock_llm_response}\n```" # Mock CodeParser.parse_code - mocker.patch("metagpt.utils.common.CodeParser.parse_code", return_value=mock_llm_response) + mocker.patch("metagpt.core.utils.common.CodeParser.parse_code", return_value=mock_llm_response) # Test evaluate method with invalid response with pytest.raises(json.JSONDecodeError): diff --git a/tests/metagpt/exp_pool/test_serializers/test_action_node.py b/tests/metagpt/exp_pool/test_serializers/test_action_node.py index e4ab4684d2..236a08fc10 100644 --- a/tests/metagpt/exp_pool/test_serializers/test_action_node.py +++ b/tests/metagpt/exp_pool/test_serializers/test_action_node.py @@ -2,8 +2,8 @@ import pytest -from metagpt.actions.action_node import ActionNode -from metagpt.exp_pool.serializers.action_node import ActionNodeSerializer +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.exp_pool.serializers.action_node import ActionNodeSerializer class TestActionNodeSerializer: diff --git a/tests/metagpt/exp_pool/test_serializers/test_role_zero.py b/tests/metagpt/exp_pool/test_serializers/test_role_zero.py index 964443f292..285fb9fc89 100644 --- a/tests/metagpt/exp_pool/test_serializers/test_role_zero.py +++ b/tests/metagpt/exp_pool/test_serializers/test_role_zero.py @@ -2,7 +2,7 @@ import pytest -from metagpt.exp_pool.serializers import RoleZeroSerializer +from metagpt.core.exp_pool.serializers import RoleZeroSerializer class TestRoleZeroSerializer: diff --git a/tests/metagpt/exp_pool/test_serializers/test_simple.py b/tests/metagpt/exp_pool/test_serializers/test_simple.py index 2a6bf96e3f..e5187464b6 100644 --- a/tests/metagpt/exp_pool/test_serializers/test_simple.py +++ b/tests/metagpt/exp_pool/test_serializers/test_simple.py @@ -1,6 +1,6 @@ import pytest -from metagpt.exp_pool.serializers.simple import SimpleSerializer +from metagpt.core.exp_pool.serializers.simple import SimpleSerializer class TestSimpleSerializer: diff --git a/tests/metagpt/ext/__init__.py b/tests/metagpt/ext/__init__.py deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/ext/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/ext/android_assistant/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index ea3e9ccb17..0000000000 --- a/tests/metagpt/ext/android_assistant/test_an.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/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 deleted file mode 100644 index 5299d30a23..0000000000 --- a/tests/metagpt/ext/android_assistant/test_parse_record.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/ext/stanford_town/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/ext/stanford_town/actions/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 616c03f338..0000000000 --- a/tests/metagpt/ext/stanford_town/actions/test_gen_action_details.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/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 deleted file mode 100644 index 5dfabcab90..0000000000 --- a/tests/metagpt/ext/stanford_town/actions/test_summarize_conv.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/ext/stanford_town/memory/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index db7ca3212d..0000000000 --- a/tests/metagpt/ext/stanford_town/memory/test_agent_memory.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/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 deleted file mode 100644 index 36a9b2f99c..0000000000 --- a/tests/metagpt/ext/stanford_town/memory/test_basic_memory.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/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 deleted file mode 100644 index e05b273fd8..0000000000 --- a/tests/metagpt/ext/stanford_town/memory/test_spatial_memory.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/ext/stanford_town/plan/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 35dd216f95..0000000000 --- a/tests/metagpt/ext/stanford_town/plan/test_conversation.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/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 deleted file mode 100644 index f7f3950406..0000000000 --- a/tests/metagpt/ext/stanford_town/plan/test_st_plan.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/ext/stanford_town/roles/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index affa6e87fa..0000000000 --- a/tests/metagpt/ext/stanford_town/roles/test_st_role.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/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 deleted file mode 100644 index 0be23166ca..0000000000 --- a/tests/metagpt/ext/stanford_town/test_reflect.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/ext/werewolf/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index 2bcf8efd09..0000000000 --- a/tests/metagpt/ext/werewolf/actions/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -#!/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 deleted file mode 100644 index a31abc49a7..0000000000 --- a/tests/metagpt/ext/werewolf/actions/test_experience_operation.py +++ /dev/null @@ -1,164 +0,0 @@ -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/learn/__init__.py b/tests/metagpt/learn/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/metagpt/learn/test_google_search.py b/tests/metagpt/learn/test_google_search.py deleted file mode 100644 index 70a146878f..0000000000 --- a/tests/metagpt/learn/test_google_search.py +++ /dev/null @@ -1,21 +0,0 @@ -import pytest -from pydantic import BaseModel - -from metagpt.learn.google_search import google_search -from metagpt.tools import SearchEngineType - - -@pytest.mark.asyncio -async def test_google_search(search_engine_mocker): - class Input(BaseModel): - input: str - - inputs = [{"input": "ai agent"}] - for i in inputs: - seed = Input(**i) - result = await google_search( - seed.input, - engine=SearchEngineType.SERPER_GOOGLE, - api_key="mock-serper-key", - ) - assert result != "" diff --git a/tests/metagpt/learn/test_skill_loader.py b/tests/metagpt/learn/test_skill_loader.py deleted file mode 100644 index f1952c2752..0000000000 --- a/tests/metagpt/learn/test_skill_loader.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/9/19 -@Author : mashenquan -@File : test_skill_loader.py -@Desc : Unit tests. -""" -from pathlib import Path - -import pytest - -from metagpt.learn.skill_loader import SkillsDeclaration - - -@pytest.mark.asyncio -async def test_suite(context): - context.kwargs.agent_skills = [ - {"id": 1, "name": "text_to_speech", "type": "builtin", "config": {}, "enabled": True}, - {"id": 2, "name": "text_to_image", "type": "builtin", "config": {}, "enabled": True}, - {"id": 3, "name": "ai_call", "type": "builtin", "config": {}, "enabled": True}, - {"id": 3, "name": "data_analysis", "type": "builtin", "config": {}, "enabled": True}, - {"id": 5, "name": "crawler", "type": "builtin", "config": {"engine": "ddg"}, "enabled": True}, - {"id": 6, "name": "knowledge", "type": "builtin", "config": {}, "enabled": True}, - {"id": 6, "name": "web_search", "type": "builtin", "config": {}, "enabled": True}, - ] - pathname = Path(__file__).parent / "../../../docs/.well-known/skills.yaml" - loader = await SkillsDeclaration.load(skill_yaml_file_name=pathname) - skills = loader.get_skill_list(context=context) - assert skills - assert len(skills) >= 3 - for desc, name in skills.items(): - assert desc - assert name - - entity = loader.entities.get("Assistant") - assert entity - assert entity.skills - for sk in entity.skills: - assert sk - assert sk.arguments - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/learn/test_text_to_embedding.py b/tests/metagpt/learn/test_text_to_embedding.py deleted file mode 100644 index 3b5486c5d8..0000000000 --- a/tests/metagpt/learn/test_text_to_embedding.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/8/18 -@Author : mashenquan -@File : test_text_to_embedding.py -@Desc : Unit tests. -""" -import json -from pathlib import Path - -import pytest - -from metagpt.config2 import config -from metagpt.learn.text_to_embedding import text_to_embedding -from metagpt.utils.common import aread - - -@pytest.mark.asyncio -async def test_text_to_embedding(mocker): - # mock - mock_post = mocker.patch("aiohttp.ClientSession.post") - mock_response = mocker.AsyncMock() - mock_response.status = 200 - data = await aread(Path(__file__).parent / "../../data/openai/embedding.json") - mock_response.json.return_value = json.loads(data) - mock_post.return_value.__aenter__.return_value = mock_response - config.get_openai_llm().proxy = mocker.PropertyMock(return_value="http://mock.proxy") - - # Prerequisites - assert config.get_openai_llm().api_key - assert config.get_openai_llm().proxy - - v = await text_to_embedding(text="Panda emoji", config=config) - assert len(v.data) > 0 - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/learn/test_text_to_image.py b/tests/metagpt/learn/test_text_to_image.py deleted file mode 100644 index eb252589b9..0000000000 --- a/tests/metagpt/learn/test_text_to_image.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/8/18 -@Author : mashenquan -@File : test_text_to_image.py -@Desc : Unit tests. -""" -import base64 - -import openai -import pytest -from pydantic import BaseModel - -from metagpt.config2 import config -from metagpt.learn.text_to_image import text_to_image -from metagpt.tools.metagpt_text_to_image import MetaGPTText2Image -from metagpt.tools.openai_text_to_image import OpenAIText2Image -from metagpt.utils.s3 import S3 - - -@pytest.mark.asyncio -async def test_text_to_image(mocker): - # mock - mocker.patch.object(MetaGPTText2Image, "text_2_image", return_value=b"mock MetaGPTText2Image") - mocker.patch.object(OpenAIText2Image, "text_2_image", return_value=b"mock OpenAIText2Image") - mocker.patch.object(S3, "cache", return_value="http://mock/s3") - - assert config.metagpt_tti_url - - data = await text_to_image("Panda emoji", size_type="512x512", config=config) - assert "base64" in data or "http" in data - - -@pytest.mark.asyncio -async def test_openai_text_to_image(mocker): - # mocker - mock_url = mocker.Mock() - mock_url.url.return_value = "http://mock.com/0.png" - - class _MockData(BaseModel): - data: list - - mock_data = _MockData(data=[mock_url]) - mocker.patch.object(openai.resources.images.AsyncImages, "generate", return_value=mock_data) - mock_post = mocker.patch("aiohttp.ClientSession.get") - mock_response = mocker.AsyncMock() - mock_response.status = 200 - mock_response.read.return_value = base64.b64encode(b"success") - mock_post.return_value.__aenter__.return_value = mock_response - mocker.patch.object(S3, "cache", return_value="http://mock.s3.com/0.png") - - config.metagpt_tti_url = None - assert config.get_openai_llm() - - data = await text_to_image("Panda emoji", size_type="512x512", config=config) - assert "base64" in data or "http" in data - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/learn/test_text_to_speech.py b/tests/metagpt/learn/test_text_to_speech.py deleted file mode 100644 index 480e35f7a3..0000000000 --- a/tests/metagpt/learn/test_text_to_speech.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/8/18 -@Author : mashenquan -@File : test_text_to_speech.py -@Desc : Unit tests. -""" - -import pytest -from azure.cognitiveservices.speech import ResultReason, SpeechSynthesizer - -from metagpt.config2 import config -from metagpt.learn.text_to_speech import text_to_speech -from metagpt.tools.iflytek_tts import IFlyTekTTS -from metagpt.utils.s3 import S3 - - -@pytest.mark.asyncio -async def test_azure_text_to_speech(mocker): - # mock - config.iflytek_api_key = None - config.iflytek_api_secret = None - config.iflytek_app_id = None - mock_result = mocker.Mock() - mock_result.audio_data = b"mock audio data" - mock_result.reason = ResultReason.SynthesizingAudioCompleted - mock_data = mocker.Mock() - mock_data.get.return_value = mock_result - mocker.patch.object(SpeechSynthesizer, "speak_ssml_async", return_value=mock_data) - mocker.patch.object(S3, "cache", return_value="http://mock.s3.com/1.wav") - - # Prerequisites - assert not config.iflytek_app_id - assert not config.iflytek_api_key - assert not config.iflytek_api_secret - assert config.azure_tts_subscription_key and config.azure_tts_subscription_key != "YOUR_API_KEY" - assert config.azure_tts_region - - config.copy() - # test azure - data = await text_to_speech("panda emoji", config=config) - assert "base64" in data or "http" in data - - -@pytest.mark.asyncio -async def test_iflytek_text_to_speech(mocker): - # mock - config.azure_tts_subscription_key = None - config.azure_tts_region = None - mocker.patch.object(IFlyTekTTS, "synthesize_speech", return_value=None) - mock_data = mocker.AsyncMock() - mock_data.read.return_value = b"mock iflytek" - mock_reader = mocker.patch("aiofiles.open") - mock_reader.return_value.__aenter__.return_value = mock_data - mocker.patch.object(S3, "cache", return_value="http://mock.s3.com/1.mp3") - - # Prerequisites - assert config.iflytek_app_id - assert config.iflytek_api_key - assert config.iflytek_api_secret - assert not config.azure_tts_subscription_key or config.azure_tts_subscription_key == "YOUR_API_KEY" - assert not config.azure_tts_region - - # test azure - data = await text_to_speech("panda emoji", config=config) - assert "base64" in data or "http" in data - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/management/test_skill_manager.py b/tests/metagpt/management/test_skill_manager.py deleted file mode 100644 index 489aea82b7..0000000000 --- a/tests/metagpt/management/test_skill_manager.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/6/6 12:38 -@Author : alexanderwu -@File : test_skill_manager.py -""" -from metagpt.actions import WritePRD, WriteTest -from metagpt.logs import logger -from metagpt.management.skill_manager import SkillManager - - -def test_skill_manager(): - manager = SkillManager() - logger.info(manager._store) - - write_prd = WritePRD(name="WritePRD") - write_prd.desc = "基于老板或其他人的需求进行PRD的撰写,包括用户故事、需求分解等" - write_test = WriteTest(name="WriteTest") - write_test.desc = "进行测试用例的撰写" - manager.add_skill(write_prd) - manager.add_skill(write_test) - - skill = manager.get_skill("WriteTest") - logger.info(skill) - - rsp = manager.retrieve_skill("WritePRD") - logger.info(rsp) - assert rsp[0] == "WritePRD" - - rsp = manager.retrieve_skill("写测试用例") - logger.info(rsp) - assert rsp[0] == "WriteTest" - - rsp = manager.retrieve_skill_scored("写PRD") - logger.info(rsp) diff --git a/tests/metagpt/memory/test_brain_memory.py b/tests/metagpt/memory/test_brain_memory.py deleted file mode 100644 index 72ffcc5382..0000000000 --- a/tests/metagpt/memory/test_brain_memory.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/8/27 -@Author : mashenquan -@File : test_brain_memory.py -""" - -import pytest - -from metagpt.llm import LLM -from metagpt.memory.brain_memory import BrainMemory -from metagpt.schema import Message - - -@pytest.mark.asyncio -async def test_memory(): - memory = BrainMemory() - memory.add_talk(Message(content="talk")) - assert memory.history[0].role == "user" - memory.add_answer(Message(content="answer")) - assert memory.history[1].role == "assistant" - redis_key = BrainMemory.to_redis_key("none", "user_id", "chat_id") - await memory.dumps(redis_key=redis_key) - assert memory.exists("talk") - assert 1 == memory.to_int("1", 0) - memory.last_talk = "AAA" - assert memory.pop_last_talk() == "AAA" - assert memory.last_talk is None - assert memory.is_history_available - assert memory.history_text - - memory = await BrainMemory.loads(redis_key=redis_key) - assert memory - - -@pytest.mark.parametrize( - ("input", "tag", "val"), - [("[TALK]:Hello", "TALK", "Hello"), ("Hello", None, "Hello"), ("[TALK]Hello", None, "[TALK]Hello")], -) -def test_extract_info(input, tag, val): - t, v = BrainMemory.extract_info(input) - assert tag == t - assert val == v - - -@pytest.mark.asyncio -@pytest.mark.parametrize("llm", [LLM()]) -async def test_memory_llm(llm): - memory = BrainMemory() - for i in range(500): - memory.add_talk(Message(content="Lily is a girl.\n")) - - res = await memory.is_related("apple", "moon", llm) - assert not res - - res = await memory.rewrite(sentence="apple Lily eating", context="", llm=llm) - assert "Lily" in res - - res = await memory.summarize(llm=llm) - assert res - - res = await memory.get_title(llm=llm) - assert res - assert "Lily" in res - assert memory.history or memory.historical_summary - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/memory/test_longterm_memory.py b/tests/metagpt/memory/test_longterm_memory.py index cbd161dfa1..388298cfd2 100644 --- a/tests/metagpt/memory/test_longterm_memory.py +++ b/tests/metagpt/memory/test_longterm_memory.py @@ -7,10 +7,10 @@ import pytest -from metagpt.actions import UserRequirement +from metagpt.core.actions.add_requirement import UserRequirement +from metagpt.core.roles.role import RoleContext +from metagpt.core.schema import Message from metagpt.memory.longterm_memory import LongTermMemory -from metagpt.roles.role import RoleContext -from metagpt.schema import Message from tests.metagpt.memory.mock_text_embed import ( mock_openai_aembed_document, mock_openai_embed_document, @@ -28,7 +28,7 @@ async def test_ltm_search(mocker): ) role_id = "UTUserLtm(Product Manager)" - rc = RoleContext(watch={"metagpt.actions.add_requirement.UserRequirement"}) + rc = RoleContext(watch={"metagpt.core.actions.add_requirement.UserRequirement"}) ltm = LongTermMemory() ltm.recover_memory(role_id, rc) diff --git a/tests/metagpt/memory/test_memory.py b/tests/metagpt/memory/test_memory.py index a072b61deb..518a4b01bb 100644 --- a/tests/metagpt/memory/test_memory.py +++ b/tests/metagpt/memory/test_memory.py @@ -3,8 +3,8 @@ # @Desc : the unittest of Memory from metagpt.actions import UserRequirement -from metagpt.memory.memory import Memory -from metagpt.schema import Message +from metagpt.core.memory.base import Memory +from metagpt.core.schema import Message def test_memory(): diff --git a/tests/metagpt/memory/test_memory_storage.py b/tests/metagpt/memory/test_memory_storage.py index 09671aaab9..531602ce20 100644 --- a/tests/metagpt/memory/test_memory_storage.py +++ b/tests/metagpt/memory/test_memory_storage.py @@ -11,10 +11,10 @@ import pytest from metagpt.actions import UserRequirement, WritePRD -from metagpt.actions.action_node import ActionNode -from metagpt.const import DATA_PATH +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.const import DATA_PATH +from metagpt.core.schema import Message from metagpt.memory.memory_storage import MemoryStorage -from metagpt.schema import Message from tests.metagpt.memory.mock_text_embed import ( mock_openai_aembed_document, mock_openai_embed_document, diff --git a/tests/metagpt/memory/test_role_zero_memory.py b/tests/metagpt/memory/test_role_zero_memory.py index 80eb58e493..ed4788b72d 100644 --- a/tests/metagpt/memory/test_role_zero_memory.py +++ b/tests/metagpt/memory/test_role_zero_memory.py @@ -3,9 +3,9 @@ import pytest from metagpt.actions import UserRequirement -from metagpt.const import TEAMLEADER_NAME -from metagpt.memory.role_zero_memory import RoleZeroLongTermMemory -from metagpt.schema import AIMessage, LongTermMemoryItem, Message, UserMessage +from metagpt.core.const import TEAMLEADER_NAME +from metagpt.core.memory.role_zero_memory import RoleZeroLongTermMemory +from metagpt.core.schema import AIMessage, LongTermMemoryItem, Message, UserMessage class TestRoleZeroLongTermMemory: diff --git a/tests/metagpt/provider/mock_llm_config.py b/tests/metagpt/provider/mock_llm_config.py index f563dccad4..b8207cad41 100644 --- a/tests/metagpt/provider/mock_llm_config.py +++ b/tests/metagpt/provider/mock_llm_config.py @@ -6,7 +6,7 @@ @File : mock_llm_config.py """ -from metagpt.configs.llm_config import LLMConfig +from metagpt.core.configs.llm_config import LLMConfig mock_llm_config = LLMConfig( llm_type="mock", diff --git a/tests/metagpt/provider/postprocess/test_base_postprocess_plugin.py b/tests/metagpt/provider/postprocess/test_base_postprocess_plugin.py index 824bb88f39..ad90fc2c9e 100644 --- a/tests/metagpt/provider/postprocess/test_base_postprocess_plugin.py +++ b/tests/metagpt/provider/postprocess/test_base_postprocess_plugin.py @@ -3,7 +3,9 @@ # @Desc : -from metagpt.provider.postprocess.base_postprocess_plugin import BasePostProcessPlugin +from metagpt.core.provider.postprocess.base_postprocess_plugin import ( + BasePostProcessPlugin, +) raw_output = """ [CONTENT] diff --git a/tests/metagpt/provider/postprocess/test_llm_output_postprocess.py b/tests/metagpt/provider/postprocess/test_llm_output_postprocess.py index 40457b1863..ec08ac3bea 100644 --- a/tests/metagpt/provider/postprocess/test_llm_output_postprocess.py +++ b/tests/metagpt/provider/postprocess/test_llm_output_postprocess.py @@ -3,7 +3,9 @@ # @Desc : -from metagpt.provider.postprocess.llm_output_postprocess import llm_output_postprocess +from metagpt.core.provider.postprocess.llm_output_postprocess import ( + llm_output_postprocess, +) from tests.metagpt.provider.postprocess.test_base_postprocess_plugin import ( raw_output, raw_schema, diff --git a/tests/metagpt/provider/req_resp_const.py b/tests/metagpt/provider/req_resp_const.py index 111b57f915..10cb3d180c 100644 --- a/tests/metagpt/provider/req_resp_const.py +++ b/tests/metagpt/provider/req_resp_const.py @@ -28,7 +28,7 @@ from openai.types.completion_usage import CompletionUsage from qianfan.resources.typing import QfResponse -from metagpt.provider.base_llm import BaseLLM +from metagpt.core.provider.base_llm import BaseLLM prompt = "who are you?" messages = [{"role": "user", "content": prompt}] diff --git a/tests/metagpt/provider/test_base_llm.py b/tests/metagpt/provider/test_base_llm.py index 62083a769e..0426e8e5a7 100644 --- a/tests/metagpt/provider/test_base_llm.py +++ b/tests/metagpt/provider/test_base_llm.py @@ -8,11 +8,11 @@ import pytest -from metagpt.configs.compress_msg_config import CompressType -from metagpt.configs.llm_config import LLMConfig -from metagpt.const import IMAGES -from metagpt.provider.base_llm import BaseLLM -from metagpt.schema import AIMessage, Message, UserMessage +from metagpt.core.configs.compress_msg_config import CompressType +from metagpt.core.configs.llm_config import LLMConfig +from metagpt.core.const import IMAGES +from metagpt.core.provider.base_llm import BaseLLM +from metagpt.core.schema import AIMessage, Message, UserMessage from tests.metagpt.provider.mock_llm_config import mock_llm_config from tests.metagpt.provider.req_resp_const import ( default_resp_cont, diff --git a/tests/metagpt/provider/test_general_api_base.py b/tests/metagpt/provider/test_general_api_base.py index b8ab619f74..08b7137b36 100644 --- a/tests/metagpt/provider/test_general_api_base.py +++ b/tests/metagpt/provider/test_general_api_base.py @@ -10,7 +10,7 @@ import requests from openai import OpenAIError -from metagpt.provider.general_api_base import ( +from metagpt.core.provider.general_api_base import ( APIRequestor, ApiType, OpenAIResponse, @@ -121,7 +121,7 @@ def test_requestor_headers(): def test_api_requestor(mocker): - mocker.patch("metagpt.provider.general_api_base.APIRequestor._interpret_response", mock_interpret_response) + mocker.patch("metagpt.core.provider.general_api_base.APIRequestor._interpret_response", mock_interpret_response) resp, _, _ = api_requestor.request(method="get", url="/s?wd=baidu") resp, _, _ = api_requestor.request(method="post", url="/s?wd=baidu") @@ -130,7 +130,7 @@ def test_api_requestor(mocker): @pytest.mark.asyncio async def test_async_api_requestor(mocker): mocker.patch( - "metagpt.provider.general_api_base.APIRequestor._interpret_async_response", mock_interpret_async_response + "metagpt.core.provider.general_api_base.APIRequestor._interpret_async_response", mock_interpret_async_response ) resp, _, _ = await api_requestor.arequest(method="get", url="/s?wd=baidu") resp, _, _ = await api_requestor.arequest(method="post", url="/s?wd=baidu") diff --git a/tests/metagpt/provider/test_general_api_requestor.py b/tests/metagpt/provider/test_general_api_requestor.py index dcbcc05678..5717fcec8f 100644 --- a/tests/metagpt/provider/test_general_api_requestor.py +++ b/tests/metagpt/provider/test_general_api_requestor.py @@ -4,7 +4,7 @@ import pytest -from metagpt.provider.general_api_requestor import ( +from metagpt.core.provider.general_api_requestor import ( GeneralAPIRequestor, parse_stream, parse_stream_helper, diff --git a/tests/metagpt/provider/test_human_provider.py b/tests/metagpt/provider/test_human_provider.py index 97ed8bae6c..bfcc8d3796 100644 --- a/tests/metagpt/provider/test_human_provider.py +++ b/tests/metagpt/provider/test_human_provider.py @@ -4,7 +4,7 @@ import pytest -from metagpt.provider.human_provider import HumanProvider +from metagpt.core.provider.human_provider import HumanProvider from tests.metagpt.provider.mock_llm_config import mock_llm_config resp_content = "test" diff --git a/tests/metagpt/provider/test_ollama_api.py b/tests/metagpt/provider/test_ollama_api.py index 75cfa86d54..c71bca10b6 100644 --- a/tests/metagpt/provider/test_ollama_api.py +++ b/tests/metagpt/provider/test_ollama_api.py @@ -40,7 +40,7 @@ async def async_event_generator() -> AsyncGenerator[Any, None]: @pytest.mark.asyncio async def test_gemini_acompletion(mocker): - mocker.patch("metagpt.provider.general_api_requestor.GeneralAPIRequestor.arequest", mock_ollama_arequest) + mocker.patch("metagpt.core.provider.general_api_requestor.GeneralAPIRequestor.arequest", mock_ollama_arequest) ollama_llm = OllamaLLM(mock_llm_config) diff --git a/tests/metagpt/provider/test_openai.py b/tests/metagpt/provider/test_openai.py index d292a82861..37bf341948 100644 --- a/tests/metagpt/provider/test_openai.py +++ b/tests/metagpt/provider/test_openai.py @@ -9,10 +9,10 @@ from openai.types.chat.chat_completion_message_tool_call import Function from PIL import Image -from metagpt.configs.compress_msg_config import CompressType -from metagpt.const import TEST_DATA_PATH -from metagpt.llm import LLM -from metagpt.logs import logger +from metagpt.core.configs.compress_msg_config import CompressType +from metagpt.core.const import TEST_DATA_PATH +from metagpt.core.llm import LLM +from metagpt.core.logs import logger from metagpt.provider import OpenAILLM from tests.metagpt.provider.mock_llm_config import ( mock_llm_config, diff --git a/tests/metagpt/rag/factories/test_embedding.py b/tests/metagpt/rag/factories/test_embedding.py index 03bdfab1d9..41ce4cdedd 100644 --- a/tests/metagpt/rag/factories/test_embedding.py +++ b/tests/metagpt/rag/factories/test_embedding.py @@ -1,8 +1,8 @@ import pytest -from metagpt.config2 import Config -from metagpt.configs.embedding_config import EmbeddingType -from metagpt.configs.llm_config import LLMType +from metagpt.core.config2 import Config +from metagpt.core.configs.embedding_config import EmbeddingType +from metagpt.core.configs.llm_config import LLMType from metagpt.rag.factories.embedding import RAGEmbeddingFactory @@ -14,7 +14,7 @@ def mock_embedding_factory(self): @pytest.fixture def mock_config(self, mocker): config = Config.default().model_copy(deep=True) - default = mocker.patch("metagpt.config2.Config.default") + default = mocker.patch("metagpt.core.config2.Config.default") default.return_value = config return config diff --git a/tests/metagpt/rag/factories/test_llm.py b/tests/metagpt/rag/factories/test_llm.py index e11b87076c..d009e6a14f 100644 --- a/tests/metagpt/rag/factories/test_llm.py +++ b/tests/metagpt/rag/factories/test_llm.py @@ -3,9 +3,9 @@ import pytest from llama_index.core.llms import LLMMetadata -from metagpt.configs.llm_config import LLMConfig -from metagpt.const import USE_CONFIG_TIMEOUT -from metagpt.provider.base_llm import BaseLLM +from metagpt.core.configs.llm_config import LLMConfig +from metagpt.core.const import USE_CONFIG_TIMEOUT +from metagpt.core.provider.base_llm import BaseLLM from metagpt.rag.factories.llm import RAGLLM, get_rag_llm diff --git a/tests/metagpt/rag/parser/test_omniparse.py b/tests/metagpt/rag/parser/test_omniparse.py index d2b533d061..679e26dd3f 100644 --- a/tests/metagpt/rag/parser/test_omniparse.py +++ b/tests/metagpt/rag/parser/test_omniparse.py @@ -1,7 +1,7 @@ import pytest from llama_index.core import Document -from metagpt.const import EXAMPLE_DATA_PATH +from metagpt.core.const import EXAMPLE_DATA_PATH from metagpt.rag.parsers import OmniParse from metagpt.rag.schema import ( OmniParsedResult, diff --git a/tests/metagpt/rag/test_large_pdf.py b/tests/metagpt/rag/test_large_pdf.py index 4f343aa874..ea8cb5efe2 100644 --- a/tests/metagpt/rag/test_large_pdf.py +++ b/tests/metagpt/rag/test_large_pdf.py @@ -1,10 +1,10 @@ import pytest -from metagpt.config2 import Config -from metagpt.const import TEST_DATA_PATH +from metagpt.core.config2 import Config +from metagpt.core.const import TEST_DATA_PATH +from metagpt.core.utils.common import aread from metagpt.rag.engines import SimpleEngine from metagpt.rag.factories.embedding import RAGEmbeddingFactory -from metagpt.utils.common import aread @pytest.mark.skip diff --git a/tests/metagpt/roles/di/run_architect.py b/tests/metagpt/roles/di/run_architect.py index 455b60d92b..9cd2fe14f1 100644 --- a/tests/metagpt/roles/di/run_architect.py +++ b/tests/metagpt/roles/di/run_architect.py @@ -1,8 +1,8 @@ import asyncio import os +from metagpt.core.schema import Message from metagpt.roles.architect import Architect -from metagpt.schema import Message DESIGN_DOC_SNAKE = """ { diff --git a/tests/metagpt/roles/di/run_data_analyst.py b/tests/metagpt/roles/di/run_data_analyst.py index 247bc78070..e468bf4c0e 100644 --- a/tests/metagpt/roles/di/run_data_analyst.py +++ b/tests/metagpt/roles/di/run_data_analyst.py @@ -1,4 +1,4 @@ -from metagpt.roles.di.data_analyst import DataAnalyst +from metagpt.roles.data_analyst import DataAnalyst HOUSE_PRICE_TRAIN_PATH = "/data/house-prices-advanced-regression-techniques/split_train.csv" HOUSE_PRICE_EVAL_PATH = "/data/house-prices-advanced-regression-techniques/split_eval.csv" diff --git a/tests/metagpt/roles/di/run_engineer2.py b/tests/metagpt/roles/di/run_engineer2.py index a5ceec93e6..29853893c2 100644 --- a/tests/metagpt/roles/di/run_engineer2.py +++ b/tests/metagpt/roles/di/run_engineer2.py @@ -3,8 +3,8 @@ import uuid from pathlib import Path -from metagpt.logs import logger -from metagpt.roles.di.engineer2 import Engineer2 +from metagpt.core.logs import logger +from metagpt.roles.engineer2 import Engineer2 DESIGN_DOC_2048 = '{"Implementation approach":"We will use the Pygame library to implement the 2048 game logic and user interface. Pygame is a set of Python modules designed for writing video games, which will help us create a responsive and visually appealing UI. For the mobile responsiveness, we will ensure that the game scales appropriately on different screen sizes. We will also use the Pygame GUI library to create buttons for restarting the game and choosing difficulty levels.","File list":["main.py","game.py","ui.py"],"Data structures and interfaces":"\\nclassDiagram\\n class Game {\\n -grid: list[list[int]]\\n -score: int\\n +__init__()\\n +move(direction: str) bool\\n +merge() bool\\n +spawn_tile() None\\n +is_game_over() bool\\n +reset() None\\n }\\n class UI {\\n -game: Game\\n +__init__(game: Game)\\n +draw_grid() None\\n +draw_score() None\\n +draw_buttons() None\\n +handle_input() None\\n }\\n class Main {\\n -ui: UI\\n +main() None\\n }\\n Main --> UI\\n UI --> Game\\n","Program call flow":"\\nsequenceDiagram\\n participant M as Main\\n participant U as UI\\n participant G as Game\\n M->>U: __init__(game)\\n U->>G: __init__()\\n M->>U: draw_grid()\\n U->>G: move(direction)\\n G-->>U: return bool\\n U->>G: merge()\\n G-->>U: return bool\\n U->>G: spawn_tile()\\n G-->>U: return None\\n U->>G: is_game_over()\\n G-->>U: return bool\\n U->>G: reset()\\n G-->>U: return None\\n M->>U: draw_score()\\n M->>U: draw_buttons()\\n M->>U: handle_input()\\n","Anything UNCLEAR":"Clarification needed on the specific design elements for the UI to ensure it meets the \'beautiful\' requirement. Additionally, we need to confirm the exact difficulty levels and how they should affect the game mechanics."}' TASK_DOC_2048 = '{"Required Python packages":["pygame==2.0.1","pygame_gui==0.5.7"],"Required Other language third-party packages":["No third-party dependencies required"],"Logic Analysis":[["game.py","Contains Game class with methods: __init__, move, merge, spawn_tile, is_game_over, reset"],["ui.py","Contains UI class with methods: __init__, draw_grid, draw_score, draw_buttons, handle_input"],["main.py","Contains Main class with method: main, initializes UI and Game"]],"Task list":["game.py","ui.py","main.py"],"Full API spec":"","Shared Knowledge":"`game.py` contains core game logic and state management. `ui.py` handles all user interface elements and interactions. `main.py` serves as the entry point to initialize and run the game.","Anything UNCLEAR":"Clarification needed on the specific design elements for the UI to ensure it meets the \'beautiful\' requirement. Additionally, we need to confirm the exact difficulty levels and how they should affect the game mechanics."}' diff --git a/tests/metagpt/roles/di/run_product_manager.py b/tests/metagpt/roles/di/run_product_manager.py index bb230b7d99..a966e6c325 100644 --- a/tests/metagpt/roles/di/run_product_manager.py +++ b/tests/metagpt/roles/di/run_product_manager.py @@ -1,7 +1,7 @@ import asyncio import sys -from metagpt.logs import logger +from metagpt.core.logs import logger from metagpt.roles import ProductManager CASE0_WRITE_2048 = """Write a PRD for a cli 2048 game""" diff --git a/tests/metagpt/roles/di/run_project_manager.py b/tests/metagpt/roles/di/run_project_manager.py index 30889c59c6..290b3a40ba 100644 --- a/tests/metagpt/roles/di/run_project_manager.py +++ b/tests/metagpt/roles/di/run_project_manager.py @@ -1,8 +1,8 @@ import asyncio import os +from metagpt.core.schema import Message from metagpt.roles.project_manager import ProjectManager -from metagpt.schema import Message DESIGN_DOC_2048 = '{"Implementation approach":"We will use the Pygame library to implement the 2048 game logic and user interface. Pygame is a set of Python modules designed for writing video games, which will help us create a responsive and visually appealing UI. For the mobile responsiveness, we will ensure that the game scales appropriately on different screen sizes. We will also use the Pygame GUI library to create buttons for restarting the game and choosing difficulty levels.","File list":["main.py","game.py","ui.py"],"Data structures and interfaces":"\\nclassDiagram\\n class Game {\\n -grid: list[list[int]]\\n -score: int\\n +__init__()\\n +move(direction: str) bool\\n +merge() bool\\n +spawn_tile() None\\n +is_game_over() bool\\n +reset() None\\n }\\n class UI {\\n -game: Game\\n +__init__(game: Game)\\n +draw_grid() None\\n +draw_score() None\\n +draw_buttons() None\\n +handle_input() None\\n }\\n class Main {\\n -ui: UI\\n +main() None\\n }\\n Main --> UI\\n UI --> Game\\n","Program call flow":"\\nsequenceDiagram\\n participant M as Main\\n participant U as UI\\n participant G as Game\\n M->>U: __init__(game)\\n U->>G: __init__()\\n M->>U: draw_grid()\\n U->>G: move(direction)\\n G-->>U: return bool\\n U->>G: merge()\\n G-->>U: return bool\\n U->>G: spawn_tile()\\n G-->>U: return None\\n U->>G: is_game_over()\\n G-->>U: return bool\\n U->>G: reset()\\n G-->>U: return None\\n M->>U: draw_score()\\n M->>U: draw_buttons()\\n M->>U: handle_input()\\n","Anything UNCLEAR":"Clarification needed on the specific design elements for the UI to ensure it meets the \'beautiful\' requirement. Additionally, we need to confirm the exact difficulty levels and how they should affect the game mechanics."}' DESIGN_DOC_SNAKE = """ diff --git a/tests/metagpt/roles/di/run_swe_agent_for_benchmark.py b/tests/metagpt/roles/di/run_swe_agent_for_benchmark.py deleted file mode 100644 index ce4ef94a44..0000000000 --- a/tests/metagpt/roles/di/run_swe_agent_for_benchmark.py +++ /dev/null @@ -1,227 +0,0 @@ -import argparse -import asyncio -import json -import os -import shutil -import sys -from datetime import datetime -from pathlib import Path - -from metagpt.config2 import config -from metagpt.const import DEFAULT_WORKSPACE_ROOT, METAGPT_ROOT -from metagpt.logs import logger -from metagpt.roles.di.engineer2 import Engineer2 -from metagpt.tools.libs.editor import Editor -from metagpt.tools.libs.terminal import Terminal -from metagpt.tools.swe_agent_commands.swe_agent_utils import load_hf_dataset - -# Specify by yourself -TEST_REPO_DIR = METAGPT_ROOT / "data" / "test_repo" -DATA_DIR = METAGPT_ROOT / "data/hugging_face" - -INSTANCE_TEMPLATE = """ -## User Requirement -Fix the bug in the repo. Because the environment is not available, you DO NOT need to run and modify any existing test case files or add new test case files to ensure that the bug is fixed. - -We're currently solving the following issue within our repository. You can use any bash commands or the special interface to help you. Here's the issue and hints text: -## ISSUE -{issue} - -## HINTS -hints text is the comment under issue: -{hints_text} - -The repository may already exist at the path `{repo_path}`. If it doesn't, please download the repository to this path. -Your first action must be to navigate to the repository path `{repo_path}`. -This issue occurred in version {version}, with the corresponding base commit being {base_commit}. You need to switch to the code version associated with this commit. -All subsequent actions must be performed within this repository path. Do not leave this directory to execute any actions at any time. - -# INSTRUCTIONS: -Now, you're going to solve this issue on your own from the perspective of a programmer. Your terminal session has started and you're in the repository's root directory. You can use any bash commands or the special interface to help you. Edit all the files you need. -Remember, YOU CAN ONLY ENTER ONE COMMAND AT A TIME. You should always wait for feedback after every command. -""" - - -def check_instance_status(instance, swe_result_dir): - output_file = swe_result_dir / "all_preds.jsonl" - res = True - # 先检查all_preds.jsonl文件是否存在 - if not output_file.exists(): - return res - with open(output_file, "r") as fp: - for line in fp: - existing_instance = json.loads(line.strip()) - if existing_instance["instance_id"] == instance["instance_id"]: - return False - return True - - -async def terminal_run_command(cmd, terminal): - cmd_output = await terminal.run_command(cmd) - logger.info(f"command:{cmd} output:\n {cmd_output}") - return cmd_output - - -async def refresh_repo(instance, test_repo_dir, reclone_existing_repo=False): - terminal = Terminal() - try: - repo_path = Path(test_repo_dir) / ( - instance["repo"].replace("-", "_").replace("/", "__") + "_" + instance["version"] - ) - repo_identifier = instance["repo"] - base_commit = instance["base_commit"] - if os.path.exists(repo_path) and reclone_existing_repo is True: - logger.info(f"remove exist repo path:{repo_path.absolute()}") - shutil.rmtree(repo_path) - if os.path.exists(repo_path): - logger.info(f"reset exist repo path:{repo_path.absolute()}") - for cmd in [ - f"cd {repo_path.absolute()}", - "git reset --hard && git clean -n -d && git clean -f -d", - "BRANCH=$(git remote show origin | awk '/HEAD branch/ {print $NF}')", - 'git checkout "$BRANCH"', - "git branch", - "pwd", - ]: - await terminal_run_command(cmd, terminal) - else: - logger.info(f"clone repo to path:{repo_path}") - for cmd in [ - f"git clone 'https://github.com/{repo_identifier}.git' {repo_path.absolute()}", - f"cd {repo_path.absolute()}" + f" && git checkout -f {base_commit}" if base_commit else "", - "git branch", - "pwd", - ]: - await terminal_run_command(cmd, terminal) - except Exception as e: - logger.warning(e) - finally: - await terminal.close() - return repo_path - - -async def get_git_diff(instance, test_repo_dir): - git_diff = "" - terminal = Terminal() - try: - repo_path = Path(test_repo_dir) / ( - instance["repo"].replace("-", "_").replace("/", "__") + "_" + instance["version"] - ) - # ignore backup file and submit stage - for cmd in [f"cd {repo_path.absolute()} ", "echo '.backup.*' >> .gitignore", "git add -A"]: - await terminal_run_command(cmd, terminal) - git_diff = await terminal_run_command("git diff --cached", terminal) - except Exception as e: - logger.error(f"Error during submission: {e}") - finally: - await terminal.close() - return git_diff - - -async def run(instance, swe_result_dir, args): - if not check_instance_status(instance, swe_result_dir): - logger.info(f"Instance {instance['instance_id']} already exists, skipping execution.") - return - - # preparation for the repo - logger.info(f"**** Preparing to run {instance['instance_id']}****") - test_repo_dir = args.test_repo_dir - repo_path = await refresh_repo(instance, test_repo_dir, args.reclone_existing_repo) - - user_requirement_and_issue = INSTANCE_TEMPLATE.format( - issue=instance["problem_statement"], - hints_text=instance["hints_text"], - repo_path=repo_path.absolute(), - version=instance["version"], - base_commit=instance["base_commit"], - ) - - logger.info(f"**** Starting to run {instance['instance_id']}****") - logger.info("User Requirement:\n" + user_requirement_and_issue) - try: - editor = Editor(enable_auto_lint=True, working_dir=Path(repo_path)) - engineer = Engineer2(run_eval=True, editor=editor) - await asyncio.wait_for(engineer.run(user_requirement_and_issue), timeout=args.max_wait_time_per_case * 60) - except Exception as e: - logger.warning(f"**** exception lead to end: {instance['instance_id']}****\n\nerror:{e}") - # save the difference of repo - await save_predictions(engineer, instance, test_repo_dir, swe_result_dir) - logger.info(f"**** Finished running {instance['instance_id']}****") - - -async def save_predictions(engineer, instance, test_repo_dir, swe_result_dir): - output_file = swe_result_dir / "all_preds.jsonl" - instance["model_name_or_path"] = engineer.config.llm.model - instance["model_patch"] = await get_git_diff(instance, test_repo_dir) - logger.info(f"'model_patch':\n{instance['model_patch']}") - logger.info(f"Preparing to save predictions to {output_file}") - - # Save the predictions to a JSONL file - with open(output_file, "a+") as fp: - print(json.dumps(instance), file=fp, flush=True) - - logger.info(f"Saved prediction of {instance['instance_id']} to {output_file}") - - -async def async_main(args): - dataset_path = "manna-ai/SWE-bench_Nano" # "princeton-nlp/SWE-bench_Lite" #"manna-ai/SWE-bench_Nano" - dataset = load_hf_dataset(dataset_name_or_path=dataset_path, cache_dir=DATA_DIR, split="test") - swe_result_dir = Path(args.save_folder) - if swe_result_dir.exists(): - logger.info(f"{swe_result_dir} exists; resuming test from last checkpoint.") - swe_result_dir.mkdir(parents=True, exist_ok=True) - for index, instance in enumerate(dataset): - # switch to a new logger file - logger.remove() - logger.add(sys.stderr, level="INFO") - logger.add(swe_result_dir / "logs" / f"{index+1}_{instance['instance_id']}.log", level="DEBUG") - await run(instance, swe_result_dir, args) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description="the argument of scripts") - # 添加参数 - swe_result_dir = ( - DEFAULT_WORKSPACE_ROOT - / f"result_{config.llm.model.replace('/', '_')}_start_time_{datetime.now().strftime('%Y_%m_%d_%H_%M_%S') }" - ) - test_repo_dir = TEST_REPO_DIR.absolute() - swe_result_dir = swe_result_dir.absolute() - parser.add_argument( - "-rw", "--test_repo_dir", default=test_repo_dir, help="The directory to save temporary repositories", type=str - ) - parser.add_argument("-s", "--save_folder", default=swe_result_dir, help="Folder to save results and logs", type=str) - parser.add_argument( - "-mwtc", - "--max_wait_time_per_case", - default=10, - help="Maximum wait time allowed per test case (in minutes)", - type=int, - ) - parser.add_argument( - "-o", - "--reclone_existing_repo", - action="store_true", - help="If set, the existing repository will be removed and recloned.", - ) - # 解析命令行参数 - args = parser.parse_args() - asyncio.run(async_main(args)) - - -""" -# -python tests/metagpt/roles/di/run_swe_agent_for_benchmark.py \ ---test_repo_dir "./data/test_repo" \ ---save_folder "./workspace/deepseek_coder_0907" \ ---max_wait_time_per_case 10 -""" - -""" -# 重新克隆仓库 -python tests/metagpt/roles/di/run_swe_agent_for_benchmark.py \ ---test_repo_dir "./data/test_repo" \ ---save_folder "./workspace/deepseek_coder_0907" \ ---max_wait_time_per_case 10 \ ---reclone_existing_repo -""" diff --git a/tests/metagpt/roles/di/run_swe_agent_open_source_issue.py b/tests/metagpt/roles/di/run_swe_agent_open_source_issue.py deleted file mode 100644 index ec87dd7e2c..0000000000 --- a/tests/metagpt/roles/di/run_swe_agent_open_source_issue.py +++ /dev/null @@ -1,44 +0,0 @@ -import asyncio - -from metagpt.logs import logger -from metagpt.roles.di.swe_agent import SWEAgent - -FIX_ISSUE1 = """ -Write a fix for this issue: https://github.com/langchain-ai/langchain/issues/20453, -you can fix it on this repo https://github.com/garylin2099/langchain -""" -# + "checkout a branch named test-fix, commit your changes, push, -# and create a PR to the master branch of https://github.com/iorisa/langchain" -# """ -FIX_ISSUE2 = """ -Write a fix for this issue https://github.com/geekan/MetaGPT/issues/1275. -You can fix it on the v0.8-release branch of this repo https://github.com/garylin2099/MetaGPT -""" -# + "during fixing, checkout a branch named test-fix-1275, commit your changes, push, -# and create a PR to the v0.8-release branch of https://github.com/garylin2099/MetaGPT" - -FIX_ISSUE3 = """ -Write a fix for this issue https://github.com/geekan/MetaGPT/issues/1262. -You can fix it on this repo https://github.com/garylin2099/MetaGPT -""" -# during fixing, checkout a branch named test-fix-1262, commit your changes, push, -# and create a PR to https://github.com/garylin2099/MetaGPT -# """ -FIX_ISSUE_SIMPLE = """ -Write a fix for this issue: https://github.com/mannaandpoem/simple_calculator/issues/1, -you can fix it on this repo https://github.com/garylin2099/simple_calculator -""" -# checkout a branch named test, commit your changes, push, and create a PR to the master branch of original repo. -# """ - - -NO_ENV_TIP = """ -Because the environment is not available, you DO NOT need to run and modify any existing test case files or -add new test case files to ensure that the bug is fixed. -""" -if __name__ == "__main__": - swe_agent = SWEAgent() - logger.info("**** Starting run ****") - user_requirement_and_issue = FIX_ISSUE1 + NO_ENV_TIP - asyncio.run(swe_agent.run(user_requirement_and_issue)) - logger.info("**** Finished running ****") diff --git a/tests/metagpt/roles/di/test_data_analyst.py b/tests/metagpt/roles/di/test_data_analyst.py index 9bf2c13cf2..99d176c4d2 100644 --- a/tests/metagpt/roles/di/test_data_analyst.py +++ b/tests/metagpt/roles/di/test_data_analyst.py @@ -2,10 +2,10 @@ import pytest -from metagpt.actions.di.execute_nb_code import ExecuteNbCode -from metagpt.actions.di.write_analysis_code import WriteAnalysisCode -from metagpt.logs import logger -from metagpt.roles.di.data_analyst import DataAnalyst +from metagpt.actions.execute_nb_code import ExecuteNbCode +from metagpt.actions.write_analysis_code import WriteAnalysisCode +from metagpt.core.logs import logger +from metagpt.roles.data_analyst import DataAnalyst from metagpt.tools.tool_recommend import BM25ToolRecommender diff --git a/tests/metagpt/roles/di/test_data_interpreter.py b/tests/metagpt/roles/di/test_data_interpreter.py index e5cc5b29ba..aeb92a5668 100644 --- a/tests/metagpt/roles/di/test_data_interpreter.py +++ b/tests/metagpt/roles/di/test_data_interpreter.py @@ -1,7 +1,7 @@ import pytest -from metagpt.logs import logger -from metagpt.roles.di.data_interpreter import DataInterpreter +from metagpt.core.logs import logger +from metagpt.roles.data_interpreter import DataInterpreter @pytest.mark.asyncio diff --git a/tests/metagpt/roles/di/test_role_zero.py b/tests/metagpt/roles/di/test_role_zero.py index 610d3a8398..3c4a781694 100644 --- a/tests/metagpt/roles/di/test_role_zero.py +++ b/tests/metagpt/roles/di/test_role_zero.py @@ -1,9 +1,9 @@ import pytest from metagpt.actions import UserRequirement -from metagpt.logs import logger -from metagpt.roles.di.role_zero import RoleZero -from metagpt.schema import Message +from metagpt.core.logs import logger +from metagpt.core.schema import Message +from metagpt.roles.role_zero import RoleZero @pytest.mark.asyncio diff --git a/tests/metagpt/roles/di/test_routing.py b/tests/metagpt/roles/di/test_routing.py index 0cd94e5716..2f0901b00d 100644 --- a/tests/metagpt/roles/di/test_routing.py +++ b/tests/metagpt/roles/di/test_routing.py @@ -1,12 +1,12 @@ import asyncio +from metagpt.core.logs import logger +from metagpt.core.schema import Message from metagpt.environment.mgx.mgx_env import MGXEnv -from metagpt.logs import logger from metagpt.roles import Architect, ProductManager, ProjectManager -from metagpt.roles.di.data_analyst import DataAnalyst -from metagpt.roles.di.engineer2 import Engineer2 -from metagpt.roles.di.team_leader import TeamLeader -from metagpt.schema import Message +from metagpt.roles.data_analyst import DataAnalyst +from metagpt.roles.engineer2 import Engineer2 +from metagpt.roles.team_leader import TeamLeader NORMAL_QUESTION = [ "create a 2048 game", diff --git a/tests/metagpt/roles/di/test_swe_agent.py b/tests/metagpt/roles/di/test_swe_agent.py deleted file mode 100644 index 3dbfa910b7..0000000000 --- a/tests/metagpt/roles/di/test_swe_agent.py +++ /dev/null @@ -1,42 +0,0 @@ -import pytest - -from metagpt.environment.mgx.mgx_env import MGXEnv -from metagpt.roles.di.swe_agent import SWEAgent -from metagpt.roles.di.team_leader import TeamLeader -from metagpt.schema import Message -from metagpt.tools.libs.terminal import Bash - - -@pytest.fixture -def env(): - test_env = MGXEnv() - tl = TeamLeader() - test_env.add_roles([tl, SWEAgent()]) - return test_env - - -@pytest.mark.asyncio -async def test_swe_agent(env): - requirement = "Fix bug in the calculator app" - swe = env.get_role("Swen") - - message = Message(content=requirement, send_to={swe.name}) - env.publish_message(message) - - await swe.run() - - history = env.history.get() - agent_messages = [msg for msg in history if msg.sent_from == swe.name] - - assert swe.name == "Swen" - assert swe.profile == "Issue Solver" - assert isinstance(swe.terminal, Bash) - - assert "Bash" in swe.tools - assert "git_create_pull" in swe.tool_execution_map - - def is_valid_instruction_message(msg: Message) -> bool: - content = msg.content.lower() - return any(word in content for word in ["git", "bash", "check", "fix"]) - - assert any(is_valid_instruction_message(msg) for msg in agent_messages), "Should have valid instruction messages" diff --git a/tests/metagpt/roles/di/test_team_leader.py b/tests/metagpt/roles/di/test_team_leader.py index b09bea9dce..c842895cc0 100644 --- a/tests/metagpt/roles/di/test_team_leader.py +++ b/tests/metagpt/roles/di/test_team_leader.py @@ -1,5 +1,6 @@ import pytest +from metagpt.core.schema import Message from metagpt.environment.mgx.mgx_env import MGXEnv from metagpt.roles import ( Architect, @@ -8,9 +9,8 @@ ProjectManager, QaEngineer, ) -from metagpt.roles.di.data_interpreter import DataInterpreter -from metagpt.roles.di.team_leader import TeamLeader -from metagpt.schema import Message +from metagpt.roles.data_interpreter import DataInterpreter +from metagpt.roles.team_leader import TeamLeader @pytest.fixture diff --git a/tests/metagpt/roles/mock.py b/tests/metagpt/roles/mock.py index 40e2f8c077..ec67030f85 100644 --- a/tests/metagpt/roles/mock.py +++ b/tests/metagpt/roles/mock.py @@ -8,7 +8,7 @@ import json from metagpt.actions import UserRequirement, WriteDesign, WritePRD, WriteTasks -from metagpt.schema import Message +from metagpt.core.schema import Message USER_REQUIREMENT = """开发一个基于大语言模型与私有知识库的搜索引擎,希望可以基于大语言模型进行搜索总结""" diff --git a/tests/metagpt/roles/test_architect.py b/tests/metagpt/roles/test_architect.py index cb636b6a1c..40c976ac32 100644 --- a/tests/metagpt/roles/test_architect.py +++ b/tests/metagpt/roles/test_architect.py @@ -13,12 +13,12 @@ import pytest from metagpt.actions import WritePRD -from metagpt.actions.di.run_command import RunCommand -from metagpt.const import PRDS_FILE_REPO -from metagpt.logs import logger +from metagpt.actions.run_command import RunCommand +from metagpt.core.const import PRDS_FILE_REPO +from metagpt.core.logs import logger +from metagpt.core.schema import Message +from metagpt.core.utils.common import any_to_str, awrite from metagpt.roles import Architect -from metagpt.schema import Message -from metagpt.utils.common import any_to_str, awrite from tests.metagpt.roles.mock import MockMessages diff --git a/tests/metagpt/roles/test_assistant.py b/tests/metagpt/roles/test_assistant.py deleted file mode 100644 index 0f67dff461..0000000000 --- a/tests/metagpt/roles/test_assistant.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/12/25 -@Author : mashenquan -@File : test_asssistant.py -@Desc : Used by AgentStore. -""" - -import pytest -from pydantic import BaseModel - -from metagpt.actions.skill_action import SkillAction -from metagpt.actions.talk_action import TalkAction -from metagpt.memory.brain_memory import BrainMemory -from metagpt.roles.assistant import Assistant -from metagpt.schema import Message -from metagpt.utils.common import any_to_str - - -@pytest.mark.asyncio -async def test_run(mocker, context): - # mock - mocker.patch("metagpt.learn.text_to_image", return_value="http://mock.com/1.png") - - context.kwargs.language = "Chinese" - - class Input(BaseModel): - memory: BrainMemory - language: str - agent_description: str - cause_by: str - agent_skills: list - - agent_skills = [ - {"id": 1, "name": "text_to_speech", "type": "builtin", "config": {}, "enabled": True}, - {"id": 2, "name": "text_to_image", "type": "builtin", "config": {}, "enabled": True}, - {"id": 3, "name": "ai_call", "type": "builtin", "config": {}, "enabled": True}, - {"id": 3, "name": "data_analysis", "type": "builtin", "config": {}, "enabled": True}, - {"id": 5, "name": "crawler", "type": "builtin", "config": {"engine": "ddg"}, "enabled": True}, - {"id": 6, "name": "knowledge", "type": "builtin", "config": {}, "enabled": True}, - {"id": 6, "name": "web_search", "type": "builtin", "config": {}, "enabled": True}, - ] - - inputs = [ - { - "memory": { - "history": [ - { - "content": "who is tulin", - "role": "user", - "id": "1", - }, - {"content": "The one who eaten a poison apple.", "role": "assistant"}, - ], - "knowledge": [{"content": "tulin is a scientist."}], - "last_talk": "Do you have a poison apple?", - }, - "language": "English", - "agent_description": "chatterbox", - "cause_by": any_to_str(TalkAction), - "agent_skills": [], - }, - { - "memory": { - "history": [ - { - "content": "can you draw me an picture?", - "role": "user", - "id": "1", - }, - {"content": "Yes, of course. What do you want me to draw", "role": "assistant"}, - ], - "knowledge": [{"content": "tulin is a scientist."}], - "last_talk": "Draw me an apple.", - }, - "language": "English", - "agent_description": "painter", - "cause_by": any_to_str(SkillAction), - "agent_skills": agent_skills, - }, - ] - - for i in inputs: - seed = Input(**i) - role = Assistant(language="Chinese", context=context) - role.context.kwargs.language = seed.language - role.context.kwargs.agent_description = seed.agent_description - role.context.kwargs.agent_skills = seed.agent_skills - - role.memory = seed.memory # Restore historical conversation content. - while True: - has_action = await role.think() - if not has_action: - break - msg: Message = await role.act() - # logger.info(msg) - assert msg - assert msg.cause_by == seed.cause_by - assert msg.content - - -@pytest.mark.parametrize( - "memory", - [ - { - "history": [ - { - "content": "can you draw me an picture?", - "role": "user", - "id": "1", - }, - {"content": "Yes, of course. What do you want me to draw", "role": "assistant"}, - ], - "knowledge": [{"content": "tulin is a scientist."}], - "last_talk": "Draw me an apple.", - } - ], -) -@pytest.mark.asyncio -async def test_memory(memory, context): - role = Assistant(context=context) - role.context.kwargs.agent_skills = [] - role.load_memory(memory) - - val = role.get_memory() - assert val - - await role.talk("draw apple") - await role.think() - assert isinstance(role.rc.todo, TalkAction) - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/roles/test_engineer.py b/tests/metagpt/roles/test_engineer.py index 18b297ae54..8628ab5521 100644 --- a/tests/metagpt/roles/test_engineer.py +++ b/tests/metagpt/roles/test_engineer.py @@ -14,11 +14,15 @@ import pytest from metagpt.actions import WriteCode, WriteTasks -from metagpt.const import REQUIREMENT_FILENAME, SYSTEM_DESIGN_FILE_REPO, TASK_FILE_REPO -from metagpt.logs import logger +from metagpt.core.const import ( + REQUIREMENT_FILENAME, + SYSTEM_DESIGN_FILE_REPO, + TASK_FILE_REPO, +) +from metagpt.core.logs import logger +from metagpt.core.schema import CodingContext, Message +from metagpt.core.utils.common import CodeParser, any_to_name, any_to_str, aread, awrite from metagpt.roles.engineer import Engineer -from metagpt.schema import CodingContext, Message -from metagpt.utils.common import CodeParser, any_to_name, any_to_str, aread, awrite from metagpt.utils.git_repository import ChangeType from metagpt.utils.project_repo import ProjectRepo from tests.metagpt.roles.mock import STRS_FOR_PARSING, TASKS, MockMessages diff --git a/tests/metagpt/roles/test_invoice_ocr_assistant.py b/tests/metagpt/roles/test_invoice_ocr_assistant.py deleted file mode 100644 index bedcd67121..0000000000 --- a/tests/metagpt/roles/test_invoice_ocr_assistant.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python3 -# _*_ coding: utf-8 _*_ - -""" -@Time : 2023/9/21 23:11:27 -@Author : Stitch-z -@File : test_invoice_ocr_assistant.py -""" - -from pathlib import Path - -import pandas as pd -import pytest - -from metagpt.const import DATA_PATH, TEST_DATA_PATH -from metagpt.roles.invoice_ocr_assistant import InvoiceOCRAssistant, InvoicePath -from metagpt.schema import Message - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - ("query", "invoice_path", "invoice_table_path", "expected_result"), - [ - ( - "Invoicing date", - Path("invoices/invoice-1.pdf"), - Path("invoice_table/invoice-1.xlsx"), - {"收款人": "小明", "城市": "深圳", "总费用/元": 412.00, "开票日期": "2023年02月03日"}, - ), - ( - "Invoicing date", - Path("invoices/invoice-2.png"), - Path("invoice_table/invoice-2.xlsx"), - {"收款人": "铁头", "城市": "广州", "总费用/元": 898.00, "开票日期": "2023年03月17日"}, - ), - ( - "Invoicing date", - Path("invoices/invoice-3.jpg"), - Path("invoice_table/invoice-3.xlsx"), - {"收款人": "夏天", "城市": "福州", "总费用/元": 2462.00, "开票日期": "2023年08月26日"}, - ), - ], -) -async def test_invoice_ocr_assistant( - query: str, invoice_path: Path, invoice_table_path: Path, expected_result: dict, context -): - invoice_path = TEST_DATA_PATH / invoice_path - role = InvoiceOCRAssistant(context=context) - await role.run(Message(content=query, instruct_content=InvoicePath(file_path=invoice_path))) - invoice_table_path = DATA_PATH / invoice_table_path - df = pd.read_excel(invoice_table_path) - resp = df.to_dict(orient="records") - assert isinstance(resp, list) - assert len(resp) == 1 - resp = resp[0] - assert expected_result["收款人"] == resp["收款人"] - assert expected_result["城市"] in resp["城市"] - assert float(expected_result["总费用/元"]) == float(resp["总费用/元"]) - assert expected_result["开票日期"] == resp["开票日期"] diff --git a/tests/metagpt/roles/test_product_manager.py b/tests/metagpt/roles/test_product_manager.py index 77df9af40b..cec170ab55 100644 --- a/tests/metagpt/roles/test_product_manager.py +++ b/tests/metagpt/roles/test_product_manager.py @@ -10,10 +10,10 @@ import pytest from metagpt.actions import WritePRD -from metagpt.context import Context -from metagpt.logs import logger +from metagpt.core.context import Context +from metagpt.core.logs import logger +from metagpt.core.utils.common import any_to_str from metagpt.roles import ProductManager -from metagpt.utils.common import any_to_str from metagpt.utils.git_repository import GitRepository from tests.metagpt.roles.mock import MockMessages diff --git a/tests/metagpt/roles/test_project_manager.py b/tests/metagpt/roles/test_project_manager.py index a27ce846be..a00b24673d 100644 --- a/tests/metagpt/roles/test_project_manager.py +++ b/tests/metagpt/roles/test_project_manager.py @@ -7,7 +7,7 @@ """ import pytest -from metagpt.logs import logger +from metagpt.core.logs import logger from metagpt.roles import ProjectManager from tests.metagpt.roles.mock import MockMessages diff --git a/tests/metagpt/roles/test_qa_engineer.py b/tests/metagpt/roles/test_qa_engineer.py index b89e7d5ebc..99af6c0e00 100644 --- a/tests/metagpt/roles/test_qa_engineer.py +++ b/tests/metagpt/roles/test_qa_engineer.py @@ -13,10 +13,10 @@ from metagpt.actions import DebugError, RunCode, WriteTest from metagpt.actions.summarize_code import SummarizeCode +from metagpt.core.schema import Message +from metagpt.core.utils.common import any_to_str, aread, awrite from metagpt.environment import Environment from metagpt.roles import QaEngineer -from metagpt.schema import Message -from metagpt.utils.common import any_to_str, aread, awrite async def test_qa(context): diff --git a/tests/metagpt/roles/test_researcher.py b/tests/metagpt/roles/test_researcher.py deleted file mode 100644 index 9ce3bc23b8..0000000000 --- a/tests/metagpt/roles/test_researcher.py +++ /dev/null @@ -1,71 +0,0 @@ -import tempfile -from pathlib import Path -from random import random -from tempfile import TemporaryDirectory - -import pytest - -from metagpt.actions.research import CollectLinks -from metagpt.roles import researcher -from metagpt.team import Team -from metagpt.tools import SearchEngineType -from metagpt.tools.search_engine import SearchEngine - - -async def mock_llm_ask(self, prompt: str, system_msgs): - if "Please provide up to 2 necessary keywords" in prompt: - return '["dataiku", "datarobot"]' - elif "Provide up to 4 queries related to your research topic" in prompt: - return ( - '["Dataiku machine learning platform", "DataRobot AI platform comparison", ' - '"Dataiku vs DataRobot features", "Dataiku and DataRobot use cases"]' - ) - elif "sort the remaining search results" in prompt: - return "[1,2]" - elif "Not relevant." in prompt: - return "Not relevant" if random() > 0.5 else prompt[-100:] - elif "provide a detailed research report" in prompt: - return f"# Research Report\n## Introduction\n{prompt}" - return "" - - -@pytest.mark.asyncio -async def test_researcher(mocker, search_engine_mocker, context): - with TemporaryDirectory() as dirname: - topic = "dataiku vs. datarobot" - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", mock_llm_ask) - researcher.RESEARCH_PATH = Path(dirname) - role = researcher.Researcher(context=context) - for i in role.actions: - if isinstance(i, CollectLinks): - i.search_engine = SearchEngine(engine=SearchEngineType.DUCK_DUCK_GO) - await role.run(topic) - assert (researcher.RESEARCH_PATH / f"{topic}.md").read_text().startswith("# Research Report") - - -def test_write_report(mocker, context): - with TemporaryDirectory() as dirname: - for i, topic in enumerate( - [ - ("1./metagpt"), - ('2.:"metagpt'), - ("3.*?<>|metagpt"), - ("4. metagpt\n"), - ] - ): - researcher.RESEARCH_PATH = Path(dirname) - content = "# Research Report" - researcher.Researcher(context=context).write_report(topic, content) - assert (researcher.RESEARCH_PATH / f"{i+1}. metagpt.md").read_text().startswith("# Research Report") - - -@pytest.mark.asyncio -async def test_serialize(): - team = Team() - team.hire([researcher.Researcher()]) - with tempfile.TemporaryDirectory() as dirname: - team.serialize(Path(dirname) / "team.json") - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/roles/test_role.py b/tests/metagpt/roles/test_role.py index 47d1fc6dea..46c5d63e99 100644 --- a/tests/metagpt/roles/test_role.py +++ b/tests/metagpt/roles/test_role.py @@ -3,9 +3,9 @@ # @Desc : unittest of Role import pytest -from metagpt.provider.human_provider import HumanProvider -from metagpt.roles.role import Role -from metagpt.schema import Message, UserMessage +from metagpt.core.provider.human_provider import HumanProvider +from metagpt.core.roles.role import Role +from metagpt.core.schema import Message, UserMessage def test_role_desc(): diff --git a/tests/metagpt/roles/test_teacher.py b/tests/metagpt/roles/test_teacher.py deleted file mode 100644 index 83a7e382ad..0000000000 --- a/tests/metagpt/roles/test_teacher.py +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/7/27 13:25 -@Author : mashenquan -@File : test_teacher.py -""" -from typing import Dict, Optional - -import pytest -from pydantic import BaseModel, Field - -from metagpt.context import Context -from metagpt.roles.teacher import Teacher -from metagpt.schema import Message - - -@pytest.mark.asyncio -async def test_init(): - class Inputs(BaseModel): - name: str - profile: str - goal: str - constraints: str - desc: str - kwargs: Optional[Dict] = None - expect_name: str - expect_profile: str - expect_goal: str - expect_constraints: str - expect_desc: str - exclude: list = Field(default_factory=list) - - inputs = [ - { - "name": "Lily{language}", - "expect_name": "Lily{language}", - "profile": "X {teaching_language}", - "expect_profile": "X {teaching_language}", - "goal": "Do {something_big}, {language}", - "expect_goal": "Do {something_big}, {language}", - "constraints": "Do in {key1}, {language}", - "expect_constraints": "Do in {key1}, {language}", - "kwargs": {}, - "desc": "aaa{language}", - "expect_desc": "aaa{language}", - "exclude": ["language", "key1", "something_big", "teaching_language"], - }, - { - "name": "Lily{language}", - "expect_name": "LilyCN", - "profile": "X {teaching_language}", - "expect_profile": "X EN", - "goal": "Do {something_big}, {language}", - "expect_goal": "Do sleep, CN", - "constraints": "Do in {key1}, {language}", - "expect_constraints": "Do in HaHa, CN", - "kwargs": {"language": "CN", "key1": "HaHa", "something_big": "sleep", "teaching_language": "EN"}, - "desc": "aaa{language}", - "expect_desc": "aaaCN", - "language": "CN", - "teaching_language": "EN", - }, - ] - - for i in inputs: - seed = Inputs(**i) - context = Context() - for k in seed.exclude: - context.kwargs.set(k, None) - for k, v in seed.kwargs.items(): - context.kwargs.set(k, v) - - teacher = Teacher( - context=context, - name=seed.name, - profile=seed.profile, - goal=seed.goal, - constraints=seed.constraints, - desc=seed.desc, - ) - assert teacher.name == seed.expect_name - assert teacher.desc == seed.expect_desc - assert teacher.profile == seed.expect_profile - assert teacher.goal == seed.expect_goal - assert teacher.constraints == seed.expect_constraints - assert teacher.course_title == "teaching_plan" - - -@pytest.mark.asyncio -async def test_new_file_name(): - class Inputs(BaseModel): - lesson_title: str - ext: str - expect: str - - inputs = [ - {"lesson_title": "# @344\n12", "ext": ".md", "expect": "_344_12.md"}, - {"lesson_title": "1#@$%!*&\\/:*?\"<>|\n\t '1", "ext": ".cc", "expect": "1_1.cc"}, - ] - for i in inputs: - seed = Inputs(**i) - result = Teacher.new_file_name(seed.lesson_title, seed.ext) - assert result == seed.expect - - -@pytest.mark.asyncio -async def test_run(): - lesson = """ - UNIT 1 Making New Friends - TOPIC 1 Welcome to China! - Section A - - 1a Listen and number the following names. - Jane Mari Kangkang Michael - Look, listen and understand. Then practice the conversation. - Work in groups. Introduce yourself using - I ’m ... Then practice 1a - with your own hometown or the following places. - - 1b Listen and number the following names - Jane Michael Maria Kangkang - 1c Work in groups. Introduce yourself using I ’m ... Then practice 1a with your own hometown or the following places. - China the USA the UK Hong Kong Beijing - - 2a Look, listen and understand. Then practice the conversation - Hello! - Hello! - Hello! - Hello! Are you Maria? - No, I’m not. I’m Jane. - Oh, nice to meet you, Jane - Nice to meet you, too. - Hi, Maria! - Hi, Kangkang! - Welcome to China! - Thanks. - - 2b Work in groups. Make up a conversation with your own name and the - following structures. - A: Hello! / Good morning! / Hi! I’m ... Are you ... ? - B: ... - - 3a Listen, say and trace - Aa Bb Cc Dd Ee Ff Gg - - 3b Listen and number the following letters. Then circle the letters with the same sound as Bb. - Aa Bb Cc Dd Ee Ff Gg - - 3c Match the big letters with the small ones. Then write them on the lines. - """ - context = Context() - context.kwargs.language = "Chinese" - context.kwargs.teaching_language = "English" - teacher = Teacher(context=context) - rsp = await teacher.run(Message(content=lesson)) - assert rsp - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/roles/test_tutorial_assistant.py b/tests/metagpt/roles/test_tutorial_assistant.py deleted file mode 100644 index 732f346fd0..0000000000 --- a/tests/metagpt/roles/test_tutorial_assistant.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python3 -# _*_ coding: utf-8 _*_ -""" -@Time : 2023/9/6 23:11:27 -@Author : Stitch-z -@File : test_tutorial_assistant.py -""" - -import pytest - -from metagpt.const import TUTORIAL_PATH -from metagpt.roles.tutorial_assistant import TutorialAssistant -from metagpt.utils.common import aread - - -@pytest.mark.asyncio -@pytest.mark.parametrize(("language", "topic"), [("Chinese", "Write a tutorial about pip")]) -async def test_tutorial_assistant(language: str, topic: str, context): - role = TutorialAssistant(language=language, context=context) - msg = await role.run(topic) - assert TUTORIAL_PATH.exists() - filename = msg.content - content = await aread(filename=filename) - assert "pip" in content - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/serialize_deserialize/test_action.py b/tests/metagpt/serialize_deserialize/test_action.py index d234a160f1..30cdd47d86 100644 --- a/tests/metagpt/serialize_deserialize/test_action.py +++ b/tests/metagpt/serialize_deserialize/test_action.py @@ -4,7 +4,7 @@ # @Desc : import pytest -from metagpt.actions import Action +from metagpt.core.actions import Action @pytest.mark.asyncio diff --git a/tests/metagpt/serialize_deserialize/test_architect.py b/tests/metagpt/serialize_deserialize/test_architect.py index e3c2703fad..d747953b5d 100644 --- a/tests/metagpt/serialize_deserialize/test_architect.py +++ b/tests/metagpt/serialize_deserialize/test_architect.py @@ -4,7 +4,7 @@ # @Desc : import pytest -from metagpt.actions.action import Action +from metagpt.core.actions import Action from metagpt.roles.architect import Architect diff --git a/tests/metagpt/serialize_deserialize/test_environment.py b/tests/metagpt/serialize_deserialize/test_environment.py index 3138346d67..f96aae46c7 100644 --- a/tests/metagpt/serialize_deserialize/test_environment.py +++ b/tests/metagpt/serialize_deserialize/test_environment.py @@ -3,13 +3,13 @@ # @Desc : import pytest -from metagpt.actions.action_node import ActionNode -from metagpt.actions.add_requirement import UserRequirement from metagpt.actions.project_management import WriteTasks +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.actions.add_requirement import UserRequirement +from metagpt.core.schema import Message +from metagpt.core.utils.common import any_to_str, read_json_file, write_json_file from metagpt.environment import Environment from metagpt.roles.project_manager import ProjectManager -from metagpt.schema import Message -from metagpt.utils.common import any_to_str, read_json_file, write_json_file from tests.metagpt.serialize_deserialize.test_serdeser_base import ( ActionOK, ActionRaise, diff --git a/tests/metagpt/serialize_deserialize/test_memory.py b/tests/metagpt/serialize_deserialize/test_memory.py index 560ae2c51b..7d83ea5ac0 100644 --- a/tests/metagpt/serialize_deserialize/test_memory.py +++ b/tests/metagpt/serialize_deserialize/test_memory.py @@ -4,12 +4,12 @@ from pydantic import BaseModel -from metagpt.actions.action_node import ActionNode -from metagpt.actions.add_requirement import UserRequirement from metagpt.actions.design_api import WriteDesign -from metagpt.memory.memory import Memory -from metagpt.schema import Message -from metagpt.utils.common import any_to_str, read_json_file, write_json_file +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.actions.add_requirement import UserRequirement +from metagpt.core.memory.base import Memory +from metagpt.core.schema import Message +from metagpt.core.utils.common import any_to_str, read_json_file, write_json_file from tests.metagpt.serialize_deserialize.test_serdeser_base import serdeser_path diff --git a/tests/metagpt/serialize_deserialize/test_polymorphic.py b/tests/metagpt/serialize_deserialize/test_polymorphic.py index e5f8ec8d62..3e64d707d7 100644 --- a/tests/metagpt/serialize_deserialize/test_polymorphic.py +++ b/tests/metagpt/serialize_deserialize/test_polymorphic.py @@ -5,7 +5,7 @@ from pydantic import BaseModel, ConfigDict, SerializeAsAny -from metagpt.actions import Action +from metagpt.core.actions import Action from tests.metagpt.serialize_deserialize.test_serdeser_base import ( ActionOKV2, ActionPass, diff --git a/tests/metagpt/serialize_deserialize/test_prepare_interview.py b/tests/metagpt/serialize_deserialize/test_prepare_interview.py deleted file mode 100644 index a3e3edafc5..0000000000 --- a/tests/metagpt/serialize_deserialize/test_prepare_interview.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# @Desc : - -import pytest - -from metagpt.actions.action_node import ActionNode -from metagpt.actions.prepare_interview import PrepareInterview - - -@pytest.mark.asyncio -async def test_action_serdeser(context): - action = PrepareInterview(context=context) - serialized_data = action.model_dump() - assert serialized_data["name"] == "PrepareInterview" - - new_action = PrepareInterview(**serialized_data, context=context) - - assert new_action.name == "PrepareInterview" - assert type(await new_action.run("python developer")) == ActionNode diff --git a/tests/metagpt/serialize_deserialize/test_product_manager.py b/tests/metagpt/serialize_deserialize/test_product_manager.py index 2338b406de..73b8f03d43 100644 --- a/tests/metagpt/serialize_deserialize/test_product_manager.py +++ b/tests/metagpt/serialize_deserialize/test_product_manager.py @@ -4,9 +4,9 @@ # @Desc : import pytest -from metagpt.actions.action import Action +from metagpt.core.actions import Action +from metagpt.core.schema import Message from metagpt.roles.product_manager import ProductManager -from metagpt.schema import Message @pytest.mark.asyncio diff --git a/tests/metagpt/serialize_deserialize/test_project_manager.py b/tests/metagpt/serialize_deserialize/test_project_manager.py index fb998ae312..77c0fabbb0 100644 --- a/tests/metagpt/serialize_deserialize/test_project_manager.py +++ b/tests/metagpt/serialize_deserialize/test_project_manager.py @@ -4,8 +4,8 @@ # @Desc : import pytest -from metagpt.actions.action import Action from metagpt.actions.project_management import WriteTasks +from metagpt.core.actions import Action from metagpt.roles.project_manager import ProjectManager diff --git a/tests/metagpt/serialize_deserialize/test_reasearcher.py b/tests/metagpt/serialize_deserialize/test_reasearcher.py deleted file mode 100644 index 67c52e6920..0000000000 --- a/tests/metagpt/serialize_deserialize/test_reasearcher.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# @Desc : - -import pytest - -from metagpt.actions import CollectLinks -from metagpt.roles.researcher import Researcher - - -@pytest.mark.asyncio -async def test_tutorial_assistant_serdeser(context): - role = Researcher(context=context) - ser_role_dict = role.model_dump() - assert "name" in ser_role_dict - assert "language" in ser_role_dict - - new_role = Researcher(**ser_role_dict, context=context) - assert new_role.language == "en-us" - assert len(new_role.actions) == 3 - assert isinstance(new_role.actions[0], CollectLinks) - - # todo: 需要测试不同的action失败下,记忆是否正常保存 diff --git a/tests/metagpt/serialize_deserialize/test_role.py b/tests/metagpt/serialize_deserialize/test_role.py index 807849751a..dd6be6aedc 100644 --- a/tests/metagpt/serialize_deserialize/test_role.py +++ b/tests/metagpt/serialize_deserialize/test_role.py @@ -9,13 +9,17 @@ from pydantic import BaseModel, SerializeAsAny from metagpt.actions import WriteCode -from metagpt.actions.add_requirement import UserRequirement -from metagpt.logs import logger +from metagpt.core.actions.add_requirement import UserRequirement +from metagpt.core.logs import logger +from metagpt.core.roles.role import Role +from metagpt.core.schema import Message +from metagpt.core.utils.common import ( + format_trackback_info, + read_json_file, + write_json_file, +) from metagpt.roles.engineer import Engineer from metagpt.roles.product_manager import ProductManager -from metagpt.roles.role import Role -from metagpt.schema import Message -from metagpt.utils.common import format_trackback_info, read_json_file, write_json_file from tests.metagpt.serialize_deserialize.test_serdeser_base import ( ActionOK, RoleA, diff --git a/tests/metagpt/serialize_deserialize/test_schema.py b/tests/metagpt/serialize_deserialize/test_schema.py index c5a457a1e9..a340b08a32 100644 --- a/tests/metagpt/serialize_deserialize/test_schema.py +++ b/tests/metagpt/serialize_deserialize/test_schema.py @@ -3,10 +3,16 @@ # @Desc : unittest of schema ser&deser import pytest -from metagpt.actions.action_node import ActionNode from metagpt.actions.write_code import WriteCode -from metagpt.schema import CodingContext, Document, Documents, Message, TestingContext -from metagpt.utils.common import any_to_str +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.schema import ( + CodingContext, + Document, + Documents, + Message, + TestingContext, +) +from metagpt.core.utils.common import any_to_str from tests.metagpt.serialize_deserialize.test_serdeser_base import ( MockICMessage, MockMessage, diff --git a/tests/metagpt/serialize_deserialize/test_serdeser_base.py b/tests/metagpt/serialize_deserialize/test_serdeser_base.py index 84058925eb..885480d6b8 100644 --- a/tests/metagpt/serialize_deserialize/test_serdeser_base.py +++ b/tests/metagpt/serialize_deserialize/test_serdeser_base.py @@ -8,10 +8,11 @@ from pydantic import BaseModel, Field -from metagpt.actions import Action, ActionOutput, UserRequirement -from metagpt.actions.action_node import ActionNode from metagpt.actions.fix_bug import FixBug -from metagpt.roles.role import Role, RoleReactMode +from metagpt.core.actions import Action, ActionOutput +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.actions.add_requirement import UserRequirement +from metagpt.core.roles.role import Role, RoleReactMode serdeser_path = Path(__file__).absolute().parent.joinpath("..", "..", "data", "serdeser_storage") diff --git a/tests/metagpt/serialize_deserialize/test_team.py b/tests/metagpt/serialize_deserialize/test_team.py index 6312e1fde4..3793b85350 100644 --- a/tests/metagpt/serialize_deserialize/test_team.py +++ b/tests/metagpt/serialize_deserialize/test_team.py @@ -8,11 +8,11 @@ import pytest -from metagpt.context import Context -from metagpt.logs import logger +from metagpt.core.context import Context +from metagpt.core.logs import logger +from metagpt.core.utils.common import write_json_file from metagpt.roles import Architect, ProductManager, ProjectManager from metagpt.team import Team -from metagpt.utils.common import write_json_file from tests.metagpt.serialize_deserialize.test_serdeser_base import ( ActionOK, RoleA, diff --git a/tests/metagpt/serialize_deserialize/test_tutorial_assistant.py b/tests/metagpt/serialize_deserialize/test_tutorial_assistant.py deleted file mode 100644 index ab5db4c579..0000000000 --- a/tests/metagpt/serialize_deserialize/test_tutorial_assistant.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# @Desc : -import pytest - -from metagpt.actions.write_tutorial import WriteDirectory -from metagpt.roles.tutorial_assistant import TutorialAssistant - - -@pytest.mark.asyncio -async def test_tutorial_assistant_serdeser(context): - role = TutorialAssistant() - ser_role_dict = role.model_dump() - assert "name" in ser_role_dict - assert "language" in ser_role_dict - assert "topic" in ser_role_dict - - new_role = TutorialAssistant(**ser_role_dict) - assert new_role.name == "Stitch" - assert len(new_role.actions) == 1 - assert isinstance(new_role.actions[0], WriteDirectory) diff --git a/tests/metagpt/serialize_deserialize/test_write_code.py b/tests/metagpt/serialize_deserialize/test_write_code.py index 2f3c08f9ba..f064d99623 100644 --- a/tests/metagpt/serialize_deserialize/test_write_code.py +++ b/tests/metagpt/serialize_deserialize/test_write_code.py @@ -6,7 +6,7 @@ import pytest from metagpt.actions import WriteCode -from metagpt.schema import CodingContext, Document +from metagpt.core.schema import CodingContext, Document def test_write_design_serdeser(context): diff --git a/tests/metagpt/serialize_deserialize/test_write_code_review.py b/tests/metagpt/serialize_deserialize/test_write_code_review.py index 4ced53ce84..398f547cdf 100644 --- a/tests/metagpt/serialize_deserialize/test_write_code_review.py +++ b/tests/metagpt/serialize_deserialize/test_write_code_review.py @@ -5,7 +5,7 @@ import pytest from metagpt.actions import WriteCodeReview -from metagpt.schema import CodingContext, Document +from metagpt.core.schema import CodingContext, Document @pytest.mark.asyncio diff --git a/tests/metagpt/serialize_deserialize/test_write_prd.py b/tests/metagpt/serialize_deserialize/test_write_prd.py index e4951efb71..5f78d87364 100644 --- a/tests/metagpt/serialize_deserialize/test_write_prd.py +++ b/tests/metagpt/serialize_deserialize/test_write_prd.py @@ -6,7 +6,7 @@ import pytest from metagpt.actions import WritePRD -from metagpt.schema import Message +from metagpt.core.schema import Message @pytest.mark.asyncio diff --git a/tests/metagpt/serialize_deserialize/test_write_review.py b/tests/metagpt/serialize_deserialize/test_write_review.py index de2fd9d7aa..c830b4451b 100644 --- a/tests/metagpt/serialize_deserialize/test_write_review.py +++ b/tests/metagpt/serialize_deserialize/test_write_review.py @@ -2,8 +2,8 @@ # @Desc : import pytest -from metagpt.actions.action_node import ActionNode from metagpt.actions.write_review import WriteReview +from metagpt.core.actions.action_node import ActionNode TEMPLATE_CONTEXT = """ { diff --git a/tests/metagpt/serialize_deserialize/test_write_tutorial.py b/tests/metagpt/serialize_deserialize/test_write_tutorial.py deleted file mode 100644 index d41b7b341c..0000000000 --- a/tests/metagpt/serialize_deserialize/test_write_tutorial.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# @Desc : -from typing import Dict - -import pytest - -from metagpt.actions.write_tutorial import WriteContent, WriteDirectory - - -@pytest.mark.asyncio -@pytest.mark.parametrize(("language", "topic"), [("English", "Write a tutorial about Python")]) -async def test_write_directory_serdeser(language: str, topic: str, context): - action = WriteDirectory(context=context) - serialized_data = action.model_dump() - assert serialized_data["name"] == "WriteDirectory" - assert serialized_data["language"] == "Chinese" - - new_action = WriteDirectory(**serialized_data, context=context) - ret = await new_action.run(topic=topic) - assert isinstance(ret, dict) - assert "title" in ret - assert "directory" in ret - assert isinstance(ret["directory"], list) - assert len(ret["directory"]) - assert isinstance(ret["directory"][0], dict) - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - ("language", "topic", "directory"), - [("English", "Write a tutorial about Python", {"Introduction": ["What is Python?", "Why learn Python?"]})], -) -async def test_write_content_serdeser(language: str, topic: str, directory: Dict, context): - action = WriteContent(language=language, directory=directory, context=context) - serialized_data = action.model_dump() - assert serialized_data["name"] == "WriteContent" - - new_action = WriteContent(**serialized_data, context=context) - ret = await new_action.run(topic=topic) - assert isinstance(ret, str) - assert list(directory.keys())[0] in ret - for value in list(directory.values())[0]: - assert value in ret diff --git a/tests/metagpt/strategy/examples/test_creative_writing.py b/tests/metagpt/strategy/examples/test_creative_writing.py deleted file mode 100644 index ff1d4147cd..0000000000 --- a/tests/metagpt/strategy/examples/test_creative_writing.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 12/25/2023 1:06 PM -# @Author : stellahong (stellahong@fuzhi.ai) -# @Desc : -import re -from typing import Dict - -from metagpt.strategy.tot import TreeofThought -from metagpt.strategy.tot_schema import ( - BaseEvaluator, - BaseParser, - Strategy, - ThoughtSolverConfig, -) -from tests.metagpt.strategy.prompt_templates.creative_writing import ( - cot_prompt, - vote_prompt, -) - - -class TextGenParser(BaseParser): - propose_prompt: str = cot_prompt - value_prompt: str = vote_prompt - - def __call__(self, input_text: str) -> str: - return input_text - - def propose(self, current_state: str, **kwargs) -> str: - return self.propose_prompt.format(input=current_state, **kwargs) - - def value(self, input: str = "", **kwargs) -> str: - # node_result = self(input) - id = kwargs.get("node_id", "0") - return self.value_prompt + f"Choice {id}:\n{input}\n" - - -class TextGenEvaluator(BaseEvaluator): - value_map: Dict[str, float] = {"impossible": 0.001, "likely": 1, "sure": 20} # TODO: ad hoc - status_map: Dict = {val: key for key, val in value_map.items()} - - def __call__(self, evaluation: str, **kwargs) -> float: - try: - value = 0 - node_id = kwargs.get("node_id", "0") - pattern = r".*best choice is .*(\d+).*" - match = re.match(pattern, evaluation, re.DOTALL) - - if match: - vote = int(match.groups()[0]) - print(vote) - if vote == int(node_id): - value = 1 - except: - value = 0 - return value - - def status_verify(self, value): - status = False - if value in self.status_map: - status_value = self.status_map[value] - if status_value != "impossible": - status = True - return status - - -def test_creative_writing(): - import asyncio - - initial_prompt = """It isn't difficult to do a handstand if you just stand on your hands. It caught him off guard that space smelled of seared steak. When she didn’t like a guy who was trying to pick her up, she started using sign language. Each person who knows you has a different perception of who you are.""" - - parser = TextGenParser() - evaluator = TextGenEvaluator() - - config = ThoughtSolverConfig(max_step=2, n_generate_sample=1, n_select_sample=1, parser=parser, evaluator=evaluator) - - tot_base = TreeofThought(strategy=Strategy.BFS, config=config) - asyncio.run(tot_base.solve(init_prompt=initial_prompt)) diff --git a/tests/metagpt/strategy/examples/test_game24.py b/tests/metagpt/strategy/examples/test_game24.py deleted file mode 100644 index c26c8da88d..0000000000 --- a/tests/metagpt/strategy/examples/test_game24.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 12/25/2023 1:36 AM -# @Author : stellahong (stellahong@fuzhi.ai) -# @Desc : -import re -from typing import Dict - -from metagpt.strategy.tot import TreeofThought -from metagpt.strategy.tot_schema import ( - BaseEvaluator, - BaseParser, - Strategy, - ThoughtSolverConfig, -) -from tests.metagpt.strategy.prompt_templates.game24 import propose_prompt, value_prompt - - -class Game24Parser(BaseParser): - propose_prompt: str = propose_prompt - value_prompt: str = value_prompt - - def __call__(self, input_text: str) -> str: - last_line = input_text.strip().split("\n")[-1] - return last_line.split("left: ")[-1].split(")")[0] - - def propose(self, current_state: str, **kwargs) -> str: - return self.propose_prompt.format(input=current_state, **kwargs) - - def value(self, input: str = "", **kwargs) -> str: - node_result = self(input) - return self.value_prompt.format(input=node_result) - - -class Game24Evaluator(BaseEvaluator): - value_map: Dict[str, float] = {"impossible": 0.001, "likely": 1, "sure": 20} # TODO: ad hoc - status_map: Dict = {val: key for key, val in value_map.items()} - - def __call__(self, evaluation: str, **kwargs) -> float: - try: - matches = re.findall(r"\b(impossible|sure|likely)\b", evaluation) - value = self.value_map[matches[0]] - except: - value = 0.001 - return value - - def status_verify(self, value): - status = False - if value in self.status_map: - status_value = self.status_map[value] - if status_value != "impossible": - status = True - return status - - -def test_game24(): - import asyncio - - initial_prompt = """4 5 6 10""" - parser = Game24Parser() - evaluator = Game24Evaluator() - - config = ThoughtSolverConfig(n_generate_sample=5, parser=parser, evaluator=evaluator) - - tot = TreeofThought(strategy=Strategy.BFS, config=config) - asyncio.run(tot.solve(init_prompt=initial_prompt)) diff --git a/tests/metagpt/strategy/test_planner.py b/tests/metagpt/strategy/test_planner.py index ff1c6da3f6..5e9c196960 100644 --- a/tests/metagpt/strategy/test_planner.py +++ b/tests/metagpt/strategy/test_planner.py @@ -1,4 +1,4 @@ -from metagpt.schema import Plan, Task +from metagpt.core.schema import Plan, Task from metagpt.strategy.planner import Planner from metagpt.strategy.task_type import TaskType diff --git a/tests/metagpt/strategy/test_solver.py b/tests/metagpt/strategy/test_solver.py deleted file mode 100644 index eae4a5a2a3..0000000000 --- a/tests/metagpt/strategy/test_solver.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/1/31 13:54 -@Author : alexanderwu -@File : test_solver.py -""" -import pytest - -from metagpt.actions.action_graph import ActionGraph -from metagpt.llm import LLM -from metagpt.strategy.search_space import SearchSpace -from metagpt.strategy.solver import NaiveSolver - - -@pytest.mark.asyncio -async def test_solver(): - from metagpt.actions.write_prd_an import ( - COMPETITIVE_ANALYSIS, - ISSUE_TYPE, - PRODUCT_GOALS, - REQUIREMENT_POOL, - ) - - graph = ActionGraph() - graph.add_node(ISSUE_TYPE) - graph.add_node(PRODUCT_GOALS) - graph.add_node(COMPETITIVE_ANALYSIS) - graph.add_node(REQUIREMENT_POOL) - graph.add_edge(ISSUE_TYPE, PRODUCT_GOALS) - graph.add_edge(PRODUCT_GOALS, COMPETITIVE_ANALYSIS) - graph.add_edge(PRODUCT_GOALS, REQUIREMENT_POOL) - graph.add_edge(COMPETITIVE_ANALYSIS, REQUIREMENT_POOL) - search_space = SearchSpace() - llm = LLM() - context = "Create a 2048 game" - solver = NaiveSolver(graph, search_space, llm, context) - await solver.solve() - - print("## graph.nodes") - print(graph.nodes) - for k, v in graph.nodes.items(): - print(f"{v.key} | prevs: {[i.key for i in v.prevs]} | nexts: {[i.key for i in v.nexts]}") - - assert len(graph.nodes) == 4 - assert len(graph.execution_order) == 4 - assert graph.execution_order == [ISSUE_TYPE.key, PRODUCT_GOALS.key, COMPETITIVE_ANALYSIS.key, REQUIREMENT_POOL.key] diff --git a/tests/metagpt/test_config.py b/tests/metagpt/test_config.py index 797daf5dc4..70a9912560 100644 --- a/tests/metagpt/test_config.py +++ b/tests/metagpt/test_config.py @@ -6,8 +6,8 @@ @File : test_config.py """ -from metagpt.config2 import Config -from metagpt.configs.llm_config import LLMType +from metagpt.core.config2 import Config +from metagpt.core.configs.llm_config import LLMType from tests.metagpt.provider.mock_llm_config import mock_llm_config diff --git a/tests/metagpt/test_context.py b/tests/metagpt/test_context.py index a6daf95cd2..bdd3c1f593 100644 --- a/tests/metagpt/test_context.py +++ b/tests/metagpt/test_context.py @@ -5,8 +5,8 @@ @Author : alexanderwu @File : test_context.py """ -from metagpt.configs.llm_config import LLMType -from metagpt.context import AttrDict, Context +from metagpt.core.configs.llm_config import LLMType +from metagpt.core.context import AttrDict, Context def test_attr_dict_1(): diff --git a/tests/metagpt/test_context_mixin.py b/tests/metagpt/test_context_mixin.py index e0b9d3e646..a3f22c9cd4 100644 --- a/tests/metagpt/test_context_mixin.py +++ b/tests/metagpt/test_context_mixin.py @@ -10,12 +10,12 @@ import pytest from pydantic import BaseModel -from metagpt.actions import Action -from metagpt.config2 import Config -from metagpt.const import CONFIG_ROOT -from metagpt.context_mixin import ContextMixin +from metagpt.core.actions import Action +from metagpt.core.config2 import Config +from metagpt.core.const import CONFIG_ROOT +from metagpt.core.context_mixin import ContextMixin +from metagpt.core.roles import Role from metagpt.environment import Environment -from metagpt.roles import Role from metagpt.team import Team from tests.metagpt.provider.mock_llm_config import ( mock_llm_config, diff --git a/tests/metagpt/test_document.py b/tests/metagpt/test_document.py index 9c076f4e69..40f9259ddc 100644 --- a/tests/metagpt/test_document.py +++ b/tests/metagpt/test_document.py @@ -5,9 +5,9 @@ @Author : alexanderwu @File : test_document.py """ -from metagpt.config2 import config +from metagpt.core.config2 import config +from metagpt.core.logs import logger from metagpt.document import Repo -from metagpt.logs import logger def set_existing_repo(path): diff --git a/tests/metagpt/test_environment.py b/tests/metagpt/test_environment.py index 98a222bf19..ad8ba6440c 100644 --- a/tests/metagpt/test_environment.py +++ b/tests/metagpt/test_environment.py @@ -12,9 +12,11 @@ from metagpt.actions import UserRequirement from metagpt.actions.prepare_documents import PrepareDocuments -from metagpt.context import Context +from metagpt.core.context import Context +from metagpt.core.logs import logger +from metagpt.core.schema import Message, UserMessage +from metagpt.core.utils.common import any_to_str, is_send_to from metagpt.environment import Environment -from metagpt.logs import logger from metagpt.roles import ( Architect, Engineer, @@ -23,8 +25,6 @@ QaEngineer, Role, ) -from metagpt.schema import Message, UserMessage -from metagpt.utils.common import any_to_str, is_send_to serdeser_path = Path(__file__).absolute().parent.joinpath("../data/serdeser_storage") diff --git a/tests/metagpt/test_incremental_dev.py b/tests/metagpt/test_incremental_dev.py index 3322df2343..19ffb7f063 100644 --- a/tests/metagpt/test_incremental_dev.py +++ b/tests/metagpt/test_incremental_dev.py @@ -13,8 +13,8 @@ import pytest from typer.testing import CliRunner -from metagpt.const import TEST_DATA_PATH -from metagpt.logs import logger +from metagpt.core.const import TEST_DATA_PATH +from metagpt.core.logs import logger from metagpt.software_company import app runner = CliRunner() diff --git a/tests/metagpt/test_llm.py b/tests/metagpt/test_llm.py index d46a29c7fa..d9cfe93c81 100644 --- a/tests/metagpt/test_llm.py +++ b/tests/metagpt/test_llm.py @@ -8,7 +8,7 @@ import pytest -from metagpt.llm import LLM +from metagpt.core.llm import LLM @pytest.fixture() diff --git a/tests/metagpt/test_message.py b/tests/metagpt/test_message.py index cf6f744dcb..6874720092 100644 --- a/tests/metagpt/test_message.py +++ b/tests/metagpt/test_message.py @@ -8,7 +8,7 @@ """ import pytest -from metagpt.schema import AIMessage, Message, SystemMessage, UserMessage +from metagpt.core.schema import AIMessage, Message, SystemMessage, UserMessage def test_message(): diff --git a/tests/metagpt/test_prompt.py b/tests/metagpt/test_prompt.py index f7b1cc68eb..8aa018b948 100644 --- a/tests/metagpt/test_prompt.py +++ b/tests/metagpt/test_prompt.py @@ -8,7 +8,7 @@ import pytest -from metagpt.llm import LLM +from metagpt.core.llm import LLM CODE_REVIEW_SMALLEST_CONTEXT = """ ## game.js diff --git a/tests/metagpt/test_repo_parser.py b/tests/metagpt/test_repo_parser.py index c2ec4d8194..c78344f9f5 100644 --- a/tests/metagpt/test_repo_parser.py +++ b/tests/metagpt/test_repo_parser.py @@ -3,8 +3,8 @@ import pytest -from metagpt.const import METAGPT_ROOT -from metagpt.logs import logger +from metagpt.core.const import METAGPT_ROOT +from metagpt.core.logs import logger from metagpt.repo_parser import DotClassAttribute, DotClassMethod, DotReturn, RepoParser @@ -13,7 +13,7 @@ def test_repo_parser(): symbols = repo_parser.generate_symbols() logger.info(pformat(symbols)) - assert "tot_schema.py" in str(symbols) + assert "planner.py" in str(symbols) output_path = repo_parser.generate_structure(mode="json") assert output_path.exists() @@ -93,8 +93,8 @@ def test_parse_member(v, name, type_, default_, compositions): "BaseEvaluator|\n|status_verify()\n", ), ( - '"metagpt.configs.browser_config.BrowserConfig" [color="black", fontcolor="black", label=<{BrowserConfig|browser : Literal[\'chrome\', \'firefox\', \'edge\', \'ie\']
driver : Literal[\'chromium\', \'firefox\', \'webkit\']
engine
path : str
|}>, shape="record", style="solid"];', - "metagpt.configs.browser_config.BrowserConfig", + '"metagpt.core.configs.browser_config.BrowserConfig" [color="black", fontcolor="black", label=<{BrowserConfig|browser : Literal[\'chrome\', \'firefox\', \'edge\', \'ie\']
driver : Literal[\'chromium\', \'firefox\', \'webkit\']
engine
path : str
|}>, shape="record", style="solid"];', + "metagpt.core.configs.browser_config.BrowserConfig", "BrowserConfig|browser : Literal['chrome', 'firefox', 'edge', 'ie']\ndriver : Literal['chromium', 'firefox', 'webkit']\nengine\npath : str\n|", ), ( diff --git a/tests/metagpt/test_reporter.py b/tests/metagpt/test_reporter.py index 41d9634487..7590360ecd 100644 --- a/tests/metagpt/test_reporter.py +++ b/tests/metagpt/test_reporter.py @@ -4,8 +4,8 @@ import aiohttp.web import pytest -from metagpt.logs import log_llm_stream -from metagpt.utils.report import ( +from metagpt.core.logs import log_llm_stream +from metagpt.core.utils.report import ( END_MARKER_NAME, BlockType, BrowserReporter, diff --git a/tests/metagpt/test_role.py b/tests/metagpt/test_role.py index 7e707803bc..736b4d2cb3 100644 --- a/tests/metagpt/test_role.py +++ b/tests/metagpt/test_role.py @@ -15,12 +15,13 @@ import pytest from pydantic import BaseModel -from metagpt.actions import Action, ActionOutput, UserRequirement +from metagpt.core.actions import Action, ActionOutput +from metagpt.core.actions.add_requirement import UserRequirement +from metagpt.core.provider.base_llm import BaseLLM +from metagpt.core.roles import Role +from metagpt.core.schema import Message +from metagpt.core.utils.common import any_to_name, any_to_str from metagpt.environment import Environment -from metagpt.provider.base_llm import BaseLLM -from metagpt.roles import Role -from metagpt.schema import Message -from metagpt.utils.common import any_to_name, any_to_str class MockAction(Action): @@ -39,7 +40,7 @@ def __init__(self, name="", profile="", goal="", constraints="", desc=""): def test_basic(): mock_role = MockRole() assert mock_role.addresses == ({"tests.metagpt.test_role.MockRole"}) - assert mock_role.rc.watch == {"metagpt.actions.add_requirement.UserRequirement"} + assert mock_role.rc.watch == {"metagpt.core.actions.add_requirement.UserRequirement"} mock_role = MockRole(name="mock_role") assert mock_role.addresses == {"tests.metagpt.test_role.MockRole", "mock_role"} diff --git a/tests/metagpt/test_schema.py b/tests/metagpt/test_schema.py index bc2bdd02a5..11c981622c 100644 --- a/tests/metagpt/test_schema.py +++ b/tests/metagpt/test_schema.py @@ -14,11 +14,11 @@ import pytest from pydantic import BaseModel, Field -from metagpt.actions import Action -from metagpt.actions.action_node import ActionNode from metagpt.actions.write_code import WriteCode -from metagpt.const import SERDESER_PATH, SYSTEM_DESIGN_FILE_REPO, TASK_FILE_REPO -from metagpt.schema import ( +from metagpt.core.actions import Action +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.const import SERDESER_PATH, SYSTEM_DESIGN_FILE_REPO, TASK_FILE_REPO +from metagpt.core.schema import ( AIMessage, CodeSummarizeContext, Document, @@ -28,12 +28,10 @@ SerializationMixin, SystemMessage, Task, - UMLClassAttribute, - UMLClassMethod, - UMLClassView, UserMessage, ) -from metagpt.utils.common import any_to_str +from metagpt.core.utils.common import any_to_str +from metagpt.uml_schema import UMLClassAttribute, UMLClassMethod, UMLClassView def test_messages(): @@ -115,7 +113,7 @@ def test_message_serdeser(): message_dict = message.model_dump() new_message = Message(**message_dict) assert new_message.instruct_content is None - assert new_message.cause_by == "metagpt.actions.add_requirement.UserRequirement" + assert new_message.cause_by == "metagpt.core.actions.add_requirement.UserRequirement" assert not Message.load("{") @@ -413,11 +411,11 @@ class TestUserModelWithExclude(TestUserModel): class TestSerializationMixin: @pytest.fixture def mock_write_json_file(self, mocker): - return mocker.patch("metagpt.schema.write_json_file") + return mocker.patch("metagpt.core.schema.write_json_file") @pytest.fixture def mock_read_json_file(self, mocker): - return mocker.patch("metagpt.schema.read_json_file") + return mocker.patch("metagpt.core.schema.read_json_file") @pytest.fixture def mock_user_model(self): diff --git a/tests/metagpt/test_software_company.py b/tests/metagpt/test_software_company.py index 7c1741cca1..bf766c0e5f 100644 --- a/tests/metagpt/test_software_company.py +++ b/tests/metagpt/test_software_company.py @@ -8,7 +8,7 @@ import pytest from typer.testing import CliRunner -from metagpt.logs import logger +from metagpt.core.logs import logger from metagpt.software_company import app from metagpt.team import Team diff --git a/tests/metagpt/test_subscription.py b/tests/metagpt/test_subscription.py index b902d5416e..4839ff35d8 100644 --- a/tests/metagpt/test_subscription.py +++ b/tests/metagpt/test_subscription.py @@ -2,8 +2,8 @@ import pytest -from metagpt.roles import Role -from metagpt.schema import Message +from metagpt.core.roles import Role +from metagpt.core.schema import Message from metagpt.subscription import SubscriptionRunner diff --git a/tests/metagpt/tools/libs/test_browser.py b/tests/metagpt/tools/libs/test_browser.py index dd699e5e98..b9203c1c5e 100644 --- a/tests/metagpt/tools/libs/test_browser.py +++ b/tests/metagpt/tools/libs/test_browser.py @@ -3,7 +3,7 @@ import pytest import pytest_asyncio -from metagpt.const import TEST_DATA_PATH +from metagpt.core.const import TEST_DATA_PATH from metagpt.tools.libs.browser import Browser TEST_URL = "https://docs.deepwisdom.ai/main/en/guide/get_started/quickstart.html" diff --git a/tests/metagpt/tools/libs/test_cr.py b/tests/metagpt/tools/libs/test_cr.py index 788062211f..42220eadd1 100644 --- a/tests/metagpt/tools/libs/test_cr.py +++ b/tests/metagpt/tools/libs/test_cr.py @@ -29,7 +29,7 @@ async def setup(self): self.cr = CodeReview() @patch("aiofiles.open", new_callable=MagicMock) - @patch("metagpt.utils.report.EditorReporter.async_report", new_callable=AsyncMock) + @patch("metagpt.core.utils.report.EditorReporter.async_report", new_callable=AsyncMock) @patch("metagpt.ext.cr.actions.code_review.CodeReview.run", new_callable=AsyncMock) async def test_review(self, mock_run, mock_report, mock_aiofiles_open): """Test the review method with a local patch file.""" diff --git a/tests/metagpt/tools/libs/test_data_preprocess.py b/tests/metagpt/tools/libs/test_data_preprocess.py deleted file mode 100644 index 418f8adeee..0000000000 --- a/tests/metagpt/tools/libs/test_data_preprocess.py +++ /dev/null @@ -1,111 +0,0 @@ -from datetime import datetime - -import numpy as np -import numpy.testing as npt -import pandas as pd -import pytest - -from metagpt.tools.libs.data_preprocess import ( - FillMissingValue, - LabelEncode, - MaxAbsScale, - MinMaxScale, - OneHotEncode, - OrdinalEncode, - RobustScale, - StandardScale, - get_column_info, -) - - -@pytest.fixture -def mock_datasets(): - return pd.DataFrame( - { - "num1": [1, 2, np.nan, 4, 5], - "cat1": ["A", "B", np.nan, "D", "A"], - "date1": [ - datetime(2020, 1, 1), - datetime(2020, 1, 2), - datetime(2020, 1, 3), - datetime(2020, 1, 4), - datetime(2020, 1, 5), - ], - } - ) - - -def test_fill_missing_value(mock_datasets): - fm = FillMissingValue(features=["num1"], strategy="mean") - transformed = fm.fit_transform(mock_datasets.copy()) - - assert transformed["num1"].isnull().sum() == 0 - - -def test_min_max_scale(mock_datasets): - mms = MinMaxScale(features=["num1"]) - transformed = mms.fit_transform(mock_datasets.copy()) - - npt.assert_allclose(transformed["num1"].min(), 0) - npt.assert_allclose(transformed["num1"].max(), 1) - - -def test_standard_scale(mock_datasets): - ss = StandardScale(features=["num1"]) - transformed = ss.fit_transform(mock_datasets.copy()) - - assert int(transformed["num1"].mean()) == 0 - assert int(transformed["num1"].std()) == 1 - - -def test_max_abs_scale(mock_datasets): - mas = MaxAbsScale(features=["num1"]) - transformed = mas.fit_transform(mock_datasets.copy()) - - npt.assert_allclose(transformed["num1"].abs().max(), 1) - - -def test_robust_scale(mock_datasets): - rs = RobustScale(features=["num1"]) - transformed = rs.fit_transform(mock_datasets.copy()) - - assert int(transformed["num1"].median()) == 0 - - -def test_ordinal_encode(mock_datasets): - oe = OrdinalEncode(features=["cat1"]) - transformed = oe.fit_transform(mock_datasets.copy()) - - assert transformed["cat1"].max() == 2 - - -def test_one_hot_encode(mock_datasets): - ohe = OneHotEncode(features=["cat1"]) - transformed = ohe.fit_transform(mock_datasets.copy()) - - assert transformed["cat1_A"].max() == 1 - - -def test_label_encode(mock_datasets): - le = LabelEncode(features=["cat1"]) - transformed = le.fit_transform(mock_datasets.copy()) - - assert transformed["cat1"].max() == 3 - - # test transform with unseen data - test = mock_datasets.copy() - test["cat1"] = ["A", "B", "C", "D", "E"] - transformed = le.transform(test) - assert transformed["cat1"].max() == 4 - - -def test_get_column_info(mock_datasets): - df = mock_datasets - column_info = get_column_info(df) - - assert column_info == { - "Category": ["cat1"], - "Numeric": ["num1"], - "Datetime": ["date1"], - "Others": [], - } diff --git a/tests/metagpt/tools/libs/test_editor.py b/tests/metagpt/tools/libs/test_editor.py index 2b294defd3..f6033e7122 100644 --- a/tests/metagpt/tools/libs/test_editor.py +++ b/tests/metagpt/tools/libs/test_editor.py @@ -4,7 +4,8 @@ import pytest -from metagpt.const import TEST_DATA_PATH +from metagpt.core.const import TEST_DATA_PATH +from metagpt.core.utils.common import list_files from metagpt.tools.libs.editor import Editor from metagpt.tools.libs.index_repo import ( CHATS_INDEX_ROOT, @@ -13,7 +14,6 @@ UPLOAD_ROOT, IndexRepo, ) -from metagpt.utils.common import list_files TEST_FILE_CONTENT = """ # this is line one diff --git a/tests/metagpt/tools/libs/test_email_login.py b/tests/metagpt/tools/libs/test_email_login.py deleted file mode 100644 index e98820f70c..0000000000 --- a/tests/metagpt/tools/libs/test_email_login.py +++ /dev/null @@ -1,7 +0,0 @@ -from metagpt.tools.libs.email_login import email_login_imap - - -def test_email_login(mocker): - mock_mailbox = mocker.patch("metagpt.tools.libs.email_login.MailBox.login") - mock_mailbox.login.return_value = mocker.Mock() - email_login_imap("test@outlook.com", "test_password") diff --git a/tests/metagpt/tools/libs/test_feature_engineering.py b/tests/metagpt/tools/libs/test_feature_engineering.py deleted file mode 100644 index 3cfd5dacd5..0000000000 --- a/tests/metagpt/tools/libs/test_feature_engineering.py +++ /dev/null @@ -1,175 +0,0 @@ -import numpy as np -import pandas as pd -import pytest -from sklearn.datasets import fetch_california_housing, load_breast_cancer, load_iris - -from metagpt.tools.libs.feature_engineering import ( - CatCount, - CatCross, - ExtractTimeComps, - GeneralSelection, - GroupStat, - KFoldTargetMeanEncoder, - PolynomialExpansion, - SplitBins, - TargetMeanEncoder, - TreeBasedSelection, - VarianceBasedSelection, -) - - -@pytest.fixture -def mock_dataset(): - return pd.DataFrame( - { - "num1": [1, 2, np.nan, 4, 5, 6, 7, 3], - "num2": [1, 3, 2, 1, np.nan, 5, 6, 4], - "num3": [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], - "cat1": ["A", "B", np.nan, "D", "E", "C", "B", "A"], - "cat2": ["A", "A", "A", "A", "A", "A", "A", "A"], - "date1": [ - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-04", - "2020-01-05", - "2020-01-06", - "2020-01-07", - "2020-01-08", - ], - "label": [0, 1, 0, 1, 0, 1, 0, 1], - } - ) - - -def load_sklearn_data(data_name): - if data_name == "iris": - data = load_iris() - elif data_name == "breast_cancer": - data = load_breast_cancer() - elif data_name == "housing": - data = fetch_california_housing() - else: - raise ValueError("data_name not supported") - - X, y, feature_names = data.data, data.target, data.feature_names - data = pd.DataFrame(X, columns=feature_names) - data["label"] = y - return data - - -def test_polynomial_expansion(mock_dataset): - pe = PolynomialExpansion(cols=["num1", "num2", "label"], degree=2, label_col="label") - transformed = pe.fit_transform(mock_dataset) - - assert len(transformed.columns) == len(mock_dataset.columns) + 3 - - # when too many columns - data = load_sklearn_data("breast_cancer") - cols = [c for c in data.columns if c != "label"] - pe = PolynomialExpansion(cols=cols, degree=2, label_col="label") - transformed = pe.fit_transform(data) - - assert len(transformed.columns) == len(data.columns) + 55 - - -def test_cat_count(mock_dataset): - cc = CatCount(col="cat1") - transformed = cc.fit_transform(mock_dataset) - - assert "cat1_cnt" in transformed.columns - assert transformed["cat1_cnt"][0] == 2 - - -def test_target_mean_encoder(mock_dataset): - tme = TargetMeanEncoder(col="cat1", label="label") - transformed = tme.fit_transform(mock_dataset) - - assert "cat1_target_mean" in transformed.columns - assert transformed["cat1_target_mean"][0] == 0.5 - - -def test_kfold_target_mean_encoder(mock_dataset): - kfme = KFoldTargetMeanEncoder(col="cat1", label="label") - transformed = kfme.fit_transform(mock_dataset) - - assert "cat1_kf_target_mean" in transformed.columns - - -def test_cat_cross(mock_dataset): - cc = CatCross(cols=["cat1", "cat2"]) - transformed = cc.fit_transform(mock_dataset) - - assert "cat1_cat2" in transformed.columns - - cc = CatCross(cols=["cat1", "cat2"], max_cat_num=3) - transformed = cc.fit_transform(mock_dataset) - - assert "cat1_cat2" not in transformed.columns - - -def test_group_stat(mock_dataset): - gs = GroupStat(group_col="cat1", agg_col="num1", agg_funcs=["mean", "sum"]) - transformed = gs.fit_transform(mock_dataset) - - assert "num1_mean_by_cat1" in transformed.columns - assert "num1_sum_by_cat1" in transformed.columns - - -def test_split_bins(mock_dataset): - sb = SplitBins(cols=["num1"]) - transformed = sb.fit_transform(mock_dataset) - - assert transformed["num1"].nunique() <= 5 - assert all(0 <= x < 5 for x in transformed["num1"]) - - -def test_extract_time_comps(mock_dataset): - time_comps = ["year", "month", "day", "hour", "dayofweek", "is_weekend"] - etc = ExtractTimeComps(time_col="date1", time_comps=time_comps) - transformed = etc.fit_transform(mock_dataset.copy()) - - for comp in time_comps: - assert comp in transformed.columns - assert transformed["year"][0] == 2020 - assert transformed["month"][0] == 1 - assert transformed["day"][0] == 1 - assert transformed["hour"][0] == 0 - assert transformed["dayofweek"][0] == 3 - assert transformed["is_weekend"][0] == 0 - - -def test_general_selection(mock_dataset): - gs = GeneralSelection(label_col="label") - transformed = gs.fit_transform(mock_dataset.copy()) - - assert "num3" not in transformed.columns - assert "cat2" not in transformed.columns - - -@pytest.mark.skip # skip because TreeBasedSelection needs lgb as dependency -def test_tree_based_selection(mock_dataset): - # regression - data = load_sklearn_data("housing") - tbs = TreeBasedSelection(label_col="label", task_type="reg") - transformed = tbs.fit_transform(data) - assert len(transformed.columns) > 1 - - # classification - data = load_sklearn_data("breast_cancer") - tbs = TreeBasedSelection(label_col="label", task_type="cls") - transformed = tbs.fit_transform(data) - assert len(transformed.columns) > 1 - - # multi-classification - data = load_sklearn_data("iris") - tbs = TreeBasedSelection(label_col="label", task_type="mcls") - transformed = tbs.fit_transform(data) - assert len(transformed.columns) > 1 - - -def test_variance_based_selection(mock_dataset): - vbs = VarianceBasedSelection(label_col="label") - transformed = vbs.fit_transform(mock_dataset.copy()) - - assert "num3" not in transformed.columns diff --git a/tests/metagpt/tools/libs/test_git.py b/tests/metagpt/tools/libs/test_git.py index 49ac8841e0..46b5dd460e 100644 --- a/tests/metagpt/tools/libs/test_git.py +++ b/tests/metagpt/tools/libs/test_git.py @@ -9,10 +9,10 @@ from github import Auth, Github from pydantic import BaseModel -from metagpt.context import Context -from metagpt.roles.di.data_interpreter import DataInterpreter -from metagpt.schema import UserMessage -from metagpt.utils.common import awrite +from metagpt.core.context import Context +from metagpt.core.schema import UserMessage +from metagpt.core.utils.common import awrite +from metagpt.roles.data_interpreter import DataInterpreter from metagpt.utils.git_repository import GitRepository diff --git a/tests/metagpt/tools/libs/test_gpt_v_generator.py b/tests/metagpt/tools/libs/test_gpt_v_generator.py deleted file mode 100644 index 4a2e686825..0000000000 --- a/tests/metagpt/tools/libs/test_gpt_v_generator.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/01/15 -@Author : mannaandpoem -@File : test_gpt_v_generator.py -""" -from pathlib import Path - -import pytest - -from metagpt import logs -from metagpt.const import METAGPT_ROOT -from metagpt.tools.libs.gpt_v_generator import GPTvGenerator - - -@pytest.fixture -def mock_webpage_filename_with_styles_and_scripts(mocker): - mock_data = """```html\n\n -\n\n```\n -```css\n/* styles.css */\n```\n -```javascript\n// scripts.js\n```\n""" - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", return_value=mock_data) - return mocker - - -@pytest.fixture -def mock_webpage_filename_with_style_and_script(mocker): - mock_data = """```html\n\n -\n\n```\n -```css\n/* style.css */\n```\n -```javascript\n// script.js\n```\n""" - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", return_value=mock_data) - return mocker - - -@pytest.fixture -def mock_image_layout(mocker): - image_layout = "The layout information of the sketch image is ..." - mocker.patch("metagpt.provider.base_llm.BaseLLM.aask", return_value=image_layout) - return mocker - - -@pytest.fixture -def image_path(): - return f"{METAGPT_ROOT}/docs/resources/workspace/content_rec_sys/resources/competitive_analysis.png" - - -@pytest.mark.asyncio -async def test_generate_webpages(mock_webpage_filename_with_styles_and_scripts, image_path): - generator = GPTvGenerator() - rsp = await generator.generate_webpages(image_path=image_path) - logs.logger.info(rsp) - assert "html" in rsp - assert "css" in rsp - assert "javascript" in rsp - - -@pytest.mark.asyncio -async def test_save_webpages_with_styles_and_scripts(mock_webpage_filename_with_styles_and_scripts, image_path): - generator = GPTvGenerator() - webpages = await generator.generate_webpages(image_path) - webpages_dir = generator.save_webpages(webpages=webpages, save_folder_name="test_1") - logs.logger.info(webpages_dir) - assert webpages_dir.exists() - assert (webpages_dir / "index.html").exists() - assert (webpages_dir / "styles.css").exists() - assert (webpages_dir / "scripts.js").exists() - - -@pytest.mark.asyncio -async def test_save_webpages_with_style_and_script(mock_webpage_filename_with_style_and_script, image_path): - generator = GPTvGenerator() - webpages = await generator.generate_webpages(image_path) - webpages_dir = generator.save_webpages(webpages=webpages, save_folder_name="test_2") - logs.logger.info(webpages_dir) - assert webpages_dir.exists() - assert (webpages_dir / "index.html").exists() - assert (webpages_dir / "style.css").exists() - assert (webpages_dir / "script.js").exists() - - -@pytest.mark.asyncio -async def test_analyze_layout(mock_image_layout, image_path): - layout = await GPTvGenerator().analyze_layout(Path(image_path)) - logs.logger.info(layout) - assert layout - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/libs/test_index_repo.py b/tests/metagpt/tools/libs/test_index_repo.py index 680a7e187d..83bbfdb94f 100644 --- a/tests/metagpt/tools/libs/test_index_repo.py +++ b/tests/metagpt/tools/libs/test_index_repo.py @@ -3,7 +3,7 @@ import pytest -from metagpt.const import DEFAULT_WORKSPACE_ROOT, TEST_DATA_PATH +from metagpt.core.const import DEFAULT_WORKSPACE_ROOT, TEST_DATA_PATH from metagpt.tools.libs.index_repo import ( CHATS_INDEX_ROOT, UPLOADS_INDEX_ROOT, diff --git a/tests/metagpt/tools/libs/test_sd_engine.py b/tests/metagpt/tools/libs/test_sd_engine.py deleted file mode 100644 index e2c46e72a4..0000000000 --- a/tests/metagpt/tools/libs/test_sd_engine.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 1/10/2024 10:07 PM -# @Author : stellahong (stellahong@fuzhi.ai) -# @Desc : -import base64 -import io -import json - -import pytest -from PIL import Image, ImageDraw - -from metagpt.tools.libs.sd_engine import SDEngine - - -def generate_mock_image_data(): - # 创建一个简单的图片对象 - image = Image.new("RGB", (100, 100), color="white") - draw = ImageDraw.Draw(image) - draw.text((10, 10), "Mock Image", fill="black") - - # 将图片转换为二进制数据 - with io.BytesIO() as buffer: - image.save(buffer, format="PNG") - image_binary = buffer.getvalue() - - # 对图片二进制数据进行 base64 编码 - image_base64 = base64.b64encode(image_binary).decode("utf-8") - - return image_base64 - - -def test_sd_tools(mocker): - mock_response = mocker.MagicMock() - mock_response.json.return_value = {"images": [generate_mock_image_data()]} - mocker.patch("requests.Session.post", return_value=mock_response) - - engine = SDEngine(sd_url="http://example_localhost:7860") - prompt = "1boy, hansom" - engine.construct_payload(prompt) - engine.simple_run_t2i(engine.payload) - - -def test_sd_construct_payload(): - engine = SDEngine(sd_url="http://example_localhost:7860") - prompt = "1boy, hansom" - engine.construct_payload(prompt) - assert "negative_prompt" in engine.payload - - -@pytest.mark.asyncio -async def test_sd_asyn_t2i(mocker): - mock_post = mocker.patch("aiohttp.ClientSession.post") - mock_response = mocker.AsyncMock() - mock_response.read.return_value = json.dumps({"images": [generate_mock_image_data()]}) - mock_post.return_value.__aenter__.return_value = mock_response - - engine = SDEngine(sd_url="http://example_localhost:7860") - prompt = "1boy, hansom" - engine.construct_payload(prompt) - await engine.run_t2i([engine.payload]) - assert "negative_prompt" in engine.payload diff --git a/tests/metagpt/tools/libs/test_software_development.py b/tests/metagpt/tools/libs/test_software_development.py deleted file mode 100644 index c622583535..0000000000 --- a/tests/metagpt/tools/libs/test_software_development.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -from typing import Dict - -import pytest - -from metagpt.tools.libs.software_development import import_git_repo - - -async def get_env_description() -> Dict[str, str]: - return {'await get_env(key="access_token", app_name="github")': "get the access token for github authentication."} - - -@pytest.mark.skip -@pytest.mark.asyncio -async def test_import_repo(): - url = "https://github.com/spec-first/connexion.git" - path = await import_git_repo(url) - assert path - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/libs/test_terminal.py b/tests/metagpt/tools/libs/test_terminal.py index 9c64009aea..10b9753a8d 100644 --- a/tests/metagpt/tools/libs/test_terminal.py +++ b/tests/metagpt/tools/libs/test_terminal.py @@ -1,6 +1,6 @@ import pytest -from metagpt.const import DATA_PATH, METAGPT_ROOT +from metagpt.core.const import DATA_PATH, METAGPT_ROOT from metagpt.tools.libs.terminal import Terminal diff --git a/tests/metagpt/tools/libs/test_web_scraping.py b/tests/metagpt/tools/libs/test_web_scraping.py deleted file mode 100644 index 5ebd916d2c..0000000000 --- a/tests/metagpt/tools/libs/test_web_scraping.py +++ /dev/null @@ -1,14 +0,0 @@ -import pytest - -from metagpt.tools.libs.web_scraping import view_page_element_to_scrape - - -@pytest.mark.asyncio -async def test_view_page_element_to_scrape(): - # Define the test URL and parameters - test_url = "https://docs.deepwisdom.ai/main/zh/" - test_requirement = "Retrieve all paragraph texts" - test_keep_links = True - test_page = await view_page_element_to_scrape(test_url, test_requirement, test_keep_links) - assert isinstance(test_page, str) - assert "html" in test_page diff --git a/tests/metagpt/tools/test_azure_tts.py b/tests/metagpt/tools/test_azure_tts.py deleted file mode 100644 index f72b5663b1..0000000000 --- a/tests/metagpt/tools/test_azure_tts.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/7/1 22:50 -@Author : alexanderwu -@File : test_azure_tts.py -@Modified By: mashenquan, 2023-8-9, add more text formatting options -@Modified By: mashenquan, 2023-8-17, move to `tools` folder. -""" -from pathlib import Path - -import pytest -from azure.cognitiveservices.speech import ResultReason, SpeechSynthesizer - -from metagpt.config2 import config -from metagpt.tools.azure_tts import AzureTTS - - -@pytest.mark.asyncio -async def test_azure_tts(mocker): - # mock - mock_result = mocker.Mock() - mock_result.audio_data = b"mock audio data" - mock_result.reason = ResultReason.SynthesizingAudioCompleted - mock_data = mocker.Mock() - mock_data.get.return_value = mock_result - mocker.patch.object(SpeechSynthesizer, "speak_ssml_async", return_value=mock_data) - mocker.patch.object(Path, "exists", return_value=True) - - # Prerequisites - assert config.azure_tts_subscription_key and config.azure_tts_subscription_key != "YOUR_API_KEY" - assert config.azure_tts_region - - azure_tts = AzureTTS(subscription_key=config.azure_tts_subscription_key, region=config.azure_tts_region) - text = """ - 女儿看见父亲走了进来,问道: - - “您来的挺快的,怎么过来的?” - - 父亲放下手提包,说: - - “Writing a binary file in Python is similar to writing a regular text file, but you'll work with bytes instead of strings.” - - """ - path = config.workspace.path / "tts" - path.mkdir(exist_ok=True, parents=True) - filename = path / "girl.wav" - filename.unlink(missing_ok=True) - result = await azure_tts.synthesize_speech( - lang="zh-CN", voice="zh-CN-XiaomoNeural", text=text, output_file=str(filename) - ) - print(result) - assert result - assert result.audio_data - assert result.reason == ResultReason.SynthesizingAudioCompleted - assert filename.exists() - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_iflytek_tts.py b/tests/metagpt/tools/test_iflytek_tts.py deleted file mode 100644 index b4bcadb89a..0000000000 --- a/tests/metagpt/tools/test_iflytek_tts.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/12/26 -@Author : mashenquan -@File : test_iflytek_tts.py -""" -import pytest - -from metagpt.config2 import config -from metagpt.tools.iflytek_tts import IFlyTekTTS, oas3_iflytek_tts - - -@pytest.mark.asyncio -async def test_iflytek_tts(mocker): - # mock - config.azure_tts_subscription_key = None - config.azure_tts_region = None - mocker.patch.object(IFlyTekTTS, "synthesize_speech", return_value=None) - mock_data = mocker.AsyncMock() - mock_data.read.return_value = b"mock iflytek" - mock_reader = mocker.patch("aiofiles.open") - mock_reader.return_value.__aenter__.return_value = mock_data - - # Prerequisites - assert config.iflytek_app_id - assert config.iflytek_api_key - assert config.iflytek_api_secret - - result = await oas3_iflytek_tts( - text="你好,hello", - app_id=config.iflytek_app_id, - api_key=config.iflytek_api_key, - api_secret=config.iflytek_api_secret, - ) - assert result - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_metagpt_oas3_api_svc.py b/tests/metagpt/tools/test_metagpt_oas3_api_svc.py deleted file mode 100644 index 5be139106b..0000000000 --- a/tests/metagpt/tools/test_metagpt_oas3_api_svc.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/12/26 -@Author : mashenquan -@File : test_metagpt_oas3_api_svc.py -""" -import asyncio -import subprocess -from pathlib import Path - -import pytest -import requests - - -@pytest.mark.asyncio -async def test_oas2_svc(context): - workdir = Path(__file__).parent.parent.parent.parent - script_pathname = workdir / "metagpt/tools/metagpt_oas3_api_svc.py" - env = context.new_environ() - env["PYTHONPATH"] = str(workdir) + ":" + env.get("PYTHONPATH", "") - process = subprocess.Popen(["python", str(script_pathname)], cwd=str(workdir), env=env) - await asyncio.sleep(5) - - try: - url = "http://localhost:8080/openapi/greeting/dave" - headers = {"accept": "text/plain", "Content-Type": "application/json"} - data = {} - response = requests.post(url, headers=headers, json=data) - assert response.text == "Hello dave\n" - finally: - process.terminate() - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_metagpt_text_to_image.py b/tests/metagpt/tools/test_metagpt_text_to_image.py deleted file mode 100644 index d3797a460e..0000000000 --- a/tests/metagpt/tools/test_metagpt_text_to_image.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/12/26 -@Author : mashenquan -@File : test_metagpt_text_to_image.py -""" -import base64 -from unittest.mock import AsyncMock - -import pytest - -from metagpt.config2 import config -from metagpt.tools.metagpt_text_to_image import oas3_metagpt_text_to_image - - -@pytest.mark.asyncio -async def test_draw(mocker): - # mock - mock_post = mocker.patch("aiohttp.ClientSession.post") - mock_response = AsyncMock() - mock_response.status = 200 - mock_response.json.return_value = {"images": [base64.b64encode(b"success")], "parameters": {"size": 1110}} - mock_post.return_value.__aenter__.return_value = mock_response - - # Prerequisites - assert config.metagpt_tti_url - - binary_data = await oas3_metagpt_text_to_image("Panda emoji") - assert binary_data - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_moderation.py b/tests/metagpt/tools/test_moderation.py deleted file mode 100644 index 8dc9e9d5e7..0000000000 --- a/tests/metagpt/tools/test_moderation.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/9/26 14:46 -@Author : zhanglei -@File : test_moderation.py -""" - -import pytest - -from metagpt.config2 import config -from metagpt.llm import LLM -from metagpt.tools.moderation import Moderation - - -@pytest.mark.asyncio -@pytest.mark.parametrize( - ("content",), - [ - [ - ["I will kill you", "The weather is really nice today", "I want to hit you"], - ] - ], -) -async def test_amoderation(content): - # Prerequisites - assert config.get_openai_llm() - - moderation = Moderation(LLM()) - results = await moderation.amoderation(content=content) - assert isinstance(results, list) - assert len(results) == len(content) - - results = await moderation.amoderation_with_categories(content=content) - assert isinstance(results, list) - assert results - for m in results: - assert "flagged" in m - assert "true_categories" in m - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_openai_text_to_embedding.py b/tests/metagpt/tools/test_openai_text_to_embedding.py deleted file mode 100644 index 047206d486..0000000000 --- a/tests/metagpt/tools/test_openai_text_to_embedding.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/12/26 -@Author : mashenquan -@File : test_openai_text_to_embedding.py -""" -import json -from pathlib import Path - -import pytest - -from metagpt.config2 import config -from metagpt.tools.openai_text_to_embedding import oas3_openai_text_to_embedding -from metagpt.utils.common import aread - - -@pytest.mark.asyncio -async def test_embedding(mocker): - # mock - mock_post = mocker.patch("aiohttp.ClientSession.post") - mock_response = mocker.AsyncMock() - mock_response.status = 200 - data = await aread(Path(__file__).parent / "../../data/openai/embedding.json") - mock_response.json.return_value = json.loads(data) - mock_post.return_value.__aenter__.return_value = mock_response - type(config.get_openai_llm()).proxy = mocker.PropertyMock(return_value="http://mock.proxy") - - # Prerequisites - llm_config = config.get_openai_llm() - assert llm_config - assert llm_config.proxy - - result = await oas3_openai_text_to_embedding( - "Panda emoji", openai_api_key=llm_config.api_key, proxy=llm_config.proxy - ) - assert result - assert result.model - assert len(result.data) > 0 - assert len(result.data[0].embedding) > 0 - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_openai_text_to_image.py b/tests/metagpt/tools/test_openai_text_to_image.py deleted file mode 100644 index 3f9169ddd4..0000000000 --- a/tests/metagpt/tools/test_openai_text_to_image.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/12/26 -@Author : mashenquan -@File : test_openai_text_to_image.py -""" -import base64 - -import openai -import pytest -from pydantic import BaseModel - -from metagpt.config2 import config -from metagpt.llm import LLM -from metagpt.tools.openai_text_to_image import ( - OpenAIText2Image, - oas3_openai_text_to_image, -) -from metagpt.utils.s3 import S3 - - -@pytest.mark.asyncio -async def test_draw(mocker): - # mock - mock_url = mocker.Mock() - mock_url.url.return_value = "http://mock.com/0.png" - - class _MockData(BaseModel): - data: list - - mock_data = _MockData(data=[mock_url]) - mocker.patch.object(openai.resources.images.AsyncImages, "generate", return_value=mock_data) - mock_post = mocker.patch("aiohttp.ClientSession.get") - mock_response = mocker.AsyncMock() - mock_response.status = 200 - mock_response.read.return_value = base64.b64encode(b"success") - mock_post.return_value.__aenter__.return_value = mock_response - mocker.patch.object(S3, "cache", return_value="http://mock.s3.com/0.png") - - # Prerequisites - llm_config = config.get_openai_llm() - assert llm_config - - binary_data = await oas3_openai_text_to_image("Panda emoji", llm=LLM(llm_config=llm_config)) - assert binary_data - - -@pytest.mark.asyncio -async def test_get_image(): - data = await OpenAIText2Image.get_image_data( - url="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" - ) - assert data - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_openapi_v3_hello.py b/tests/metagpt/tools/test_openapi_v3_hello.py deleted file mode 100644 index f49b8412a9..0000000000 --- a/tests/metagpt/tools/test_openapi_v3_hello.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/12/26 -@Author : mashenquan -@File : test_openapi_v3_hello.py -""" -import asyncio -import subprocess -from pathlib import Path - -import pytest -import requests - - -@pytest.mark.asyncio -async def test_hello(context): - workdir = Path(__file__).parent.parent.parent.parent - script_pathname = workdir / "metagpt/tools/openapi_v3_hello.py" - env = context.new_environ() - env["PYTHONPATH"] = str(workdir) + ":" + env.get("PYTHONPATH", "") - process = subprocess.Popen(["python", str(script_pathname)], cwd=workdir, env=env) - await asyncio.sleep(5) - - try: - url = "http://localhost:8082/openapi/greeting/dave" - headers = {"accept": "text/plain", "Content-Type": "application/json"} - data = {} - response = requests.post(url, headers=headers, json=data) - assert response.text == "Hello dave\n" - finally: - process.terminate() - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_prompt_writer.py b/tests/metagpt/tools/test_prompt_writer.py deleted file mode 100644 index 680d4fe540..0000000000 --- a/tests/metagpt/tools/test_prompt_writer.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/5/2 17:46 -@Author : alexanderwu -@File : test_prompt_writer.py -""" - -import pytest - -from metagpt.logs import logger -from metagpt.tools.prompt_writer import ( - BEAGECTemplate, - EnronTemplate, - GPTPromptGenerator, - WikiHowTemplate, -) - - -@pytest.mark.asyncio -@pytest.mark.usefixtures("llm_api") -async def test_gpt_prompt_generator(llm_api): - generator = GPTPromptGenerator() - example = ( - "商品名称:WonderLab 新肌果味代餐奶昔 小胖瓶 胶原蛋白升级版 饱腹代餐粉6瓶 75g/瓶(6瓶/盒) 店铺名称:金力宁食品专营店 " "品牌:WonderLab 保质期:1年 产地:中国 净含量:450g" - ) - - results = await llm_api.aask_batch(generator.gen(example)) - logger.info(results) - assert len(results) > 0 - - -@pytest.mark.usefixtures("llm_api") -def test_wikihow_template(llm_api): - template = WikiHowTemplate() - question = "learn Python" - step = 5 - - results = template.gen(question, step) - assert len(results) > 0 - assert any("Give me 5 steps to learn Python." in r for r in results) - - -@pytest.mark.usefixtures("llm_api") -def test_enron_template(llm_api): - template = EnronTemplate() - subj = "Meeting Agenda" - - results = template.gen(subj) - assert len(results) > 0 - assert any('Write an email with the subject "Meeting Agenda".' in r for r in results) - - -def test_beagec_template(): - template = BEAGECTemplate() - - results = template.gen() - assert len(results) > 0 - assert any( - "Edit and revise this document to improve its grammar, vocabulary, spelling, and style." in r for r in results - ) - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_search_engine.py b/tests/metagpt/tools/test_search_engine.py index 498d3974d7..a6815a4b7f 100644 --- a/tests/metagpt/tools/test_search_engine.py +++ b/tests/metagpt/tools/test_search_engine.py @@ -11,8 +11,8 @@ import pytest -from metagpt.configs.search_config import SearchConfig -from metagpt.logs import logger +from metagpt.core.configs.search_config import SearchConfig +from metagpt.core.logs import logger from metagpt.tools import SearchEngineType from metagpt.tools.search_engine import SearchEngine diff --git a/tests/metagpt/tools/test_search_engine_meilisearch.py b/tests/metagpt/tools/test_search_engine_meilisearch.py deleted file mode 100644 index 574d6d30f4..0000000000 --- a/tests/metagpt/tools/test_search_engine_meilisearch.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/5/27 22:18 -@Author : alexanderwu -@File : test_search_engine_meilisearch.py -""" -import subprocess -import time - -import pytest - -from metagpt.logs import logger -from metagpt.tools.search_engine_meilisearch import DataSource, MeilisearchEngine - -MASTER_KEY = "116Qavl2qpCYNEJNv5-e0RC9kncev1nr1gt7ybEGVLk" - - -@pytest.fixture() -def search_engine_server(): - # Prerequisites - # https://www.meilisearch.com/docs/learn/getting_started/installation - # brew update && brew install meilisearch - - meilisearch_process = subprocess.Popen(["meilisearch", "--master-key", f"{MASTER_KEY}"], stdout=subprocess.PIPE) - time.sleep(3) - yield - meilisearch_process.terminate() - meilisearch_process.wait() - - -@pytest.mark.skip -def test_meilisearch(search_engine_server): - # Prerequisites - # https://www.meilisearch.com/docs/learn/getting_started/installation - # brew update && brew install meilisearch - - search_engine = MeilisearchEngine(url="http://localhost:7700", token=MASTER_KEY) - - # 假设有一个名为"books"的数据源,包含要添加的文档库 - books_data_source = DataSource(name="books", url="https://example.com/books") - - # 假设有一个名为"documents"的文档库,包含要添加的文档 - documents = [ - {"id": 1, "title": "Book 1", "content": "This is the content of Book 1."}, - {"id": 2, "title": "Book 2", "content": "This is the content of Book 2."}, - {"id": 3, "title": "Book 1", "content": "This is the content of Book 1."}, - {"id": 4, "title": "Book 2", "content": "This is the content of Book 2."}, - {"id": 5, "title": "Book 1", "content": "This is the content of Book 1."}, - {"id": 6, "title": "Book 2", "content": "This is the content of Book 2."}, - ] - - # 添加文档库到搜索引擎 - search_engine.add_documents(books_data_source, documents) - logger.info(search_engine.search("Book 1")) - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/tools/test_tool_convert.py b/tests/metagpt/tools/test_tool_convert.py index 5aa53ce4fe..c9374e46b7 100644 --- a/tests/metagpt/tools/test_tool_convert.py +++ b/tests/metagpt/tools/test_tool_convert.py @@ -2,7 +2,7 @@ import pandas as pd -from metagpt.tools.tool_convert import ( +from metagpt.core.tools.tool_convert import ( convert_code_to_tool_schema, convert_code_to_tool_schema_ast, ) diff --git a/tests/metagpt/tools/test_tool_recommend.py b/tests/metagpt/tools/test_tool_recommend.py index fafe0a6387..a21aa21521 100644 --- a/tests/metagpt/tools/test_tool_recommend.py +++ b/tests/metagpt/tools/test_tool_recommend.py @@ -1,12 +1,9 @@ import pytest -from metagpt.schema import Plan, Task -from metagpt.tools import TOOL_REGISTRY -from metagpt.tools.tool_recommend import ( - BM25ToolRecommender, - ToolRecommender, - TypeMatchToolRecommender, -) +from metagpt.core.schema import Plan, Task +from metagpt.core.tools import TOOL_REGISTRY +from metagpt.core.tools.tool_recommend_base import ToolRecommender +from metagpt.tools.tool_recommend import BM25ToolRecommender, TypeMatchToolRecommender @pytest.fixture @@ -29,17 +26,17 @@ def mock_plan(mocker): @pytest.fixture def mock_bm25_tr(mocker): - tr = BM25ToolRecommender(tools=["FillMissingValue", "PolynomialExpansion", "web scraping"]) + tr = BM25ToolRecommender(tools=["ask_hunman", "reply_to_human", "web scraping"]) return tr def test_tr_init(): - tr = ToolRecommender(tools=["FillMissingValue", "PolynomialExpansion", "web scraping", "non-existing tool"]) + tr = ToolRecommender(tools=["ask_hunman", "reply_to_human", "codereview", "non-existing tool"]) # web_scraping is a tool tag, it has one tool scrape_web_playwright assert list(tr.tools.keys()) == [ - "FillMissingValue", - "PolynomialExpansion", - "scrape_web_playwright", + "ask_hunman", + "reply_to_human", + "codereview", ] diff --git a/tests/metagpt/tools/test_tool_registry.py b/tests/metagpt/tools/test_tool_registry.py index f44dfea0b5..d9cdc73340 100644 --- a/tests/metagpt/tools/test_tool_registry.py +++ b/tests/metagpt/tools/test_tool_registry.py @@ -1,6 +1,6 @@ import pytest -from metagpt.tools.tool_registry import ToolRegistry +from metagpt.core.tools.tool_registry import ToolRegistry @pytest.fixture diff --git a/tests/metagpt/tools/test_translate.py b/tests/metagpt/tools/test_translate.py deleted file mode 100644 index 53f00a88a7..0000000000 --- a/tests/metagpt/tools/test_translate.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/5/2 17:46 -@Author : alexanderwu -@File : test_translate.py -""" - -import pytest - -from metagpt.logs import logger -from metagpt.tools.translator import Translator - - -@pytest.mark.asyncio -@pytest.mark.usefixtures("llm_api") -async def test_translate(llm_api): - poetries = [ - ("Let life be beautiful like summer flowers", "花"), - ("The ancient Chinese poetries are all songs.", "中国"), - ] - for i, j in poetries: - prompt = Translator.translate_prompt(i) - rsp = await llm_api.aask(prompt) - logger.info(rsp) - assert j in rsp diff --git a/tests/metagpt/tools/test_ut_writer.py b/tests/metagpt/tools/test_ut_writer.py deleted file mode 100644 index 557067191a..0000000000 --- a/tests/metagpt/tools/test_ut_writer.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2023/4/30 21:44 -@Author : alexanderwu -@File : test_ut_writer.py -""" -from pathlib import Path - -import pytest -from openai.resources.chat.completions import AsyncCompletions -from openai.types import CompletionUsage -from openai.types.chat.chat_completion import ( - ChatCompletion, - ChatCompletionMessage, - Choice, -) -from openai.types.chat.chat_completion_message_tool_call import ( - ChatCompletionMessageToolCall, - Function, -) - -from metagpt.config2 import config -from metagpt.const import API_QUESTIONS_PATH, UT_PY_PATH -from metagpt.tools.ut_writer import YFT_PROMPT_PREFIX, UTGenerator - - -class TestUTWriter: - @pytest.mark.asyncio - async def test_api_to_ut_sample(self, mocker): - async def mock_create(*args, **kwargs): - return ChatCompletion( - id="chatcmpl-8n5fAd21w2J1IIFkI4qxWlNfM7QRC", - choices=[ - Choice( - finish_reason="stop", - index=0, - logprobs=None, - message=ChatCompletionMessage( - content=None, - role="assistant", - function_call=None, - tool_calls=[ - ChatCompletionMessageToolCall( - id="call_EjjmIY7GMspHu3r9mx8gPA2k", - function=Function( - arguments='{"code":"import string\\nimport random\\n\\ndef random_string' - "(length=10):\\n return ''.join(random.choice(string.ascii_" - 'lowercase) for i in range(length))"}', - name="execute", - ), - type="function", - ) - ], - ), - ) - ], - created=1706710532, - model="gpt-4-turbo", - object="chat.completion", - system_fingerprint="fp_04f9a1eebf", - usage=CompletionUsage(completion_tokens=35, prompt_tokens=1982, total_tokens=2017), - ) - - mocker.patch.object(AsyncCompletions, "create", mock_create) - - # Prerequisites - swagger_file = Path(__file__).parent / "../../data/ut_writer/yft_swaggerApi.json" - assert swagger_file.exists() - assert config.get_openai_llm() - - tags = ["测试", "作业"] - # 这里在文件中手动加入了两个测试标签的API - - utg = UTGenerator( - swagger_file=str(swagger_file), - ut_py_path=UT_PY_PATH, - questions_path=API_QUESTIONS_PATH, - template_prefix=YFT_PROMPT_PREFIX, - ) - ret = await utg.generate_ut(include_tags=tags) - # 后续加入对文件生成内容与数量的检验 - assert ret - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/metagpt/utils/test_ahttp_client.py b/tests/metagpt/utils/test_ahttp_client.py deleted file mode 100644 index a595d645f9..0000000000 --- a/tests/metagpt/utils/test_ahttp_client.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# @Desc : unittest of ahttp_client - -import pytest - -from metagpt.utils.ahttp_client import apost, apost_stream - - -@pytest.mark.asyncio -async def test_apost(): - result = await apost(url="https://www.baidu.com/") - assert "百度一下" in result - - result = await apost( - url="http://aider.meizu.com/app/weather/listWeather", data={"cityIds": "101240101"}, as_json=True - ) - assert result["code"] == "200" - - -@pytest.mark.asyncio -async def test_apost_stream(): - result = apost_stream(url="https://www.baidu.com/") - async for line in result: - assert len(line) >= 0 - - result = apost_stream(url="http://aider.meizu.com/app/weather/listWeather", data={"cityIds": "101240101"}) - async for line in result: - assert len(line) >= 0 diff --git a/tests/metagpt/utils/test_code_parser.py b/tests/metagpt/utils/test_code_parser.py index f4d822f85f..c2f3d83759 100644 --- a/tests/metagpt/utils/test_code_parser.py +++ b/tests/metagpt/utils/test_code_parser.py @@ -8,7 +8,7 @@ import pytest -from metagpt.utils.common import CodeParser +from metagpt.core.utils.common import CodeParser t_text = ''' ## Required Python third-party packages diff --git a/tests/metagpt/utils/test_common.py b/tests/metagpt/utils/test_common.py index b85fe229be..9e1827ed83 100644 --- a/tests/metagpt/utils/test_common.py +++ b/tests/metagpt/utils/test_common.py @@ -17,10 +17,9 @@ from pydantic import BaseModel from metagpt.actions import RunCode -from metagpt.const import get_metagpt_root -from metagpt.roles.tutorial_assistant import TutorialAssistant -from metagpt.schema import Message -from metagpt.utils.common import ( +from metagpt.core.const import get_metagpt_root +from metagpt.core.schema import Message +from metagpt.core.utils.common import ( NoMoneyException, OutputParser, any_to_str, @@ -39,6 +38,7 @@ require_python_version, split_namespace, ) +from metagpt.roles import Engineer class TestGetProjectRoot: @@ -63,12 +63,12 @@ class Input(BaseModel): want: str inputs = [ - Input(x=TutorialAssistant, want="metagpt.roles.tutorial_assistant.TutorialAssistant"), - Input(x=TutorialAssistant(), want="metagpt.roles.tutorial_assistant.TutorialAssistant"), + Input(x=Engineer, want="metagpt.roles.engineer.Engineer"), + Input(x=Engineer(), want="metagpt.roles.engineer.Engineer"), Input(x=RunCode, want="metagpt.actions.run_code.RunCode"), Input(x=RunCode(), want="metagpt.actions.run_code.RunCode"), - Input(x=Message, want="metagpt.schema.Message"), - Input(x=Message(content=""), want="metagpt.schema.Message"), + Input(x=Message, want="metagpt.core.schema.Message"), + Input(x=Message(content=""), want="metagpt.core.schema.Message"), Input(x="A", want="A"), ] for i in inputs: @@ -82,20 +82,20 @@ class Input(BaseModel): inputs = [ Input( - x=[TutorialAssistant, RunCode(), "a"], - want={"metagpt.roles.tutorial_assistant.TutorialAssistant", "metagpt.actions.run_code.RunCode", "a"}, + x=[Engineer, RunCode(), "a"], + want={"metagpt.roles.engineer.Engineer", "metagpt.actions.run_code.RunCode", "a"}, ), Input( - x={TutorialAssistant, "a"}, - want={"metagpt.roles.tutorial_assistant.TutorialAssistant", "a"}, + x={Engineer, "a"}, + want={"metagpt.roles.engineer.Engineer", "a"}, ), Input( - x=(TutorialAssistant, RunCode(), "a"), - want={"metagpt.roles.tutorial_assistant.TutorialAssistant", "metagpt.actions.run_code.RunCode", "a"}, + x=(Engineer, RunCode(), "a"), + want={"metagpt.roles.engineer.Engineer", "metagpt.actions.run_code.RunCode", "a"}, ), Input( - x={"a": TutorialAssistant, "b": RunCode(), "c": "a"}, - want={"a", "metagpt.roles.tutorial_assistant.TutorialAssistant", "metagpt.actions.run_code.RunCode"}, + x={"a": Engineer, "b": RunCode(), "c": "a"}, + want={"a", "metagpt.roles.engineer.Engineer", "metagpt.actions.run_code.RunCode"}, ), ] for i in inputs: diff --git a/tests/metagpt/utils/test_cost_manager.py b/tests/metagpt/utils/test_cost_manager.py index 9508c778f4..7ac1ee283b 100644 --- a/tests/metagpt/utils/test_cost_manager.py +++ b/tests/metagpt/utils/test_cost_manager.py @@ -7,7 +7,7 @@ """ import pytest -from metagpt.utils.cost_manager import CostManager +from metagpt.core.utils.cost_manager import CostManager def test_cost_manager(): diff --git a/tests/metagpt/utils/test_custom_decoder.py b/tests/metagpt/utils/test_custom_decoder.py index 4af7a6cdc3..f34c08152e 100644 --- a/tests/metagpt/utils/test_custom_decoder.py +++ b/tests/metagpt/utils/test_custom_decoder.py @@ -8,7 +8,7 @@ import pytest -from metagpt.utils.custom_decoder import CustomDecoder +from metagpt.core.utils.custom_decoder import CustomDecoder def test_parse_single_quote(): diff --git a/tests/metagpt/utils/test_di_graph_repository.py b/tests/metagpt/utils/test_di_graph_repository.py index d2d0e2b3c8..b21c60e2f2 100644 --- a/tests/metagpt/utils/test_di_graph_repository.py +++ b/tests/metagpt/utils/test_di_graph_repository.py @@ -12,7 +12,7 @@ import pytest from pydantic import BaseModel -from metagpt.const import DEFAULT_WORKSPACE_ROOT +from metagpt.core.const import DEFAULT_WORKSPACE_ROOT from metagpt.repo_parser import RepoParser from metagpt.utils.di_graph_repository import DiGraphRepository from metagpt.utils.graph_repository import GraphRepository diff --git a/tests/metagpt/utils/test_git_repository.py b/tests/metagpt/utils/test_git_repository.py index 480a22e24e..81b42aeee2 100644 --- a/tests/metagpt/utils/test_git_repository.py +++ b/tests/metagpt/utils/test_git_repository.py @@ -12,7 +12,7 @@ import pytest -from metagpt.utils.common import awrite +from metagpt.core.utils.common import awrite from metagpt.utils.git_repository import GitRepository diff --git a/tests/metagpt/utils/test_human_interaction.py b/tests/metagpt/utils/test_human_interaction.py index 24dbac61c7..ad99a10ebe 100644 --- a/tests/metagpt/utils/test_human_interaction.py +++ b/tests/metagpt/utils/test_human_interaction.py @@ -4,7 +4,7 @@ from pydantic import BaseModel -from metagpt.utils.human_interaction import HumanInteraction +from metagpt.core.utils.human_interaction import HumanInteraction class InstructContent(BaseModel): diff --git a/tests/metagpt/utils/test_json_to_markdown.py b/tests/metagpt/utils/test_json_to_markdown.py index 53e410398c..4721c97358 100644 --- a/tests/metagpt/utils/test_json_to_markdown.py +++ b/tests/metagpt/utils/test_json_to_markdown.py @@ -6,7 +6,7 @@ @File : test_json_to_markdown.py """ -from metagpt.utils.json_to_markdown import json_to_markdown +from metagpt.core.utils.json_to_markdown import json_to_markdown def test_json_to_markdown(): diff --git a/tests/metagpt/utils/test_mermaid.py b/tests/metagpt/utils/test_mermaid.py index 1fbf060fe7..067c8e43d8 100644 --- a/tests/metagpt/utils/test_mermaid.py +++ b/tests/metagpt/utils/test_mermaid.py @@ -8,8 +8,8 @@ import pytest -from metagpt.const import DEFAULT_WORKSPACE_ROOT -from metagpt.utils.common import check_cmd_exists, new_transaction_id +from metagpt.core.const import DEFAULT_WORKSPACE_ROOT +from metagpt.core.utils.common import check_cmd_exists, new_transaction_id from metagpt.utils.mermaid import MMC1, mermaid_to_file diff --git a/tests/metagpt/utils/test_output_parser.py b/tests/metagpt/utils/test_output_parser.py index f7717e3605..2dda106372 100644 --- a/tests/metagpt/utils/test_output_parser.py +++ b/tests/metagpt/utils/test_output_parser.py @@ -9,7 +9,7 @@ import pytest -from metagpt.utils.common import OutputParser +from metagpt.core.utils.common import OutputParser def test_parse_blocks(): diff --git a/tests/metagpt/utils/test_project_repo.py b/tests/metagpt/utils/test_project_repo.py index 667927a1d0..d69b0f1d9e 100644 --- a/tests/metagpt/utils/test_project_repo.py +++ b/tests/metagpt/utils/test_project_repo.py @@ -9,7 +9,7 @@ import pytest -from metagpt.const import ( +from metagpt.core.const import ( BUGFIX_FILENAME, PACKAGE_REQUIREMENTS_FILENAME, PRDS_FILE_REPO, diff --git a/tests/metagpt/utils/test_read_docx.py b/tests/metagpt/utils/test_read_docx.py index 5680adb0f8..57113d417b 100644 --- a/tests/metagpt/utils/test_read_docx.py +++ b/tests/metagpt/utils/test_read_docx.py @@ -7,7 +7,7 @@ """ import pytest -from metagpt.const import METAGPT_ROOT +from metagpt.core.const import METAGPT_ROOT from metagpt.utils.read_document import read_docx diff --git a/tests/metagpt/utils/test_repair_llm_raw_output.py b/tests/metagpt/utils/test_repair_llm_raw_output.py index 7a29ea3ee2..6bfc1d1276 100644 --- a/tests/metagpt/utils/test_repair_llm_raw_output.py +++ b/tests/metagpt/utils/test_repair_llm_raw_output.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # @Desc : unittest of repair_llm_raw_output -from metagpt.config2 import config +from metagpt.core.config2 import config """ CONFIG.repair_llm_output should be True before retry_parse_json_text imported. @@ -12,7 +12,7 @@ def test_repair_case_sensitivity(): - from metagpt.utils.repair_llm_raw_output import repair_llm_raw_output + from metagpt.core.utils.repair_llm_raw_output import repair_llm_raw_output raw_output = """{ "Original requirements": "Write a 2048 game", @@ -34,7 +34,7 @@ def test_repair_case_sensitivity(): def test_repair_special_character_missing(): - from metagpt.utils.repair_llm_raw_output import repair_llm_raw_output + from metagpt.core.utils.repair_llm_raw_output import repair_llm_raw_output raw_output = """[CONTENT] "Anything UNCLEAR": "No unclear requirements or information." @@ -70,7 +70,7 @@ def test_repair_special_character_missing(): def test_required_key_pair_missing(): - from metagpt.utils.repair_llm_raw_output import repair_llm_raw_output + from metagpt.core.utils.repair_llm_raw_output import repair_llm_raw_output raw_output = '[CONTENT] {"a": "b"}' target_output = '[CONTENT] {"a": "b"}\n[/CONTENT]' @@ -108,7 +108,10 @@ def test_required_key_pair_missing(): def test_repair_json_format(): - from metagpt.utils.repair_llm_raw_output import RepairType, repair_llm_raw_output + from metagpt.core.utils.repair_llm_raw_output import ( + RepairType, + repair_llm_raw_output, + ) raw_output = "{ xxx }]" target_output = "{ xxx }" @@ -169,7 +172,7 @@ def test_repair_json_format(): def test_repair_invalid_json(): - from metagpt.utils.repair_llm_raw_output import repair_invalid_json + from metagpt.core.utils.repair_llm_raw_output import repair_invalid_json raw_output = """{ "key": "value" @@ -218,7 +221,7 @@ def test_repair_invalid_json(): def test_retry_parse_json_text(): - from metagpt.utils.repair_llm_raw_output import retry_parse_json_text + from metagpt.core.utils.repair_llm_raw_output import retry_parse_json_text invalid_json_text = """{ "Original Requirements": "Create a 2048 game", @@ -275,7 +278,7 @@ def test_extract_content_from_output(): xxx [CONTENT] xxx [CONTENT] xxxx [/CONTENT] xxx [CONTENT] xxxx [/CONTENT] xxx [CONTENT][/CONTENT] xxx [CONTENT][/CONTENT] # target pair is the last one """ - from metagpt.utils.repair_llm_raw_output import extract_content_from_output + from metagpt.core.utils.repair_llm_raw_output import extract_content_from_output output = ( 'Sure! Here is the properly formatted JSON output based on the given context:\n\n[CONTENT]\n{\n"' diff --git a/tests/metagpt/utils/test_s3.py b/tests/metagpt/utils/test_s3.py index ef13c23255..3f61eadff2 100644 --- a/tests/metagpt/utils/test_s3.py +++ b/tests/metagpt/utils/test_s3.py @@ -11,9 +11,9 @@ import aioboto3 import pytest -from metagpt.config2 import Config -from metagpt.configs.s3_config import S3Config -from metagpt.utils.common import aread +from metagpt.core.config2 import Config +from metagpt.core.configs.s3_config import S3Config +from metagpt.core.utils.common import aread from metagpt.utils.s3 import S3 diff --git a/tests/metagpt/utils/test_save_code.py b/tests/metagpt/utils/test_save_code.py deleted file mode 100644 index aceecec3b2..0000000000 --- a/tests/metagpt/utils/test_save_code.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -# @Date : 12/12/2023 4:17 PM -# @Author : stellahong (stellahong@fuzhi.ai) -# @Desc : - -import nbformat -import pytest - -from metagpt.actions.di.execute_nb_code import ExecuteNbCode -from metagpt.utils.common import read_json_file -from metagpt.utils.save_code import DATA_PATH, save_code_file - - -def test_save_code_file_python(): - save_code_file("example", "print('Hello, World!')") - file_path = DATA_PATH / "output" / "example" / "code.py" - assert file_path.exists(), f"File does not exist: {file_path}" - content = file_path.read_text() - assert "print('Hello, World!')" in content, "File content does not match" - - -def test_save_code_file_json(): - save_code_file("example_json", "print('Hello, JSON!')", file_format="json") - file_path = DATA_PATH / "output" / "example_json" / "code.json" - data = read_json_file(file_path) - assert "code" in data, "JSON key 'code' is missing" - assert data["code"] == "print('Hello, JSON!')", "JSON content does not match" - - -@pytest.mark.asyncio -async def test_save_code_file_notebook(): - code = "print('Hello, World!')" - executor = ExecuteNbCode() - await executor.run(code) - # Save as a Notebook file - save_code_file("example_nb", executor.nb, file_format="ipynb") - file_path = DATA_PATH / "output" / "example_nb" / "code.ipynb" - assert file_path.exists(), f"Notebook file does not exist: {file_path}" - - # Additional checks specific to notebook format - notebook = nbformat.read(file_path, as_version=4) - assert len(notebook.cells) > 0, "Notebook should have at least one cell" - first_cell_source = notebook.cells[0].source - assert "print" in first_cell_source, "Notebook cell content does not match" diff --git a/tests/metagpt/utils/test_serialize.py b/tests/metagpt/utils/test_serialize.py index 0ba3a8d411..cb3ba78774 100644 --- a/tests/metagpt/utils/test_serialize.py +++ b/tests/metagpt/utils/test_serialize.py @@ -7,9 +7,9 @@ from typing import List from metagpt.actions import WritePRD -from metagpt.actions.action_node import ActionNode -from metagpt.schema import Message -from metagpt.utils.serialize import ( +from metagpt.core.actions.action_node import ActionNode +from metagpt.core.schema import Message +from metagpt.core.utils.serialize import ( actionoutout_schema_to_mapping, deserialize_message, serialize_message, diff --git a/tests/metagpt/utils/test_token_counter.py b/tests/metagpt/utils/test_token_counter.py index b6eefd61d3..674a809486 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_output_tokens +from metagpt.core.utils.token_counter import count_message_tokens, count_output_tokens def test_count_message_tokens(): diff --git a/tests/metagpt/utils/test_visual_graph_repo.py b/tests/metagpt/utils/test_visual_graph_repo.py deleted file mode 100644 index 7f696b4bc3..0000000000 --- a/tests/metagpt/utils/test_visual_graph_repo.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -@Time : 2024/1/4 -@Author : mashenquan -@File : test_visual_graph_repo.py -@Desc : Unit tests for testing and demonstrating the usage of VisualDiGraphRepo. -""" - -import re -from pathlib import Path - -import pytest - -from metagpt.utils.common import remove_affix, split_namespace -from metagpt.utils.visual_graph_repo import VisualDiGraphRepo - - -@pytest.mark.asyncio -async def test_visual_di_graph_repo(context, mocker): - filename = Path(__file__).parent / "../../data/graph_db/networkx.sequence_view.json" - repo = await VisualDiGraphRepo.load_from(filename=filename) - - class_view = await repo.get_mermaid_class_view() - assert class_view - await context.repo.resources.graph_repo.save(filename="class_view.md", content=f"```mermaid\n{class_view}\n```\n") - - sequence_views = await repo.get_mermaid_sequence_views() - assert sequence_views - for ns, sqv in sequence_views: - filename = re.sub(r"[:/\\\.]+", "_", ns) + ".sequence_view.md" - sqv = sqv.strip(" `") - await context.repo.resources.graph_repo.save(filename=filename, content=f"```mermaid\n{sqv}\n```\n") - - sequence_view_vers = await repo.get_mermaid_sequence_view_versions() - assert sequence_view_vers - for ns, sqv in sequence_view_vers: - ver, sqv = split_namespace(sqv) - filename = re.sub(r"[:/\\\.]+", "_", ns) + f".{ver}.sequence_view_ver.md" - sqv = remove_affix(sqv).strip(" `") - await context.repo.resources.graph_repo.save(filename=filename, content=f"```mermaid\n{sqv}\n```\n") - - -if __name__ == "__main__": - pytest.main([__file__, "-s"]) diff --git a/tests/mock/mock_llm.py b/tests/mock/mock_llm.py index 704403e644..dec094d9ab 100644 --- a/tests/mock/mock_llm.py +++ b/tests/mock/mock_llm.py @@ -1,14 +1,14 @@ import json from typing import Optional, Union -from metagpt.config2 import config -from metagpt.configs.llm_config import LLMType -from metagpt.const import LLM_API_TIMEOUT -from metagpt.logs import logger +from metagpt.core.config2 import config +from metagpt.core.configs.llm_config import LLMType +from metagpt.core.const import LLM_API_TIMEOUT +from metagpt.core.logs import logger +from metagpt.core.provider.constant import GENERAL_FUNCTION_SCHEMA +from metagpt.core.schema import Message from metagpt.provider.azure_openai_api import AzureOpenAILLM -from metagpt.provider.constant import GENERAL_FUNCTION_SCHEMA from metagpt.provider.openai_api import OpenAILLM -from metagpt.schema import Message OriginalLLM = OpenAILLM if config.llm.api_type == LLMType.OPENAI else AzureOpenAILLM @@ -58,7 +58,7 @@ async def original_aask( return rsp async def original_aask_batch(self, msgs: list, timeout=LLM_API_TIMEOUT) -> str: - """A copy of metagpt.provider.base_llm.BaseLLM.aask_batch, we can't use super().aask because it will be mocked""" + """A copy of metagpt.core.provider.base_llm.BaseLLM.aask_batch, we can't use super().aask because it will be mocked""" context = [] for msg in msgs: umsg = self._user_msg(msg)